本文介绍的盲注分为基于布尔的盲注、基于时间的盲注
下面简要介绍手工盲注的步骤(可与之前的手工注入作比较):
1.判断是否存在注入,注入是字符型还是数字型
2.猜解当前数据库名
3.猜解数据库中的表名
4.猜解表中的字段名
5.猜解数据
因为sql盲注不需要union查询注入,所以不需要知道字段数目,字段顺序。
布尔盲注:
1.布尔盲注利用前提
页面没有显示位,没有输出SQL语句执行错误信息,只能通过页面返回正常不正常来判断是否存在注入。
2.布尔盲注利用
该语句判断数据库个数,当数据库个数大于n页面显示正常
3.(select count(schema_name) from information_schema.schemata)> n
该语句判断数据库内第一个数据库名有多少字符,字符个数大于n页面显示正常
4.(select length(schema_name) from information_schema.schemata limit 0,1)> n
该语句判断第一个库第一个字符是什么,ascii值大于n页面显示正常
5.(select ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1)))>n
6.相关函数介绍:
https://www.cnblogs.com/Ghost-m/p/12272576.html
7.利用二分法进行手工盲注。手工盲注可以使用BurpSuite,构造payload在Repeater点击Go进行发包,这样会比较便捷。
例子如下(环境:DVWA SQL injection blind):
https://www.freebuf.com/articles/web/120985.html
基于时间型SQL盲注:
注入SQL 代码之后, 存在以下两种情况:
如果注入的SQL代码不影响后台[ 数据库] 的正常功能执行, 那么Web 应用的页面显示正确( 原始页面) 。
如果注入的SQL 代码影响后台数据库的正常功能( 产生了SQL 注入) , 但是此时Web 应用的页面依旧显示正常( 原因是Web 应用程序采取了“ 重定向" 或“ 屏蔽 ”措施)。
产生一个疑问: 注入的SQL 代码到底被后台数据库执行了没有? 即web 应用程序是否存在SQL 注入?
面对这种情况, 之前讲的基于布尔的SQL 盲注很难发挥作用了( 因为基于布尔的SQL 盲注的前提是web 程序返回的页面存在true 和false 两种不同的页面) 。这时, 一般采用基于web 应用响应时间上的差异来判断是否存在SQL 注入, 即基于时间型SQL 盲注。
在MySQL中, sleep() 函数语法如下:
sleep(seconds) ,即sleep() 函数代码执行延迟若干秒。 Sleep() 函数执行是有条件的,必须保障sql语句执行结果存在数据记录才会停止指定的秒数,如果sql 语句查询结果为空,那么sleep() 函数不会停止。
所以,待会会利用sleep函数来进行注入判断,结合if函数,如果时间延迟则正确。
在MySQL中, if () 函数语法如下:
IF(expr1 ,expr2 ,expr3) 如果expr1 为真, 则IF() 函数执行expr2 语句; 否则IF() 函数执行expr3 语句。
输入:
select user from users where user_id=1 and1=if(ascii (substr(database(),11))>1,sleep(5),1); //这里如果条件ascii (substr(database(),11))>1成立, 则执行sleep(5) , 否则执行1
基于时间盲注的一般思路是延迟注入,说白了就是利用sleep()或benchmark()等函数让mysql执行时间变长并结合判断条件语句if(expr1,expr2,expr3),然后通过页面的响应时间长短来判断语句返回的值是TRUE还是False,从而猜解一些未知的字段。
例子如下(环境:DVWA SQL injection blind):
https://www.freebuf.com/articles/web/120985.html
本文介绍了SQL盲注的两种主要类型:基于布尔的盲注和基于时间的盲注,并详细解释了如何手工实施这两种盲注攻击,包括判断数据库的存在、获取数据库名称及内容等关键步骤。
2677

被折叠的 条评论
为什么被折叠?



