DVWA_(Command Injection)
前言
命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。当应用程序将不安全的用户提供的数据>(表单,cookie,HTTP标头等)传递给系统shell时,可能会发生命令注入攻击。在此攻击中,攻击者提供的操作系统命令通常以易受攻击的应用程序的权限执行。命令注入攻击很可能主要是由于输入验证不足。
此攻击与代码注入不同,因为代码注入允许攻击者添加自己的代码,然后由应用程序执行。在命令注入中,攻击者扩展了执行系统命令的应用程序的默认功能,而无需注入代码。command Injection>>借助PHP对服务端shell的启用>>攻击者插入恶意shell命令
low
源码分析
PHP执行流程>>传入IP地址>>php判断操作系统类型>>执行PING命令
从源码可分析,未对IP地址过滤。可以采用IP&&dos 命令对操作系统恶意操作
写入一句话
echo ““>F:\phpstudy\PHPTutorial\WWW\DVWA\vulnerabilities\post123.php
medium
对IP && ;; 进行过滤
1)我们可以通过&和;混搭,欺骗过滤函数,测试代码如下
2) command1&command2 先执行command1,不管是否成功,都会执行command2
higth
‘| ’ 过滤出现了差错
Command 1 | Command 2
“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。
impossible
对传入参数,对IP做约束。使得用户只能输入IP地址。
防御
摘自OWASP
理想情况下,开发人员应使用现有的API作为其语言。例如(Java):使用位于javax.mail的可用Java API,而不是使用Runtime.exec()发出’mail’命令。
如果不存在此类可用API,则开发人员应清除所有恶意字符输入。实施积极的安全模型将是最有效的。通常,定义合法字符要比非法字符容易得多。
命令执行执行模型
命令执行漏洞可以执行系统命令,代码执行漏洞也会执行系统命令
- 命令执行漏洞是直接调用操作系统命令,叫做OS命令执行漏洞
- 代码执行漏洞则是靠执行脚本代码调用操作系统命令
PHP命令执行
函数system()、shell_exec()、exec()和passthru()
命令执行
<?php
$host=$argv[1];
system("ping",$host);
>
执行命令 "php.exe cmd.php www.123.com"
代码执行
eval()
解析括号中的内容
动态函数调用
危险代码一:
<?php function A(){ return "A()函数.."; } function B(){ return "B()函数.."; } $fun = $_REQUESTS['fun']; echo $fun() >
PHP根据$fun值来调用对应函数,如
"http://www.123.com/function.php?fun=phpinfo"
就会输出函数phpinfo()
危险代码二
<?php $fun = $_GET['fun']; $par = $_GET['par']; $fun($par) >
"http://www.123.com/funtion.php/?fun=system&par=net user"
组成函数为system("net user")
PHP函数代码执行漏洞
preg_replace()、ob_start()、array_map()
<?php
$arr = $_GET['arr'];
$array = array(1,2,3,4,5);
$new_array = array_map(%arr,$array);
?>
http://192.168.43.195/xxx.php?arr=phpinfo
还有关于JAVA、框架命令执行漏洞等知识充沛在接触.
防范命令执行漏洞
- 尽量不使用系统执行命令
- 执行命令函数或方法之前,变量做好过滤
- 使用动态函数之前,确保必须是使用指定函数
- 无法控制危险函数最好不要使用
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!