GDPC-CSACTF Round2 WP misc篇-日志审查风暴

之所以把这个题单拎出来写一个wp,是因为虽然这道题放到了misc分类,但我感觉web方面考察得也挺多的,做题的过程版也颇为曲折hhh,就把自己绕圈子的过程完整记录一下

首先来看看题面

image

一:发现存在SQL注入痕迹,但找不到分析方向

题目附件下载下来是一份py代码和log的日志文件文件,先大概看了下,python代码总体是一个加密程序,推测是对用户的密码进行加密存储,然后瞄到有flagvalue的痕迹,日志足足20多MB大,粗略翻了翻有SQL注入的痕迹,由于题目一开始是没有提示的,到这基本就卡住了,这时候还想了下要不本地搭个SQL运行下代码,就先去做别的题目了。

二:url解码发现踪迹,编写正则表达式提取

回头加了解释一看,好家伙原来要url解码,马上用python将日志文件逐行解码,然后直奔flag,再写好exp寻找,发现黑客多次查询user_flag表的值,因为了解过一点SQL,一眼就看出来这很明显是用SQLmap进行了布尔盲注去查询表值,那还不急匆匆将查询的值出来进行ASCII码转换?(这一步也比较关键,要用到正则去匹配字符值,正则在整道题目的exp编写中都起到了很大的作用)


image


三:理解布尔注入逻辑,编写程序推出flag

很可惜这道一千多分的大题不可能这么简单,直接解码出来的毫无疑问是乱码,后面经师兄提醒,猜测成功的200返回报文长度和失败是不一样的,分别是341和196,虽然我没用过SQL实战,但根据日志文件,布尔盲注的思路很好理解,通过不断地猜测要查询的字符串是否大于某个值,直到返回值错误,就进行下一个值的查询。

理解了原理,着手开始写exp(说得很轻松,但其实这道题的大半时间都花在了写和调exp身上www),通过这个逻辑分析日志反向推出黑客查的值,并通过limit的值去分割为相应的数据,将结果输出到文件中方便查看。

经过了:哎,怎么是乱码——>调一下——>哎,怎么是乱码——>调一下的;,循环后,我们得到了如下的user_flag值(还有一点点乱码,后来调好了但没截图)

image

四:理解SQL数据结构,针对性搜索

试了试,flagvalue的值拼起来并不是正确的flag,给我泼了一盆冷水,再看看note的文本和师兄的提示(昊门!),结合下自己学到的SQL数据库的常识,筛选后日志文件大小不到原文件的十分之一,推断应该筛过头了,SQL数据库中还存在其它表。


示例图

image

于是稍微修改了针对user_flag写的py代码,抓取了secrets表中的信息,在进一步处理数据读日志文件的时候发现,其实secrets和user_flag表的数据都不止一列,所以进一步优化抓取代码,在将表内所有数据查询都分析的同时,也清晰地将查询到的数据分类,因为前面的提示和附件里的python代码还有师兄的提示都暗示着最终的flag需要同一个user_name的flagvalue和passphrase进行解码得出,所以这一步挺重要的,具体实现方式杀了我很多脑细胞,但不在这里展开。


五:编写解码exp,开香槟

经过七八个钟头的努力后,终于来到了这一步,成功地分析出了secrets和user_flag表的数据,ID和username也对上了,已经可以半开香槟了,下面只需要编写解密文件就好,很抱歉密码学是我这个数学学渣最痛恨的方向,所以在师兄的建议下我用了AI助手去编写,但AI写出来的代码怪怪的,注释也都是英文的,又花了好长一段时间才修改好,让24条flag输出到同一个文件中。

image

image


好哒,得到了24条分flag,可以开香槟了,最后贴一下做这题的工程文件夹和做完后爽拿1500pt的图片作纪念。


image

image

posted @ 2024-11-03 21:37  饺子龙  阅读(52)  评论(0)    收藏  举报