PwniumCTF2014 - JJSN总结
Write-ups
本文最早发布在TSRC,详细地址:http://security.tencent.com/index.php/blog/msg/55
Forensics
USB is FUN
这道题目就给出了一个文件下载地址:http://41.231.53.40/for1.pcapng
文件后缀是pcapNG的,当然玩ctf的时候,看见的并不一定就是真的,我们可以通过file命令和一些hex工具来查看一下,信息如图:


通过上面信息可以确定该文件的确是pcapng格式,google了一下这个文件类型就是pcap格式的扩展,目前还只是实验阶段,可以使用wireshark打开分析。心急的朋友可能直接使用wireshark打开这个文件开始分析了,22M这得多少网络包呀。取证中经常用到一个方法就是使用strings查看文件中有什么字符串,运行结果如下图:

我们发现熟悉的flag字符串,提交,搞定了。
Altered Code
这一题给出了一个.c文件(下载地址:http://41.231.53.40/main.c),没有任何提示。
最初我们拿到这个文件后,编译,执行,得到一串无意义的字符串,当然这肯定不是flag。
接下来我们尝试了调换代码顺序,再编译执行,还是不对。
最后通过观察网页上面展示的代码段(这里有一个坑:工具打开.c文件会自动缩进好),我们发现缩进有问题,如图:

为了进一步确认,我们查看该文件的HEX,如图:

正常的缩进使用的空格,而有几行代码缩进使用的是\t。因此我们尝试注释掉\t缩进的代码段,再编译执行,效果如图:

提交,搞定。
Find the owner
题目:
http://41.231.53.40/Forensics100.zip flag format == Pwnium{md5[ip:port]} Be careful this file may harm your computer
这道题目肯定是这个文件会干什么操作。于是我们先用Total uninstall来监控注册表和C盘文件,然后运行exe文件,发现没有任何操作,那么exe肯定是进行网络操作。打开Wireshark可以看到如下的网络请求:

ip:193.95.68.245,port:81,按照题目的提示md5一下,提交就搞定了。
ps:文件是一个木马,更简洁的方法可以扔给各种在线木马检测网站试一下,根本不用自己分析。懒人必备。
MISC
Look Closer
这题也只给出一个rar文件,下载地址:
https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/look-closer/Misc1.rar?raw=true),没有任何提示。
下载后,我们发现无法打开,提示是错误的格式,于是Hex查看一下文件的格式,如图:

图7 Hex查看misc1.rar
文件头很明显告诉我们这个是一个jpg文件,于是修改后缀,flag就在图片中,如图:

