SQL Injection——黑盒测试

Low级别:

1.可以看到有一个输入框,提示输入用户id,我们输入1后点击Submit提交数据
回显了一个用户的信息
在这里插入图片描述
2.接着我们在1后面加上一个单引号'测试
Payload:1'
页面报错了,分析报错信息
''1'''最外层的单引号是报错语句提示用,原报错语句为'1'',其中我们输入的部分是1'此时可以看出,我们可控参数位置是在一对单引号之间的
此时语句可能为:SELECT name FROM table id='1''
在这里插入图片描述
3.接着我们进一步测试,构造一个恒真,恒假的语句来判断我们的输入是否影响到了数据库
根据上面猜测的SQL语句,我们的输入位置是被单引号包围的因此我们需要闭合左右两边的单引号
恒真Payload:1' and '1
可以看到页面并没有报错,此时SQL语句可能为SELECT name FROM table WHERE id='1' and '1'语句正确所以并没有报错
在这里插入图片描述
接着我们在测试恒假的情况
恒假Payload:1' and '0
可以看到页面无返回了,此时SQL语句可能为SELECT name FROM table WHERE id='1' and '0'
在这里插入图片描述
语句正确所以没有报错,但是没有满足条件的数据所以就返回空
此时可以确定存在SQL注入漏洞,而且是单引号字符型
4.接着根据SQL注入的流程就到了判断列数的时候了,因为要改变原语句的逻辑,且当前注入点是一个字符型的,所以我们还需要在末尾加上注释符
因为当前输入点是一个输入框所以可以直接使用#接着使用 order by n判断列数
n为任意数字,如果当前表的列数大于n则正常回显,如果小于n则会报错,使用二分法
Payload:1' order by 4#
页面报错了说明当前表的列数小于4
在这里插入图片描述
此时SQL语句可能为SELECT name FROM table WHERE id='1' order by 4 #
接着我们继续使用3来测试,也有错误
在这里插入图片描述
在使用2来测试,可以看到页面回显正常,此时可以确定当前的数据库表有两个字段
在这里插入图片描述
5.接着我们union来爆出数据回显点因为存在两个字段,所以我们构造
Payload:1' union select 1,2#
可以看到数据回显点已经出来了,此时就可以使用MySQL的内置函数,和内置初始库来查询数据库的信息了
在回显点位置替换指定的函数或语句即可
在这里插入图片描述
6.接着为了显示方便观看,将原来正确的数据修改为错误的,只显示我们的union查询的数据,将1改为-1
并且查一下当前数据库,和版本
Payload:-1' union select database(),version()#
可以看到数据已经在会显点显示了
在这里插入图片描述
7.接着我们在查一下dvwa库下的表名
Payload:-1' union select (SELECT table_name FROM information_schema.tables WHERE table_schema='dvwa'),2#
可以看到报错了,说明返回的数据存在多行,此时我们需要使用group_concat(字段名)函数将所有数据组合成一条信息返回
也可以使用limit n,m来一条一条查询信息
在这里插入图片描述
8.这里我们使用group_concat()来组合多条信息为一条返回
Payload:-1' union select (SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='dvwa'),2#
可以看到成功返回了当前数据库下所有的表名
在这里插入图片描述


Medium级别:

1.来到Medium级别可以看到没有输入框,但是可以提交数据
在这里插入图片描述
2.可以提交数据意味着需要发送HTTP请求并且有数据回显,意味着HTTP请求当中一定存在参数,所以关门放Bp
开启浏览器代理,开启Bp,重新提交一次数据,可以看到Bp当中抓到了这个提交数据的请求包,是POST请求并且
下面有参数,此时我们鼠标右键,将其发送到Repeater模块
在这里插入图片描述
3.在Repeater模块,我们可以对一个数据包进行多次重新提交数据包的操作,以方便我们测试
我们将参数改为id参数改为2,接着点击Send发送数据包,在响应模块中点击Render选项卡
可以看到响应的实际情况,可以看到页面正常回显了2好id的信息
在这里插入图片描述
4.接着我们在2后面加一个单引号,发现页面报错,报错信息为'\''我们的单引号被转义了
既然引号被转义,我们直接使用数字型的方法测试
在这里插入图片描述
5.接下来我们直接构造数字型的payload
恒真2 and 3>1可以看到页面正常的返回了信息
在这里插入图片描述
恒假3 and 2=1页面无返回信息,此时可以确定我们输入的数据影响到了系统原有的SQL语句,存在数字型的注入漏洞
在这里插入图片描述
6.根据回显注入的流程,此时就应该判断列数了构造payload:1 order by 3
这里末尾没有使用#是因为,数字型不需要考虑引号闭合的问题
报错了,说明该表没有3列
在这里插入图片描述
7.接着换成2,页面正常返回说明,存在两个字段
在这里插入图片描述
8.接着在查看数据的回显点,为了方便观察,我们将第一个查询的数据显示为空,构造一个不存在的数据
payload:-99 union select 1,2#
此时sql语句可能为,select column from table where id=-99 union select 1,2#
可以看到爆出了数据的回显点,此时就可以在数据回显点上查询数据了
在这里插入图片描述


High级别:

1.点击链接跳出输入框,输入1提交后数据正常回显
在这里插入图片描述
我们直接输入 1 and 0页面没有反应,说明不是数字型注入
在这里插入图片描述
2.输入1'可以看到页面报错了
此时我们猜测我们输入的单引号影响到了原先的SQL语句,但是页面并没有给出有用的报错信息
因此我们需要继续测试
在这里插入图片描述
3.接着我们使用基于单引号的payload测试
恒真Payload:1' and '1可以看到页面回显正常,此时可以确定页面存在基于单引号的字符型注入漏洞
在这里插入图片描述
4.此时我们直接使用order by来判断列数
Payload:1' order by 2#因为这里的注入点是字符型的,所以需要考虑右边引号的闭合问题,因此需要用#注释
可以看到页面返回正常,说明存在两列
在这里插入图片描述
接着在改成 1' order by 3#可以看到又报错了,可以确定存在2列
在这里插入图片描述
5.此时我们就可以使用union查数据了
Payload:-1' union select version(),2#可以看到已经回显了数据库的版本了
在这里插入图片描述
因为MySQL版本大于5.0因此我们可以使用内置库查询的方法查出所有数据,这里我就不再演示

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newC0mer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值