DVWA-SQL盲注模块 包括代码审计

SQL注入分析与防护:从Low到Impossible等级的案例研究
本文详细介绍了不同安全等级的SQL注入问题,从Low等级的布尔盲注和时间盲注,到Medium等级的数值型注入,再到High等级的Post方式注入,以及Impossible等级下如何通过预处理和令牌验证避免注入攻击。同时,分析了源码中的安全漏洞,并给出了相应的POC示例和防御策略。

Low等级

查看正常的页面,如图1.1,发现返回的结果只有一句“User ID exists in the database.”,并不能回馈数据库中的信息,说明是盲注。

img

图1.1

查看一个异常ID所对应的页面,如图1.2所示。

img

图1.2

经过多次的猜测,发现是单引号引起的注入,如图1.3所示。

img

图1.3

根据图1.1和1.2的返回结果,我们可以注入一些布尔盲注和时间盲注来进行判断数据库是否存在对应的数据。如图1.4所示,可以看得到database()的长度是等于4的。这里用到的一个函数是length函数,是用来求长度的函数。

img

图1.4

猜database()数据库的名字,如图1.5所示,首先判断首字符的ascii的值是大于64的。这里用到的函数是substr函数,是用来切割字符串的,其中第一个参数是原字符串,第二个参数是从第几个开始切割,第三个参数则是指明要切割后的字符串的长度。

img

图1.5

猜首字符的ascii的值是小于122的,如图1.6所示。

img

图1.6

根据二分法,找到了首字符的ascii的值是100,即首字母是d,如图1.7所示。

img

图1.7

根据同样的方法,我们可以猜到了整个database()的名字,如图1.8-1.10,即数据库名字是dvwa。

img

图1.8

img

图1.9

img

图1.10

猜表,根据多次的猜测,发现第一个表的长度是9,如图1.11所示,并且发现第二个表长度是5,如图1.12所示

img

图1.11

img

图1.12

根据多次的重复猜测,发现第二个表的首个字母的ascii值是117也就是u,如图1.13所示.

img

图1.13

根据多次的猜测,发现其余的字母分别为sers,即database()的第二个表的名字是users。得到了表之后,我们需要猜列名,在猜列名的时候我们还需要知道它的字段数,如图1.14所示,字段为8

img

图1.14

知道了字段之后,我们需要一个个字段进行猜测,经过多次的猜测发现第一列的长度是7,如图1.15所示。

img

图1.15

知道了列名的长度之后,我们需要猜列的名字,如图1.16所示,首是u,根据相同的方法,可以猜得到整一个列名的名字是user_id

img

图1.16

知道了列名之后,我们就可以获取数据库的数据了,如图1.17所示,第一行的数据是1。

img

图1.17

查看phpmyadmin,可以猜出来的数据和正确的作比较,发现猜测确实是正确的,如图1.18所示。

img

图1.18

查看源码如图1.19所示,可以发现对用户的输入没有做任何处理就直接加入到sql语句中并进行执行。

img

图1.19

自己编写python脚本进行攻击,源码如图1.20-1.22所示,运行图如图1.23所示。

img

图1.20

img

图1.21

img

图1.22

img

图1.23

Medium等级

可以发现是下拉表单的形式并且是POST方式的,我们构造一个poc,可以发现提交正常,如图2.1。

img

图2.1

经过多次的单引号、双引号的测试,发现不是字符型而是数值型。如图2.1所示。

img

图2.1

猜database()的长度,如图2.2所示。发现执行成功,说明没有对用户此时的输入进行处理。下面的暴库、暴表、暴列以及暴数据的过程和Low一致,这里就不再演示了。

img

图2.2

根据Low等级暴数据的方式,进行Mediun等级暴数据,如图2.3所示,可以发现成功暴了数据。

img

图2.3

查看源码,如图2.4所示,可以发现和Low等级一致,就是有Get方式换成了Post方式提交。

img

图2.4

High等级

可以发现High等级在新的窗口中输入id,任何返回的结果是在原始的窗口中的,结果提交一次简单的数据可以发现,是Post方式的交的,根据BurpSuite抓包或者直接按F12查看页面的id标签,构造一个poc,如图3.1所示。

img

图3.1

结果判断数字型的方式进行猜测,发现确实是数字型的注入,如图3.2所示。

img

图3.2

下面的暴库、暴表、暴列的步骤和Medium等级完全一致,这里给出直接暴数据的步骤,如图3.3所示。

img

图3.3

查看源码如图3.4所示,可以发现没有对用户的输入进行任何处理,只是检验了cookie值。

img

图3.4

Impossible等级

查看源码如图4.1所示,可以发现使用PDO和预处理来对用户的输入进行处理,就我所学到的已经规避了sql注入了,这里还用了检验token值,防止csrf攻击。

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值