提交,搞定。
So basic
这题同样只给出一个zip文件(下载地址:
https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/so-basic/Misc75.zip?raw=true)。
我们将下载的zip文件进行解压,里面有40个小文件,每个文件中是一个数字,给人感觉就是这个是ASCII值。
首先将所有文件中的文本合并到一个文件中:
cat ./* > misc75.txt
然后转换成对应字符串看看,得到如图的结果:

图9 unhexlify的结果
看上去很像flag,但是顺序是乱的。我们找到字符P对应的文件“cfcd208495d565ef66e7dff9f98764da”,文件名很像是MD5加密的,于是我们尝试破解一下,解密后是字符0。那么大胆猜测所有的文件名其实是0~39的MD5密文。那么我们修改一下程序:

图10 修改后的Py代码
YEAH!!搞定。
Crypto
Break me
题目中给出一个字符串:
“QlpoOTFBWSZTWTxSmOAAAAsJAF/gOwAgADEAAAiZMNT0JbKzhCQcyQtA2gNbvXgSvxdyRThQkDxSmOA=”
经验告诉我们这个是一个经过Base64编码的字符串,于是我们尝试使用Base64解码,解码后结果含有不可见字符,说明这还不是Flag。

在这里有一些不知所措,于是乎我们将前面可见部分字符在google中进行搜索了一下,发现有相关文章说这是bz2文件格式的头部,通过对比bz2文件格式的头部和尾部,我们可以确认上面的字节流的确是经过bzip2压缩后的内容,现在就就简单了,再解压缩一次:

提交,搞定了。
Programming
2048
Crack me fast
题目提示如下:
Crackme Fast The binary http://41.231.53.44:9393/ Send the password in less than 2 secondshttp://41.231.53.44:9393/check.php?p={p@55}
访问题目中的地址,可以得到一个文件,打开之后如图:

文件头是个LPCK,不知道啥格式,不过在之后看到了MZ头。把MZ头之前的部分统统删掉,成功得到一个exe。

要求输入Password。没有办法了,直接扔进ida….找到关键部分如下:
.text:00401363 mov [esp+5Ch+var_5C], offset aPassword ;
"Password :"
.text:0040136A call puts
.text:0040136F lea eax, [esp+5Ch+var_3E]
.text:00401373 mov [esp+5Ch+var_58], eax
.text:00401377 mov [esp+5Ch+var_5C], offset aS ; "%s"
.text:0040137E call scanf
.text:00401383 mov [esp+5Ch+var_14], 0
.text:0040138B jmp short loc_4013B1
.text:0040138D ; ---------------------------------------------------------------------------.text:0040138D
.text:0040138D loc_40138D: ; CODE XREF:
main+8F j
.text:0040138D mov eax, [esp+5Ch+var_14]
.text:00401391 mov eax, [esp+eax*4+5Ch+var_34]
.text:00401395 mov ecx, eax
.text:00401397 xor ecx, 1
.text:0040139A lea edx, [esp+5Ch+var_3E]
.text:0040139E mov eax, [esp+5Ch+var_14]
.text:004013A2 add eax, edx
.text:004013A4 mov al, [eax]
.text:004013A6 movsx eax, al
.text:004013A9 cmp ecx, eax
.text:004013AB jnz short loc_4013C7
.text:004013AD inc [esp+5Ch+var_14]
.text:004013B1
.text:004013B1 loc_4013B1: ; CODE XREF:
main+57 j
.text:004013B1 mov ebx, [esp+5Ch+var_14]
.text:004013B5 lea eax, [esp+5Ch+var_3E]
.text:004013B9 mov [esp+5Ch+var_5C], eax
.text:004013BC call strlen
.text:004013C1 cmp ebx, eax
.text:004013C3 jb short loc_40138D
.text:004013C5 jmp short loc_4013C8
.text:004013C7 ; ---------------------------------------------------------------------------.text:004013C7
.text:004013C7 loc_4013C7: ; CODE XREF:
main+77 j
.text:004013C7 nop
.text:004013C8
.text:004013C8 loc_4013C8: ; CODE XREF:
main+91 j
.text:004013C8 lea eax, [esp+5Ch+var_3E]
.text:004013CC mov [esp+5Ch+var_5C], eax
.text:004013CF call strlen
.text:004013D4 cmp eax, 8
.text:004013D7 jnz short loc_4013E8
.text:004013D9 cmp [esp+5Ch+var_14], 8
.text:004013DE jnz short loc_4013E8
.text:004013E0 mov [esp+5Ch+var_10], 1
.text:004013E8
.text:004013E8 loc_4013E8: ; CODE XREF:
main+A3 j
.text:004013E8 ; main+AA j
.text:004013E8 cmp [esp+5Ch+var_10], 1
.text:004013ED jnz short loc_4013FD
.text:004013EF mov [esp+5Ch+var_5C], offset aGoodBoySendTha ; "Good Boy ! Send That pass to server to "...
.text:004013F6 call printf
.text:004013FB jmp short loc_401409
.text:004013FD ; ---------------------------------------------------------------------------
.text:004013FD
.text:004013FD loc_4013FD: ; CODE XREF:
main+B9 j
.text:004013FD mov [esp+5Ch+var_5C], offset
aSorryIncorrect ; "Sorry ! Incorrect pass"
.text:00401404 call printf
大概理解一下:这里输入的字符串为8个字符,然后以esp+5Ch+var_34为地址之后的8个DWORD,取低8位字符,然后都xor 1,结果与输入的串比较,相等则正确。
来看看esp+5Ch+var_34的数据怎么得到:
.text:00401345 lea edx, [esp+5Ch+var_34]
.text:00401349 mov ebx, 402000h
.text:0040134E mov eax, 8
.text:00401353 mov edi, edx
.text:00401355 mov esi, ebx
.text:00401357 mov ecx, eax
.text:00401359 rep movsd
看样子是从0x402000h复制过来的,于是跟过去:

看样子把这些东西xor 1一下就可以得到password了然后提交就可以得到Flag了。
结果却是”Too late”,好吧题目写了少于2s。
那就把VA转换成文件偏移,得到0x1310,写个脚本自动破解吧。

ROT
题目如下:
Rot 90, Rot -90, Rot 90, Rot -90... nc 41.231.53.40 9090
每次连上去后会得到一个base64的字符串,解码后是一个png文件格式的字节流,可以还原成如图:

仔细观察一发,应该只要把左右两部分折叠拼凑在一起就行,而且题目中不是也说rot90。

运行后的结果如下:

自动提交,搞定。
Web
Guest book
题目:
Find the key ! http://41.231.53.43:8383/
题目是一个web页面,而New post功能的post内容存在sql延时盲注。Flag内容存在于数据库中,利用注入得到库名表名字段名,然后查询得到flag内容。盲注得到库名为web200,表名列名为flag:flag。
盲注sql语句:
test', '1' and (select if(ascii(mid((select flag from web200.flag where flag!='' limit 0,1),1,1))=100,sleep(5),0)))#
写一个脚本就来完成这个过程,就轻松搞定了。
Xwebsite
题目:
Find the key http://41.231.53.44/web100/index.php
目前题目已经无法访问了,所以这里就简单说一下情况。在登陆的时候,我们使用万能登录“’ or ‘1’=’1”,成功以管理员身份登录后,再搜索“’ or ‘1’=’1”,得到的结果中就有flag。是不是很简单呀?其实ctf中很多题目只要你有思路都很简单的。
Reverse
Baby crack me
题目:
a baybe crackme http://41.231.53.44/tasks/re10.zip
如果上面地址无法下载,那么可以从这里
https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/baybe-crackme/re10.zip?raw=true下载。
运行下载后的文件,无限输出“baby crackme”,用IDA逆向一下,可以得到如下代码:

程序大致的意思是在没有参数运行的时候会无限输出Baby Crackme,当有参数的时候就会输出Flag。
莫非答案就是G00d_B0y,提交试一下,正确了。好吧,10分的题目。
Kernel Land
题目:
The third Tick gives you the answer ;) http://41.231.53.40/kernel
备用下载地址:
https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/kernel-land/kernel?raw=true
运行下载后的文件,出现“segment fault”,而IDA调试刚连上去就自己断开,现在只能扔IDA里开始逆吧。
从启动函数开始看,一路设置GDT,IDT,IRQ,然后开个定时器,主线程就结束了,没发现啥和flag有关的。。。。把定时器翻出来看看,代码如下:
.text:00100958 public timer_tick
.text:00100958 timer_tick proc near ; DATA XREF:
timer_init+3 o
.text:00100958 sub esp, 14h
.text:0010095B mov eax, ds:1060C0h
.text:00100960 lea edx, [eax+1]
.text:00100963 mov ds:1060C0h, edx
.text:00100969 push eax
.text:0010096A push offset aDTick__ ; "%d Tick..\n"
.text:0010096F call printf
.text:00100974 movzx ecx, byte ptr ds:1060C0h
.text:0010097B add esp, 10h
.text:0010097E mov eax, 0
.text:00100983
.text:00100983 loc_100983: ; CODE XREF:
timer_tick+42 j
.text:00100983 mov edx, ecx
.text:00100985 xor dl, byte ptr ds:flag[eax]
.text:0010098B add edx, 1
.text:0010098E mov byte ptr ds:flag[eax], dl
.text:00100994 add eax, 1
.text:00100997 cmp eax, 28h
.text:0010099A jnz short loc_100983
.text:0010099C add esp, 0Ch
.text:0010099F retn
.text:0010099F timer_tick endp
这里的flag只和tick进行运算,而tick是个char,也就是说现在flag可能的取值一共有256种,那么穷举一下看看结果就知道哪一个是Flag了。

运行结果:

搞定了。
PwniumCTF2014 - JJSN总结的更多相关文章
随机推荐
- 洛谷.3065.第一!First!(Trie 拓扑)
题目链接 \(Description\) 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 \(Solution\) 一个单词想要排在第一,首先是没有其它字符串是它的前缀.那 ...
- Python3练习题系列(03)
题目: 思考While循环,看看它的特点是什么? 知识点: while循环 分析: 特点:while-loop(while 循环).while-loop 会一直执行它下面的代码片段,直到它对应的布尔表 ...
- 潭州课堂25班:Ph201805201 并发(进程,线程)二 第十二课 (课堂笔记
线程与进程的其他相关操作 import threading # 线程 import multiprocessing # 进程 import socket import time def wo(): g ...
- [CF920G]List Of Integers
Description: \(t\)组询问,求第\(k\)个大于\(x\)且与\(p\)互质的数 Hint: \(x,k,p<=1e6,t<=30000\) Solution: 推出式子后 ...
- only_full_group_by的注意事项
only_full_group_by的注意事项 使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行
- java中四舍五入——double转BigDecimal的精度损失问题
代码: double d = -123456789012345.3426;//5898895455898954895989; NumberFormat nf = new DecimalFormat(& ...
- .net里Release的pdb文件有什么用 是否可以删除
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接. 在使用 /debug 生成时,会创建一个 PDB 文件. 可以使用 /debug:full 或 / ...
- 440P 测试三星ssd840pro 512g
下面是鲁大师的截屏 安装win8.1 x64颇费周折,计算机->管理模糊,解决方法 现在最大的问题是cpu风扇噪音和温度,看网上确实存在此问题,纯铜风扇+7783硅脂是必须的,下面鲁大师温度截屏 ...
- Linux终端记录神器
我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析.如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好.但是如果做一些压力测试,产生大量 log ,而且系统内存又比较小(比如嵌 ...
- sqlite3命令行查看中文乱码问题解决
SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.我们通过程序创建的数据库一般位于/data/data/程序db设置的content类 ...