阅读 234
带你上分,顺便拿下CTF|BugKu 审计分析

带你上分,顺便拿下CTF|BugKu 审计分析

BugKu 分析题型


这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战


1.flag被盗

flag被盗,赶紧溯源!

一个shell.php 里面包含一个flag的text

或者http筛选,右键,追踪流,http流

得到flag:flag{This_is_a_f10g}

2.中国菜刀caidao

参考: ctf.yuanlichenai.cn/2018/03/19/… 下载得到一个压缩包,解压出来是流量包 用wireshark打开,因为是菜刀,猜测是http

追踪http流

将中间的base解码 QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEY9IkM6XFx3d3dyb290XFxmbGFnLnRhci5neiI7JGZwPUBmb3BlbigkRiwncicpO2lmKEBmZ2V0YygkZnApKXtAZmNsb3NlKCRmcCk7QHJlYWRmaWxlKCRGKTt9ZWxzZXtlY2hvKCdFUlJPUjovLyBDYW4gTm90IFJlYWQnKTt9O2VjaG8oIlhAWSIpO2RpZSgpOw base64.supfree.net/ 解码得到

@ini_set("display_errors","0");@set_time_limit(0);if(PHP_VERSION<'5.3.0'){@set_magic_quotes_runtime(0);};
echo("X@Y");$F="C:\\wwwroot\\flag.tar.gz";$fp=@fopen($F,'r');
if(@fgetc($fp)){@fclose($fp);@readfile($F);}else{echo('ERROR:// Can Not Read');};echo("X@Y");die();
复制代码

从代码里可以看出传输文件flag.tar.gz,前后还有字符“X@Y”,正是刚才追踪到的传输的数据。 方法1:追踪http流 最后一个http包,显示分组字节,

解码为 压缩,显示为ASCII,开始于3,得到flag

方法2, 将流量包用binwalk分离

方法2:

key{8769fe393f2b998fa6a11afe2bfcd65e}

3.这么多数据包

参考 ctf.yuanlichenai.cn/2018/03/19/… 这么多数据包找找吧,先找到getshell的流 下载文件后解压,用wireshark打开CTF.pcapng,发现有很多包,快速浏览后发现 前面都是攻击机(192.168.116.138)在向目标机(192.168.116.159)进行端口扫描, 再往后看到5542已经getshell,追踪TCP数据流,发现txt文件

对:Q0NURntkb195b3VfbGlrZV9zbmlmZmVyfQ== Base64解码 base64.supfree.net/ 得到:CCTF{do_you_like_sniffer}

4.手机热点

题干:httppan.baidu.coms1cwwdVC 有一天皓宝宝没了流量只好手机来共享, 顺便又从手机发了点小秘密到电脑,你能找到它吗?

(1)用wireshark 打开以后很多蓝牙的数据包 (2)怎么看蓝牙的数据包?既然有文件传送,使用binwalk查看一下

有一个flag.gif文件 得到flag SYC{this_is_bluetooth}

5.抓到一只苍蝇

参考 www.atomsec.org/ctf/idf-ctf… (1)wireshark打开抓取的包,首先分析过滤出HTTP的包,在HTTP的第一个POST包中看到如下信息

得知是传送的一个fly.rar的文件,文件大小为525701bytes,以及md5和sha验证 (2)然后查看到其中一个POST包中的信息 筛选更多post请求,逐个分析 http.request.method=="POST"

对这几个包分析发现这是一封带fly.rar附件的邮件发送。

发信人是81101652@qq.com,收件人是king@woldy.net,fly.rar大小为525701bytes

(3)其中倒数第二个包的内容是:

跟题目描述相匹配,证明POST提交的rar文件就是我们需要还原的文件 (4)进一步分析发现附件rar是从192.168.1.101发送到59.37.116.102的包

分五次发送,每次发送的大小为:

4次131436bytes + 1次1777bytes = 527521bytes (5)使用wireshark将每个包提取出来,提取方式是选中每个包的media type数据块 右键 –> 导出分组字节流 –> 分别保存为1,2,3,4,5

(6)五个数据包合起来的大小比fly.rar要大, 主要是每次数据传输会带上一些标志位等信息,需要将这些信息踢出来。 每个包多加的大小为:(527521bytes – 525701bytes) / 5 = 364 bytes 使用Kali中的dd工具将包处理这5个数据包,分别将其前364个字节去除: dd if=1.bin bs=1 skip=364 of=1out

将这5个文件合并 cat *out > fly.rar 对文件进行md5和sha验证 得到跟抓包信息相同的结果,可以证明还原的数据包fly.rar是正确的

(7)然后打卡fly.rar文件,但是打不开,需要输入密码,可能是伪加密 使用zipCenOp.jar去伪加密,失败。

查阅资料发现需要修改标志位,将fly.rar文件放入HxD中,可以看到flag.txt文件,重点修改标志位0x84为0x80

