文章目录
- 一、Windows 下搭建 DVWA
- 1.1、DVWA 靶场搭建
- 1.2、六步快速搭建 DVWA
- 1.2.1、下载并安装 PHPstudy:http://public.xp.cn/upgrades/PhpStudy2018.zip
- 1.2.2、将解压后的 DVWA 原代码放置 phpstudy 安装目录的 WWW文件夹
- 1.2.3、进入 DVWA/config 目录,将 config.inc.php.dist 最后的 .dist 删去
- 1.2.4、打开刚刚重命名的 config.inc.php 文件,修改 db_user 和 db_password root root
- 1.2.5、浏览器访问:http://127.0.0.1/DVWA/setup.php,点击最下方的 Create Database
- 1.2.6、创建数据库并登录
- 二、危害巨大的漏洞 – 命令注入
- 三、防御漏洞之防御 low
- 四、解决 DVWA 乱码问题
- 五、Command Injection 命令注入解决方法
- 六、命令注入漏洞之防御 Medium
- 七、命令注入漏洞之防御 high
- 八、命令注入漏洞之防御 impossible
包括 Windows 下六步搭建 DVWA、危害巨大的漏洞 – 命令注入、解决 DVWA 乱码问题、Command Injection 命令注入解决方法、防御漏洞之防御 low、命令注入漏洞之防御 Medium、命令注入漏洞之防御 high、命令注入漏洞之防御 impossible。
一、Windows 下搭建 DVWA
1.1、DVWA 靶场搭建
DVWA 是 OWASP 官方编写的 PHP 网站,包含了各种网站常见漏洞,可以学习攻击及修复方式
-
PHP 环境:Windows Apache Mysql Php
-
DVWA 源代码:https://github.com/digininja/DVWA/archive/master.zip
1.2、六步快速搭建 DVWA
1.2.1、下载并安装 PHPstudy:http://public.xp.cn/upgrades/PhpStudy2018.zip
(1)、下载链接:http://public.xp.cn/upgrades/PhpStudy2018.zip
直接点击下载链接跳转到网页直接即可下载;也可复制粘贴到网址中直接下载
百度网盘下载链接:https://pan.baidu.com/s/1vVVAbyUCT6XoK4NguMDrSA?pwd=jzib
提取码:jzib
建议使用网址下载链接,百度网盘下载慢
(2)、下载后解压,得到 PhpStudy2018.exe 可执行文件
(3)、双击 PhpStudy2018.exe,选个路径,点击 是,即可完成安装
1.2.2、将解压后的 DVWA 原代码放置 phpstudy 安装目录的 WWW文件夹
(1)、下载DVWA 源代码:https://github.com/digininja/DVWA/archive/master.zip
直接点击下载链接跳转到网页直接即可下载;也可复制粘贴到网址中直接下载
百度网盘下载链接:https://pan.baidu.com/s/1qV4RMbJRFuGHPXKqPFRU9A?pwd=g2bm
提取码:g2bm
建议使用网址下载链接,百度网盘下载慢
(2)、下载后将压缩包放在 phpstudy 安装目录的 WWW 文件夹下
- …\phpStudy\PHPTutorial\WWW
(3)、下载完成后解压
(4)、解压完成后,可以改个名字
1.2.3、进入 DVWA/config 目录,将 config.inc.php.dist 最后的 .dist 删去
- …\phpStudy\PHPTutorial\WWW\DVWA\config
1.2.4、打开刚刚重命名的 config.inc.php 文件,修改 db_user 和 db_password root root
(1)打开
(2)、修改 db_user 和 db_password root root 都为 root,然后保存
1.2.5、浏览器访问:http://127.0.0.1/DVWA/setup.php,点击最下方的 Create Database
127.0.0.1:本地的回环地址,访问自己
(1)、在 phpStudy 安装路径下双击启动 phpStudy.exe
(2)、本地浏览器访问 127.0.0.1
如图,显示 Hello World,代表配置成功
(3)、访问 DVWA,浏览器输入 http://127.0.0.1/DVWA/setup.php
1.2.6、创建数据库并登录
(1)、点击 Create / Reset Database,创建数据库
(2)、点击 Login
(3)、输入用户名 admin,密码 password,点击 Login 登录 dvwa
(4)、登录成功后的页面
二、危害巨大的漏洞 – 命令注入
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的 web 管理界面上,一般会给用户提供一个 ping 操作的 web 界面,用户从 web 界面输入目标 IP,提交后后台会对该IP地址进行一次 ping 测试并返回测试结果。而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交恶意命令,让后台进行执行,从而获得后台服务器权限
-
cmd1|cmd2:无论 cmd1 是否执行成功,cmd2 将被执行
-
cmd1;cmd2:无论 cmd1 是否执行成功,cmd2 将被执行
-
cmd1&cmd2:无论 cmd1 是否执行成功,cmd2将被执行
-
cmd1||cmd2:仅在 cmd1 执行失败时才执行 cmd2
-
cmd1&&cmd2:仅在 cmd1 执行成功后时才执行
注:cmd为command命令的意思
三、防御漏洞之防御 low
常用的 cmd 命令:
-
whoami:查看当前用户名
-
ipconfig:查看网卡信息
-
shutdown -s -t 0:关机
-
net user [username] [password] /add:增加一个用户名为 username 密码为 password 的新用户
-
type [file_name]:查看 filename 文件内容
(1)、点击 DVWA Security 安全配置,将安全等级调低 low,无任何防御,点击 Submit
2、点击 Command Injection 命令注入,Enter an IP address 中输入 127.0.0.1
3、点击 Submit 按钮
如图,乱码,网站是国外开发的,网站默认编码和windows操作系统不同,所以乱码,不用管,执行了就行
4、Enter an IP address 中输入 127.0.0.1&whoami,点击 Submit
如图:最下一行多了 desktop-v3q1n78\admin,admin 就是用户名。可以在本地使用 cmd 进行验证
5、 Enter an IP address 中输入 127.0.0.1&ipconfig,点击 Submit 提交
如图,显示的就是本地cmd 输入 ipconfig 后的结果
6、此网站可能存在缺陷,如何查看缺陷原因呢?
(1)、点击底部 View Source,查看源代码
(2)、如图,会打开一个新窗口,显示源代码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ]; // 将输入的 ip 赋值给变量 $target
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target ); // shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回;( 'ping ' . $target ):127.0.0.1&whoami
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
7、输入 127.0.0.1&shutdown
注:输入此命令后,电脑会自动关机
四、解决 DVWA 乱码问题
在 …\phpStudy\PHPTutorial\WWW\DVWA\dvwa\includes 目录下,有个dvwaPage.inc.php文件,打开文件在322行修改,将 UTF-8 改为 GBK 或者 GB2312 即可
1、使用文本双击打开
2、 如图,修改,并保存
3、修改成功后,不需要重启,直接使用
五、Command Injection 命令注入解决方法
防御命令执行的最高效的方法,就是过滤 命令连接符
-
cmd1|cmd2:无论 cmd1 是否执行成功,cmd2 将被执行
-
cmd1;cmd2:无论 cmd1 是否执行成功,cmd2 将被执行
-
cmd1&cmd2:无论 cmd1 是否执行成功,cmd2将被执行
-
cmd1||cmd2:仅在 cmd1 执行失败时才执行 cmd2
-
cmd1&&cmd2:仅在 cmd1 执行成功后时才执行
l、;、&、ll、&&:将这些符号替换成空,或判断用户输入这些符号就终止执行
六、命令注入漏洞之防御 Medium
1、点击 DVWA Security 安全配置,将安全等级调为适中 Medium,点击 Submit
2、点击 Command Injection 命令注入,拉取到底部,点击 View Source
3、打开新的网页,查看源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ]; // 将输入的 ip 赋值给变量 $target
// Set blacklist
$substitutions = array(
'&&' => '',
';' => '',
); // 如果用户输入内容包含有&&或;则将符号变为空
// Remove any of the characters in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target ); // str_replace字符串替换,如果有&&或;则将符号删除
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target ); // shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回;( 'ping ' . $target ):127.0.0.1&whoami
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
DVWA medium 防御中过滤了 && 和 ; 并不会影响其他符号正常使用
七、命令注入漏洞之防御 high
1、点击 DVWA Security 安全配置,将安全等级调为高 high,点击 Submit
2、点击 Command Injection 命令注入,Enter an IP address 中输入 127.0.0.1||ipconfig
- 127.0.0.1||ipconfig
如图,使用||,报错,说明||被处理了
3、拉取到底部,点击 View Source
4、打开新的网页,查看源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$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' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
else {
// Ops. Let the user name theres a mistake
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// Generate Anti-CSRF token
generateSessionToken();
?>
八、命令注入漏洞之防御 impossible
1、点击 DVWA Security 安全配置,将安全等级调为高 impossible,点击 Submit
2、点击 Command Injection 命令注入,拉取到底部,点击 View Source
3、打开新的网页,查看源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$target = $_REQUEST[ 'ip' ]; // 将输入的内容赋值给变量 $target
$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' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
else {
// Ops. Let the user name theres a mistake
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// Generate Anti-CSRF token
generateSessionToken();
?>
$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];
// 1、stripslashes:去除用户输入的\
// 2、explode:把用户输入的数据根据.分开,比如输入 127.0.0.1 会被分成四个部分,分别是 1270 0 1
// 3、分别判断分成的四个部分是不是数字,127是不是?0是不是?0是不是?1是不是?有不是数字的直接不允许访问;判断是否是4个
// 4、把验证完是数字的四个数字再用.拼接起来,变成正常的 IP 127.0.0.1