本帖最后由 passgo 于 2023-3-12 20:19 编辑
日志分析ⅡQSNCTF-2023-T-QZ-20230311002
1. 分析1.1. 查找关键部分打开文件,按照一般逻辑,搜索重要字符串“qsnctf”,得到结构如下: 找到关键部分,怀疑其中时sql盲注,其中的部分均已被URL编码将其解码: 得到其中时access.log日志的形式,可见此处使用二分法对目标字符串进行解析,由此我们可以确定字符串的前半段为 qsnctf{218.26.159.30-2023/03/06- |
再看日志的结构,可见其中时标准的sql盲注二分法的场景对照ASCII字母表,可知在最后一位中若为404则不满足等式及为判断ASCII值本身,若为486则不成立则结果ASCII值需要加1 综上分析 所述 可知 此题可用脚本解决
2. Exp有上述逻辑可以有以下思路: 引入文件先解码URL,随后使用正则判断关键的三个数字【LIMIT 0,1),A,1))>B HTTP/1.1" 200 C】,对其中的三个数字按照判断条件进行操作即可,脚本如下: [AppleScript] 纯文本查看 复制代码 import re
import urllib.parse
f = open(r"C:\Users\34448\Downloads\log.log", 'r')
lines = f.readlines()
datas = []
for line in lines:
t = urllib.parse.unquote(line)
if 'flag' in t:
datas.append(t)
flag_ascii = {}
for data in datas:
matchObj = re.search(
r'LIMIT 0,1\),(\d+),1\)\)>(\d+) HTTP/1.1" 200 (\d+)', data)
if matchObj:
key = int(matchObj.group(1))
value = int(matchObj.group(2))
if int(matchObj.group(3)) == 486:
value = int(matchObj.group(2))+1
flag_ascii[key] = value
flag = ''
for value in flag_ascii.values():
flag += chr(value)
print(flag)
| qsnctf{6c19860-3789a492-8477eccd-5d550b6b2} |
最终flag为 qsnctf{218.26.159.30-2023/03/06-6c19860-3789a492-8477eccd-5d550b6b2} |
PS:出题人是懂flag的
|