青少年CTF论坛»论坛 CTF 其他 查看内容

0 评论

0 收藏

分享

取证-日志分析Ⅱ

本帖最后由 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的


回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
passgo
新手上路
主题 0
回复 1
粉丝 0
快速回复 返回顶部 返回列表