命令、代码执行漏洞
命令执行漏洞
- 定义:
- Web应用程序接收到用户输入,拼接到要执行的系统命令中执行。
- 原因:
- 用户输入未过滤或净化;
- 拼接到系统命令中执行;
PHP下命令执行函数
system()
,exec()
,shell_exec()
,passthru()
,popen()
,proc_popen()
- 某些情况下,要注意存在以上函数的php文件,可能是WebShell。
命令执行漏洞代码分析
-
一下给出一个存在命令执行漏洞的简单代码。
<?php echo "<pre>"; if(isset($_GET["cmd"])){ system($_GET["cmd"]); } echo "</pre>"; ?>
-
访问以上.php文件,
http://xxx/cmd.php?cmd=ipconfig
,查看网卡信息
命令执行漏洞利用
-
使用以下php代码,对目标主机执行ping命令
<?php echo "<pre>"; $arg = $_GET['cmd']; if ($arg) { system("ping $arg"); } echo "</pre>"; ?>
-
利用思路
- 代码中拼接用户的输入并通过system()执行代码,但是无法执行用户的自定义命令。
- 故:截断输入、重新品街、两条命令都输入并执行。
命令执行漏洞拼接符介绍:
-
在Windows系统下的cmd命令中,有以下截断拼接符:
&
前面的语句为假则直接执行后面的,eg:ping 111 & ipconfig
&&
前面的语句为假则直接出错,后面的也不执行,eg:ping 127.0.0.1 && ipconfig
|
直接执行后面的语句,eg:ping 127.0.0.1 | ipconfig
||
前面出错执行后面的,eg:ping 111 || ipconfig
- eg:
http://xxx/cmd.php?cmd=8.8.8.8|ipconfig
-
在Linux系统下的shell命令中,有以下截断拼接符:
a;b
型拼接,不管a命令是否成功,b命令都会执行a||b
型拼接,不管a是否成功,都执行ba&b
型拼接,无论a是否成功,都执行b|
是管道符,显示后面的执行结果a&&b
型拼接,只有a命令执行成功才会执行b命令- eg:
http://xxx/cmd.php?cmd=8.8.8.8;ifconfig
命令执行漏洞利用
-
在php下,除了函数可以执行系统命令,反引号 “ ` ” 也可以执行系统命令。
eg:echo `$cmd`
-
php eval() 函数:
eval() 函数把字符串按照php代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
eg:
http://ip/search.php?searchtype=5&tid=&area=eval($_POST[cmd])
,用菜刀连接该url
commix工具
- Commix是一个使用Python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏洞,并且对其进行测试,在其作者发布的最新版本中支持直接直接导入burp的历史记录进行检测,大大提高了易用性。
commix -u <url>