- 0006 Banmabanma
- 0010 适合作为桌面
- 0011 心仪的公司
- 0119 pure_color
- 0151 2017_Dating_in_Singapore
- 0155 simple_transfer
- 0160 Training-Stegano-1
- 0168 can_has_stdio?
- 0169 Erik-Baleog-and-Olaf
- 0170 János-the-Ripper
题目:世安杯 解答:发现是个有条形码的斑马。 条形码网址
解答:png图片,010Editor没有发现什么信息,StegSolve翻页时发现二维码。 扫一下获取一段十六进制数字:
03F30D0A79CB05586300000000000000000100000040000000730D0000006400008400005A000064010053280200000063000000000300000016000000430000007378000000640100640200640300640400640500640600640700640300640800640900640A00640600640B00640A00640700640800640C00640C00640D00640E00640900640F006716007D00006410007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100715500577C010047486400005328110000004E6966000000696C00000069610000006967000000697B000000693300000069380000006935000000693700000069300000006932000000693400000069310000006965000000697D000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007304000000312E7079520300000001000000730A0000000001480106010D0114014E280100000052030000002800000000280000000028000000007304000000312E707974080000003C6D6F64756C653E010000007300000000
存储下来,用file看一下是什么文件。
是python2.7编译的二进制文件,修改后缀为.pyc,反编译一下。 可以安装一下:pip install uncompyle uncompyle6 1.pyc >1.py
代码里调用一下flag(),就能获取flag。python3的话,把print那里加上括号就行。
解答:流量包,直接strings一下就能获取flag。 或者查看流量。 用Conversations可以看到内网ip192.168.1.111在大量的访问外网,
192.168.1.1是路由。 那么看一下它和哪个内网ip在传递,发现ip192.168.1.108。
查看两个ip之间的信息传递: ip.addr == 192.168.1.108&&ip.addr==192.168.1.111&&http
一直在访问conf1g.php,关键内容应该是在最后一个包里。
跟踪http流,发现是个jpg图片信息,最后有flag。
有wp写的是http contains "shell"
,因为刚好jpg图片的名字是webshell.jpg。所以做题的时候,可以上来就直接contain一些关键字符,可能就一把出结果了。
解答:用Stegsolve翻页,到b0位置就有flag了。
0151 2017_Dating_in_Singapore题目:给了一个日历和一段数据 01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625 解答:数据一共12段,刚好对应12个月。 从月份里找出这几个数据。
得到flag:HITB{CTFFUN}
0155 simple_transfer题目:XCTF 3rd-HITB CTF-2017 文件里有flag,找到它。 解答:
- 做题
根据提示文件,直接foremost看一下,发现pdf文件,拿到了flag。
flag拿到了,但还是要分析一下这个流量包,做题是为了学习嘛,看看能不能从中学习一些新的知识点呢~
- 根据对流量的分析来做题
用wireshark打开,根据题目找一下和文件有关的协议,或者post请求之类的。 先协议分级查看一下:
发现出现大量的DLEP,不太合理,应该是数据包被错误解析了。 (我在win下的3.2.4版本下没有这个问题,直接就解析为NFS,mac下的3.7.0版本出现了错误解析)
刚才调整的时候忘记截图了,这里用APR做个演示,右击->protocol preferences->address resolution protocol->disable xxx。
调整后,再看协议分级就会看到都是NFS了。
NFS 是 NetworkFileSystem 的简写,即网络文件系统,网络文件系统是 FreeBSD 支持的文件系统中的一种,也被称为 NFS.NFS 允许一个系统在网络上与它人共享目录和文件。通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。 ——NFS协议(百度百科)
过滤NFS协议看一下。
直接看内容多的包,追踪一下tcp流。
发现了file.pdf。(这里其实可以搜一下常用的几个文件后缀)然后就是foremost分离~
上面是从做题角度的分析,接下来单纯看这个流量,看一下这个流量包都干了什么。
(整个研究过程非常的曲折,内容也不一定准确,充斥着个人推测,就当作记录一下学习过程了,太菜了)
- 详细分析一下流量包
首先是ARP地址解析。
然后就开始不停尝试建立tcp连接,连接重置reset占了这个流量包的大壁江山。可以看到,每一个SYN都返回了RST。
下面这个截图更清晰,一条SYN对应一个RST。这是因为远端服务器开防火墙,被防火墙阻隔了。
然后到4000多的时候,连上了,应该是把防火墙关了或者重新配置了策略。
可以看到111端口和2049端口的tcp连接建立了。(NFS程序常运行于2049端口,linux下端口111对应的是portmap服务)
portmap进程的主要功能是把RPC程序号转化为Internet的端口号
portmap大概是没成功。(proc-0
是什么意思没搞懂,查了好久没思路)
然后重新尝试tcp连接,总是出现RST,而且是由客户端发送的,那么问题是出现在了客户端10.0.2.5上,结合之前成功建立连接的返回时间,推测可能是因为主机5设置了建立连接的时间限制,用setsockopt的SO_RCVTIMEO选项设置的recv超时时间比较短,导致主机5认为接收超时,发送了RST。(具体是不是呢,我也不太确定,流量分析有点难搞呀)
尝试多次未果后,出题人开始ping了,能ping通。
然后发送udp报文,收到了目标主机端口不可达的icmp包。出题人应该是想看看是不是开启的是UDP服务,根据返回包可知并没有开启UDP服务。
客户端不断尝试发起新连接,因源端口号复用的原因,所以会产生一些 TCP Port number reused 、TCP Retransmission 以及 TCP Previous segment not caputred 的提示信息。 (wireshark会把重复使用的ip+port打上标记,port numbers reused是一个标记)
后面就突然可以建立连接了,我推测前面是因为网络延迟问题,后面的连接就比较顺利了。 (跳过中间奇奇妙妙的过程,直接来看本题的比较关键的内容NFS的部分吧,因为实在是没看懂,哈哈哈)
附上学习连接:NFS 协议 Mount 过程揭秘
客户端5向服务器4询问mount服务(100005)监听的端口,回复是55791端口。 (没有找到询问nfs服务监听的端口的流量,不知道是丢包了呢,还是上面我没看懂的那堆流量中进行了什么操作)
客户端5向nfs发送一个NULL请求,测试对方服务是否能正常响应,之后是请求设置客户端的clientid。
通过PUTROOTFS 来获取Root FileHandle。(在 NFS 中,文件对象是通过FileHandle来标识的)
拿到FileHandle之后,就可以进行GETATTR操作了,可获取最大文件大小、读写大小、是否支持软硬链接等信息。
接下来连接又出问题了: TCP Out_of_Order的出现,多半是因为网络拥塞,导致顺序包抵达时间不同、延时太长或者包丢失,需要重新组合数据单元。 TCP Retransmission原因则是因为上面的超时引发的数据重传。
主要的流量大致分析完了,这个流量包的分析目前就这样了,过程中我的个人推测看看就好,流量分析属实不擅长,不过这个过程中也学到了不少东西。
唉,没想到一个简单题的wp也被我搞的这么麻烦,脑壳疼。
进一步学习:
Wireshark User’s Guide
0160 Training-Stegano-1解答:010查看一下,获取flag。
解答:解压,用notepad++查看是个用下面字符表示的五角星,根据字符内容可判断是brainfuck代码。
去空格,去回车。在线解释器网址
解答:StegSolve查看。 方法一: 这个应该是出题人的预期解,在图片最后发现提示。 (因为这个网页我写wp的时候一直打不开,所以这里就只是简单写一下做题过程,没有截图)
访问hint的图片,和题目给的图片一样,用stegsolve->analyse->image combiner对两个图片进行组合,sub位置应该能出清晰的二维码。
方法二: 如果会用ps其实会更方便,可惜我不会。所以就是通过stegsolve的Random colour map的1、2、3里来回翻,终于让我翻出了一个清晰度比较高的二维码。
截取下来后,可以在放到stegsolve再找个更清晰的,就能读出来了。
flag{#justdiffit}
0170 János-the-Ripper解答:1)打开二进制文件,是个pk开头的,是zip文件,有flag.txt。
根据题目标题John the Ripper可知,出题人是想让我们用john。 首先先用zip2john将zip文件生成一个 hash。
zip2john misc100.zip >> misc100.txt
然后用john自带的字典爆破即可出结果。
john misc100.txt
flag{ev3n::y0u::bru7us?!}