【P4】Windows 下搭建 DVWA 及命令注入漏洞详解

news2024/10/7 20:25:13

文章目录

    • 一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022前端趋势报告(下)

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 一、前言 本文内容来自于《St…

springBoot学习——spring+springMVC 集成mybatis 拦截器

目录 引出入门案例&#xff1a;登陆和注册 & 用户信息分页 之 固定的步骤&#xff1a;&#xff08;1&#xff09;建普通项目配置pom.xml文件&#xff08;2&#xff09;写主启动类 application.yml文件【bug】pom.xml文件导了mybatis的包&#xff0c;但是application.yml文…

Drag Your GAN论文解读,基于点的交互式操作拖动到生成图像[DragGAN]

只需要鼠标的点击就可以自动修图的产品&#xff0c;火爆问世&#xff0c;可以说是超越PS&#xff0c;神一般的存在了&#xff0c;而且没有门槛&#xff0c;对于普通大众来说直接可以上手使用&#xff0c;这个是PS完全不具备的。更关键的是&#xff0c;这款产品跟PS明显区别在于…

如何系统地自学 Python?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言为什么选择Python作…

【Intel 黑客松大赛】基于YOLO的杂草-农作物检测分类系统

目录 一、赛题简介&#xff1a;计算机视觉挑战——检测并清除杂草二、基于YOLO的杂草-农作物检测分类2.1、YOLO简介2.2、基于YOLO的杂草-农作物检测分类解决方案 三、基于YOLO的杂草-农作物检测分类系统设计3.1、基于flask框架的demo应用程序后端3.2、基于Vue框架的demo应用程序…

Qt6.2教程——4.QT常用控件QPushButton

一&#xff0c;QPushButton简介 QPushButton是Qt框架中的一种基本控件&#xff0c;它是用户界面中最常见和最常用的控件之一。QPushButton提供了一个可点击的按钮&#xff0c;用户可以通过点击按钮来触发特定的应用程序操作。比如&#xff0c;你可能会在一个对话框中看到"…

Unity编辑器扩展-第七集-应用键/显示提示词

第六集链接&#xff1a;Unity编辑器扩展-第六集-创建窗口/批量填图_菌菌巧乐兹的博客-CSDN博客 一、本节目标效果展示 1.我们有时候需要多次使用编辑窗口&#xff0c;但是每次一点执行&#xff0c;就关掉了&#xff0c;就很烦&#xff0c;所以我们希望&#xff0c;点击按钮&…

Spring Bean的实例化过程

一、前言 对于写Java的程序员来说&#xff0c;Spring已经成为了目前最流行的第三方开源框架之一&#xff0c;在我们充分享受Spring IOC容器带来的红利的同时&#xff0c;我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的&#xff0c;本期我们就一起来讨论一…

2023年6月GESP能力等级认证Python一级真题

2023-06 GESP等级考Python一级真题 题数&#xff1a;27 分数&#xff1a;100 测试时长&#xff1a;90min 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 1. 以下不属于计算机输出设备的有&#xff08; A&#xff09;。&#xff08;2分&#xff09; A…

几个Arcpy代码应用案例

1 案例一 删除特定记录 使用 arcpy 从 ArcGIS 中的图层中删除特定记录。可以使用更新游标&#xff08;UpdateSursor&#xff09;和 SQL 查询来识别和删除所需的记录。以下是如何删除特定图层记录的示例 import arcpy selectedParcelsselectedParcels expres…

分子碰撞频率和自由程------从一个物理小问题解剖自己的数学思维

物理学12-8节中&#xff0c;关于分子平均碰撞的解说如下&#xff1a; &#xff08;一&#xff09;分子碰撞自由程公式 第一个公式中&#xff0c;lamda v / z中&#xff0c;v的单位是m/s, z的单位是A/s, 其中A是常数。那么lamda描述的结果是m/A, 这正是长度单位。 此公式lamda…

利用正弦定理证明两角和差公式

首先用正弦定理&#xff0c;证明sin(AB)sinAcosBcosAsinB。 另外&#xff0c;其它的两角和差公式&#xff0c;都可以用三角函数奇偶性、诱导公式等推导出来&#xff0c;无需再用正弦定理证明一遍。

耗时一个月!手撸博客系统,主打美观实用!

先附上博客链接RoCBlog 关于博客 关于博客 RoCBlog 完成耗时&#xff1a;20天 起初是想搭建自己的博客&#xff0c;看了网上许多开源框架&#xff0c;感觉没啥意思&#xff0c;于是决定自己写一套 纯手撸VueSpringboot 其实是个我一边学vue一边写出来的东西&#xff0c;前期…

团体程序设计天梯赛-练习集L1篇⑩

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

(贪心) 1221. 分割平衡字符串 ——【Leetcode每日一题】

❓ 1221. 分割平衡字符串 难度&#xff1a;简单 平衡字符串 中&#xff0c;L 和 R 字符的数量是相同的。 给你一个平衡字符串 s&#xff0c;请你将它分割成尽可能多的子字符串&#xff0c;并满足&#xff1a; 每个子字符串都是平衡字符串。 返回可以通过分割得到的平衡字符…

【JAVA反序列化】序列化与反序列化Java反射URLDNS链

文章目录 原生序列化与反序列化概述为什么需要序列化和反序列化&#xff1f;应用场景(涉及到将对象转换成二进制&#xff0c;序列化保证了能够成功读取到保存的对象)涉及的协议好处为什么会产生反序列化漏洞&#xff1f;可能反序列化的形式&#xff1f;代码演示 Java反射基础补…

Java try-catch块

Java的try块用于封装可能会抛出异常的代码。它必须在方法内部使用。 如果在try块中的特定语句处发生异常&#xff0c;后续的代码块将不会执行。因此&#xff0c;建议不要在try块中放置不会抛出异常的代码。 Java的try块必须后跟catch块或finally块。 Java try-catch语法 try…

JDBC ResultSet源码解读

通过Debug方式看下源码&#xff1a; 1.Debug程序&#xff0c;找到返回的 ResultSet 的引用 2. 查看ResultSet中的rowData 3. 查看 rows 我们可以看到rows是一个数组&#xff0c;里面存放了我们查询得到的数据&#xff08;我的表中一共7条数据&#xff09;。 4. 查看rows中的元…

【总结】网页状态码——200、302、304、400、404、405、500

200正常 500异常–服务器异常Java代码 细节&#xff1a;null和空&#xff0c;null调用方法会出现空指针异常 400异常----传参相关的异常 get方法长度限制 400异常&#xff0c;加了RequestParam(value “name”) 必须传值 400异常&#xff0c;后端类型是Integer&#xff0c…

c# 基于微信wechat_qrcode opencv插件,网络二维码图片批量识别(一)

一、基本概念 微信开源了其二维码的解码功能&#xff0c;并贡献给 OpenCV 社区。其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中。从 OpenCV 4.5.2 版本开始&#xff0c;就可以直接使用。 该项目 github 地址&#xff1a; https://github.com/opencv/opencv_contr…