SQL注入-布尔盲注
SQL注入-布尔盲注
Wells布尔盲注介绍
构造SQL语句,利用and,or等关键字来其后的语句 true
、 false
使web页面返回true或者false,从而达到注入的目的来获取信息
使用条件:适用于页面没有回显字段(不支持联合查询),且web页面返回True 或者 false类似的结果(例如:登录成功、)
注意事项:
前面参数在数据库无结果时,拼接语句使用关键词
or
前面参数在数据库有结果时,拼接语句使用关键词
and
另建议使用脚本
注入使用函数
1.substr()/substring()
函数
substr()/substring()
函数:用来截取数据库某个字段中的一部分。
1 | substr(string,start开始位置,length截取长度) #语法 |
参数
- string:必选,数据库中需要截取的字段
- start:必选。正数,从字符串指定位置开始截取;负数,从字符串结尾指定位置开始 截取;0,在字符串中第一个位置开始截取。
- length:可选,需要截取的长度。缺省。即截取到结束位置
2.ascii()
函数
ascii()
函数:返回字符串str的最左边的数值。
1 | ascii(str) #语法 |
3.length()
函数
length()
函数,返回字符串的长度
1 | length(str) #语法 |
4.left()
函数
left()
函数,返回从左至右截取固定长度的字符串
1 | left(str,n) #语法 截取字符串str的从左至右前n个字符 |
注入流程
- 求当前数据库长度
- 求当前数据库表的ASCII (即爆出数据库名)
- 求当前数据库中表的个数
- 求当前数据库中其中一个表名的长度
- 求当前数据库中其中一个表名的ASCII
- 求列名的数量
- 求列名的长度
- 求列名的ASCII
- 求字段的数量
- 求字段内容的长度
- 求字段内容对应的ASCII
手工注入过程详解
基本模板
1 | ?id=1' and (长度/字符函数(所爆数据的SQL) = n) --+ |
例如:
1 | ?id=1' and ASCII(SUBSTR((select table_name FROM information_schema.tables where table_schema = database() LIMIT 0,1),1,1)) = 101 # |
以爆数据库名字为例
求长度
1 | ?id=1' and (length(database()) = n) --+ |
通过页面的回显进行判断,数据库的长度是多少
求数据库名称
使用left
函数
1 | -- 从左至右截取一个字符 |
不断修改*
中的字符,使之页面显示为true
的类似项(如登录成功、成功等)
使用SUBSTR
函数
1 | -- 截取第1个字符 |
不断修改*
中的ASCII码,使之页面显示为true
的类似项(如登录成功、成功等)
注入脚本
注意查看表单的提交变量名称
使用POST提交数据
1 | import requests |
评论
匿名评论
✅ 你无需删除空行,直接评论以获取最佳展示效果