**
Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)
**
知识点:1,时间延迟型手工注入;布尔型手工注入;使用concat聚合函数
2,payload原理及防御措施
3,sqlmap真香,脚本也好使
**
0x0a 时间延迟型手工注入
**
ps: 什么是时间盲注,时间盲注就是页面不会有回显,没有回显怎么办?这时候我们可以通过sleep(),让他沉睡
为什么通过sleep() 可以判断是否存在时间盲注,因为只要执行了,就说明网址存在交互,存在交互就存在漏洞
sql注入本质或者条件:
1,用户可以控制输入
2,拼接了用户输入的数据,并且去成功的执行了
即,如果语句正确就有延迟,加载慢,得等;不对,一下下就好了,可以通过浏览器的刷新提示观察延迟情况
核心语句:?id=1’ and if(报错型payload核心部分,sleep(5),1)–+
判断有无注入点
从源码里看到单引号包围查询语句
判断的时候闭合掉,然后sleep(x), x是几都可以,指在交互过程中,你下的睡眠命令执行时间,通过时间延迟判断盲注
等待5~7秒左右,没有回显,存在注入点
判断数据库长度
使用 if() 函数
if(exp1,exp2,exp3)
如果exp1语句正确,那么就会执行exp2,如果不正确,就会执行exp3
所以我们第一个exp可以写:length(database())=x
exp2: sleep(5)
exp3 : 1
这时候长度x可以用二分法(节约时间)
这时候再代入if这里面
二分法多试几次,最后判断为8
查库名
这里还是推荐二分法,不然一个个试太慢了
除了这个语句,还可以用substr和ascii
?id=1’ and if(ascii(substr(database(),1,1))>=50,sleep(5),1)–+
ps:这里比较的是字母的ascii值
查表名
这里说一下,可以选择一个个爆破,查出所有的,也可以定向爆破,我这里是定向爆破,即直接写出users表名,在limit里变,最后在limit3,1可以查询出,另一种就limit1,1),1)=’’,二分法试出1的表名,然后2,3,才能有users(所以定向爆破快(sqlmap更快。。。))
查列名
同上,不再啰嗦