(8)修改完成后的文件保存,然后解压就可以得到flag.txt文件 解压失败 flag{m1Sc_oxO2_Fly}

6.日志审计

sqlmap盲注日志审计。 题目描述 请从流量当中分析出flag。 考点 本题考查根据日志,还原sqlmap采用二分法注入获得的数据。 解题过程 题目是sqlmap采用二分法进行注入的日志,办法很多,可以手撕,可以根据特征进行分析。 这里举例说一种。如果对Apache日志熟悉的话,应该知道,access.log里面会记录Response的状态码和Response包的长度。 猜解正确或错误,返回的长度是不同的。 urldecode解码几条记录:

以猜解的第24位为例,猜解正确的时候,返回的状态码为200,长度为1765;猜解错误的状态码为404,长度为5476。 而且可以得出结论,sqlmap采用二分法进行注入的时候,正确的值为最后一次进行>比较正确的值+1,即为125。 简单写个脚本,匹配一下即可。

# coding:utf-8
import re
import urllib
 
f = open('access.log','r')
lines = f.readlines()
datas = []for line in lines:
    t = urllib.unquote(line)    
    if '1765' in t and 'flag' in t:  # 过滤出与flag相关,正确的猜解
        datas.append(t)
 
flag_ascii = {}  
for data in datas:
    matchObj = re.search( r'LIMIT 0,1\),(.*?),1\)\)>(.*?) AND', data)   
    if matchObj:
        key = int(matchObj.group(1))
        value = int(matchObj.group(2))+1
        flag_ascii[key] = value     # 使用字典,保存最后一次猜解正确的ascii码
        
flag = ''
for value in flag_ascii.values():
    flag += chr(value)
    
print flag
复制代码

未解出 url转码,根据状态码404和200可分析出,字符是状态码为200的加1,这是状态码为200的

flag LIMIT 0,1),1,1))>101 AND      
 
flag LIMIT 0,1),2,1))>107 AND      
 
flag LIMIT 0,1),3,1))>96 AND      
 
flag LIMIT 0,1),4,1))>102 AND      
 
flag LIMIT 0,1),5,1))>122 AND      
 
flag LIMIT 0,1),6,1))>114 AND      
 
flag LIMIT 0,1),7,1))>112 AND     
 
flag LIMIT 0,1),8,1))>107 AND      
 
flag LIMIT 0,1),9,1))>108 AND      
 
flag LIMIT 0,1),10,1))>51 AND      
 
flag LIMIT 0,1),11,1))>111 AND      
 
flag LIMIT 0,1),12,1))>94 AND      
 
flag LIMIT 0,1),13,1))>48 AND      
 
flag LIMIT 0,1),14,1))>52 AND      
 
flag LIMIT 0,1),15,1))>94 AND      
 
flag LIMIT 0,1),16,1))>111 AND      
 
flag LIMIT 0,1),17,1))>47 AND   
 
flag LIMIT 0,1),18,1))>118 AND      
 
flag LIMIT 0,1),19,1))>100 AND      
 
flag LIMIT 0,1),20,1))>113 AND      
 
flag LIMIT 0,1),21,1))>101 AND      
 
flag LIMIT 0,1),22,1))>116 AND      
 
flag LIMIT 0,1),23,1))>107 AND
复制代码
flag LIMIT 0,1),24,1))>124 AND
复制代码

字符串ASCII为:102 108 97 103 123 115 113 108 109 52 112 95 49 53 95 112 48 119 101 114 102 117 108 125

ascii转码:

flag = [102,108,97,103,123,115,113,108,109,52,112,95,49,53,95,112,48,119,101,114,102,117,108,125]
flagchar = ""
for s in flag:
    flagchar += chr(s)
print(flagchar)
 
flag{sqlm4p_15_p0werful}
复制代码

7.weblogic

黑客攻击了Weblogic应用,请分析攻击过程,找出Weblogic的主机名。flag格式:flag{} Tip:主机名为十六进制。 来源:第七届山东省大学生网络安全技能大赛

按照题目要求需要寻找主机名,以十六进制的形式提交

hostname命令是查看主机名的命令,从流量来看,是一个暴力破解getshell的过程

直接在过滤器中查找hostname http contains "hostname"

追踪http流

搜索hostname

得到flag flag{6ad4c5a09043}

8.信息提取

参考 www.bubuko.com/infodetail-… 依然使用wireshark打开,只有http和tcp的包,我们只关心http包 筛选过滤http,只显示http内容 结合题目的提示“sqlmap用过吗”,可以看出这是一个布尔盲注的过程,从sql注入检测,猜解数据库,表名... 逐渐向下查看,一位一位的猜取flag,然后用二分法判断其ascii码的范围并最终确定这一位的值。 第806个包是读取flag第一位的数据包。

为了更明了的查看语句,可以导出对象查看 记住E64

