passgo 发表于 2023-3-12 20:17:29

取证-日志分析Ⅱ

本帖最后由 passgo 于 2023-3-12 20:19 编辑

日志分析ⅡQSNCTF-2023-T-QZ-20230311002
1.分析1.1.查找关键部分打开文件,按照一般逻辑,搜索重要字符串“qsnctf”,得到结构如下:https://bbs.qsnctf.com/forum.php?mod=image&aid=143&size=300x300&key=fcd59e7e374f1fdc&nocache=yes&type=fixnone
找到关键部分,怀疑其中时sql盲注,其中的部分均已被URL编码将其解码:https://bbs.qsnctf.com/forum.php?mod=image&aid=144&size=300x300&key=6eff6b5e2adf9c37&nocache=yes&type=fixnone
得到其中时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】,对其中的三个数字按照判断条件进行操作即可,脚本如下:
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 = 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的

页: [1]
查看完整版本: 取证-日志分析Ⅱ