刘功瑞的博客

有一天你突然惊醒,发现这一切,都只不过是一场梦。

BUGKU CTF 分析 Writeup 2

这么多数据包

题目:

这么多数据包找找吧,先找到getshell的流

解题:

使用wireshark打开,发现没有http协议的请求,使用命令搜索可能包含flag的tcp流,一般搜索关键词 command ,ls,dir,flag等等。

tcp contains "dir"

筛选出几个tcp流,追踪最后一个,发现有个base64字符串,解密后得到flag

1.pngCCTF{do_you_like_sniffer}



手机热点

题目:

httppan.baidu.coms1cwwdVC 有一天皓宝宝没了流量只好手机来共享,顺便又从手机发了点小秘密到电脑,你能找到它吗?
题目来源:第七季极客大挑战

解题:

使用wireshark打开,发现很多请求,找不到有用的,尝试使用binwalk提取文件试试:

binwalk -e ./Blatand_1.pcapng

从提取文件中发现了flag。

1.png

SYC{this_is_bluetooth}


抓到一只苍蝇

题目:

抓到一只苍蝇

解题:

使用wireshark打开,根据题目提示搜索 tcp contains "fly" ,看到第一个是上传,跟踪http流

1.png2.png

可以看到上传文件大小525701,

接着往下看上传的文件内容,看到是分成5段上传的。

3.png把每段按顺序保存下来,命名为1,2,3,4,5

4.png

文件->导出对象->HTTP->save ,把五个application/octet-stream 挨个保存下来。

5个数据包media type 的大小是131436*4 和最后一个1777,131436*4+1777=527571-525701=1820/5=364需要每个文件去掉其364字节的文件头。

linux下使用命令处理下文件

dd if=1 bs=1 skip=364 of=11   //命令格式为 dd if=文件名  bs=1 skip=364 of=要保存的文件名

五个文件每个按这个命令执行一遍,生成5个新文件,再把五个新文件结合成一个文件。

cat 11 22 33 44 55 > flag.rar  //11 22 33 44 55 为新文件的文件名

然后双击打开发现报错,使用winhex打开看一下,发现是伪加密,把图中的84改为80:

5.png保存后,双击打开得到一个flag.txt,发现是个win32程序

6.png

改后缀名为exe,打开后发现出现很多苍蝇。。。这个程序挺好的,能缓解工作压力。

放到kali下 使用foremost flag.exe 提取文件,发现一个二维码,扫码后得到flag

flag{m1Sc_oxO2_Fly}


日志审计


题目:

请从流量当中分析出flag

来源:第七届山东省大学生网络安全技能大赛

解题:

题目是sqlmap采用二分法进行注入的日志,办法很多,可以根据特征进行分析。

这里举例说一种。如果对Apache日志熟悉的话,应该知道,access.log里面会记录Response的状态码和Response包的长度。猜解正确或错误,返回的长度是不同的。

urldecode解码几条记录:

id=2' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM dvwa.flag_is_here ORDER BY flag LIMIT 0,1),24,1))>96 AND 'RCKM'='RCKM&Submit=Submit HTTP/1.1" 200 1765 
id=2' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM dvwa.flag_is_here ORDER BY flag LIMIT 0,1),24,1))>112 AND 'RCKM'='RCKM&Submit=Submit HTTP/1.1" 200 1765 
id=2' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM dvwa.flag_is_here ORDER BY flag LIMIT 0,1),24,1))>120 AND 'RCKM'='RCKM&Submit=Submit HTTP/1.1" 200 1765 
id=2' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM dvwa.flag_is_here ORDER BY flag LIMIT 0,1),24,1))>124 AND 'RCKM'='RCKM&Submit=Submit HTTP/1.1" 200 1765 
id=2' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM dvwa.flag_is_here ORDER BY flag LIMIT 0,1),24,1))>126 AND 'RCKM'='RCKM&Submit=Submit HTTP/1.1" 404 5476 
id=2' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM dvwa.flag_is_here ORDER BY flag LIMIT 0,1),24,1))>125 AND 'RCKM'='RCKM&Submit=Submit HTTP/1.1" 404 5476


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

解题脚本:

# -*- coding:utf-8 -*-

import re
import urlparse

root_path = unicode('D:\\ctfWP\\bugku\\分析\\日志审计\\access.log', 'utf-8')
flag_ascii = {}
for line in open(root_path):
    r = re.findall('(.*)flag_is_here(.*)HTTP/1.1" 200(.*)', line)
    if len(r) > 0:
        data = urlparse.unquote(line)
        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

flag{sqlm4p_15_p0werful}

发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.liugongrui.com.All Rights Reserved.