message.php?id=1%20AND%20ORD%28MID%28%28SELECT%20IFNULL%28CAST%28%60value%60%20AS%20CHAR%29%2C0x20%29%20FROM%20isg.flags%20ORDER%20BY%20%60value%60%20LIMIT%200%2C1%29%2C1%2C1%29%29%3E64

进行URL解码 tool.chinaz.com/tools/urlen… message.php?id=1 AND ORD(MID((SELECT IFNULL(CAST(value AS CHAR),0x20) FROM isg.flags ORDER BY value LIMIT 0,1),1,1))>64 message.php?id=1%20AND%20ORD%28MID%28%28SELECT%20IFNULL%28CAST%28%60value%60%20AS%20CHAR%29%2C0x20%29%20FROM%20isg.flags%20ORDER%20BY%20%60value%60%20LIMIT%200%2C1%29%2C1%2C1%29%29%3E96 message.php?id=1 AND ORD(MID((SELECT IFNULL(CAST(value AS CHAR),0x20) FROM isg.flags ORDER BY value LIMIT 0,1),1,1))>96

我们可以以64这个ascii码为一个字符的分界线,我们不需要看返回值,只需要往下看到下一个64就能判断ascii码是什么,我们以第一个字符为例,可以看到第一个字符判断的时候,先判断其是否大于64,后面又判断了是否大于96,说明这个字符肯定大于64,所以此时作比较的ascii码增加64的二分之一,即96,接着向下看,作比较的ascii码变成了80,说明这个字符小于96,所以大于64又小于96,继续向下分32的二分之一,即80,在接着向下看,作比较的ascii码变为了72,说明这个字符依然小于80,继续向下分16的二分之一,即72,继续向下看,作比较的ascii码变为了76,说明这个ascii码大于72,所以向上分8的二分之一,即76,继续向下看,作比较的ascii码变为了74,说明这个ascii码小于76,所以向下分4的二分之一,即74,继续向下看,作比较的ascii码变成了73,且下一个包变为了64,说明已经判断结束,因此大于72又不大于73,这个ascii码为73,对应的字符为I。这就是二分法。

依次做转化 www.qqxiuzi.cn/bianma/asci… 73-I 83-S 71-G 123-{ 65/66-A/B 75/76-K/L 105-i 109/110-m/n 99/100-c/d 95/96-/' 83/84-S/T 81/82-Q/R 107/108-k/l 95/96-/' 73/74-I/J 109/110-m/n 73/74-I/J 69/70-E/F 99/100-c/d 83/84-S/T 105/106-i/j 47/48-//0 77/78-M/N 95/96-_/' 67/68-C/D 101/102-e/f 83/84-S/T 69/70-E/F 99/100-c/d 83/84-S/T 69/70-E/F 99/100-c/d 125/126-}/~ 1/2 ISG{BLind_SQl_InJEcTi0N_DeTEcTEd}

或者直接使用脚本分析pcap文件 参考链接 blog.csdn.net/gwenchill/a…

#coding=utf-8
import zlib
import re
f=open('sqlmap.pcap','rb')
c=f.read()
f.close()
mlist=re.finditer(r"Content-Length: (\d+)",c)
lastpos,nowpos=1,1
lastchar,nowchar=64,64
lastline=''
flags=''
for mx in mlist:
    if(int(mx.group(1))<100):#长度小于100,应该不是需要的字符串
        continue
    mc=c[mx.span()[1]+48:mx.span()[1]+48+int(mx.group(1))]#按照content-length长度来读取相应字符数
    content=zlib.decompress(mc,16+zlib.MAX_WBITS)#gzip解压
    #print content
    m=re.search('0,1\),(\d+).*>(\d+):',content) #匹配判断的字符和字符位置
    if(m is None):
        continue
    nowchar=int(m.group(2)) #当前判断的字符ACII值
    nowpos=int(m.group(1)) #位置
    if(nowpos!=lastpos): #跳到下个字符位置,说明该位置判断已结束
        d=">\d+:\s(\S+)"#匹配后面的The quick....
        m1=re.search(d,lastline)#保存的上一行中寻找
        if m1 is not None:
            flags+=chr(lastchar+1) #匹配到后面的Fox
        else:
            flags+=chr(lastchar) #未匹配到Fox
    lastpos=nowpos
    lastchar=nowchar
    lastline=content   
print ('Flag is '+flags) 
 
 
#Flag is ISG{BLind_SQl_InJEcTi0N_DeTEcTEd}
 
复制代码

9.特殊后门

题干: 从通信方式的角度看,后门可分为http/https型、irc型、dns型、icmp型等等。 安全人员抓到一份可疑的流量包,请从中分析出利用某种特殊协议传输的数据。 考点:写到数据包的ICMP数据

逐个查看特殊协议,意外发现ICMP包的:第一个ICMP包的内容

挨个查看icmp包 最后得到: flag{Icmp_backdoor_can_transfer-some_infomation}

参考链接

文章分类
前端
文章标签