【白帽子学习笔记12】DVWA Command Injection【命令行执行漏洞】
文章目录
什么是命令执行漏洞?
命令执行漏洞是指可以随机执行系统命令,属于高危漏洞之一,也属于代码执行范围内原理:
只要程序可以调用系统命令的情况下都可以发生命令执行漏洞。
条件:用户能够控制函数输入,存在可以执行代码的危险函数。
命令执行漏洞产生的原因和造成的危害
原因:
开发人员没有对特殊函数入口做过滤,导致用户可以提交恶意代码并提交服务端执行。
Web服务器没有过滤危险函数导致命令执行漏洞攻击成功。
危害:
1、承Web服务程序的权限去执行系统命令或读写文件。
2、反弹shell
3、控制整个网站甚至控制服务器。
进一步内网渗透
PHP中的危险操作
system:成功则返回命令输出的最后一行,失败则返回FALSE。
exec:命令执行结果的最后一行内容。
shell_exec:命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NULL。
passthru:执行外部程序并且显示原始输出。
eval:将输入的字符串参数当做PHP程序代码来执行。
assert
preg_replace
call_user_func
安全级别:LOW等级
源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// 判断操作系统
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// 如果是Windows系统
$cmd = shell_exec( 'ping ' . $target );
}
else {
// 如果是*nix系统
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 反馈给用户相关信息
echo "<pre>{$cmd}</pre>";
}
?>
代码直接使用的shell_exec执行用户的指令,属于高危漏洞
利用漏洞搞些事情
首先我们先要知道这些东西,命令行的执行方式
Windows支持:
command1 && command2 #command1执行成功了才会执行command2
command1 & command2 #不管command1是否执行成功,command2都会执行
command1 | command2 #直接执行command2
command1 || command2 #command1执行失败了,才会执行command2
Linux支持:
command1 ; command2 #command1执行完执行command2
command1 && command2 #command1执行成功了才会执行command2
command1 & command2 #不管command1是否执行成功,command2都会执行
command1 | command2 #将command1的输出结果作为command2的输入的内容(管道符)
command1 || command2 #command1执行失败了,才会执行command2
我是在Windows上搭的DVWA, 所以可以这样玩
基本就是获取了权限,你也可以工作net use 去创建一个用户名
安全等级:Medium High Impossibel
这三个安全登记我想在这里一块讲
首先Medium和High差别不大,主要还是增加一些过滤语句,过滤掉我们的特殊字符。只是做黑名单的话还是不够安全,如果有忘了过滤的就有可能有存在的漏洞。
在Impossibel的等级里他用过“.”拆分,先判断每段时候位数字,再判断是否为四段,全部成立再ping,如果结果为true的话,就会将这四组数通过 . 连接起来,执行ping命令。这样就杜绝了所有命令注入。