本帖最后由 purpleroc 于 2014-5-27 15:58 编辑
原文来自:Tracy'Blog——【第二届360网络攻防大赛总结及re部分writeup】
两天完了,昏昏呼呼的,貌似没有蛮大感觉。也说不出个所以然,就想那天做的那个梦差不多吧,各种想使上劲,可却发现各种使不上力。于是乎,第二天的比赛就是那梦的诠释。 先来总结一番,再细谈reverse的五个题目吧。 我也不清楚我们当时到底是懂了比赛规则还是没懂,或者说,没有完全懂吧。以为是分数高的队伍点开的题目,大家才能做,所以,第一天一整场,我们都压根没怎么去看web,从而让了队伍中的web牛过客同志无所适从~后来才知道,我们点开的下一层的题目是别的队伍想做同一层次题目的关卡。于是,浪费了一好些机会,算是一个教训,以后,还是先弄懂规则。不过,从一开始就一直往逆向开,估计还是给其他队伍造成了不少的麻烦。于是,第一天,得了380,居榜首。
第二天就几乎是噩梦了。怎么说呢,手速变慢了,或者说,渗透经验不足吧,整个一天都没得分,跑了一天的wpa,结果密码就写在了网页上,好不容易找到了突破口,可都被别人捷足先等了。于是,还是380。不过,有收获的就是,找到了不足,至少,比赛过程中,又回到了以前一台台电脑,每个端口都测试的气氛,感觉还是不错,慢慢的学习msf。虽说,多数的是网站的,拿着nmap和msf使不上什么劲,不过,我庆幸尝试了一天。
最重要的是,这次比赛又是一次和小伙伴的磨合,挺开心的。
好吧,不多唠叨了。技术不过硬,这是摆在眼前的,好好加油吧~期待11111010越来越好!
开始writeup吧。 一开始比赛,立马点开RE1,不到两分钟,提交key,拿下一血: Re1: 一个crackme,随意输入个key,点确定。 直接拖到c32asm,查找字符串,网上翻,找到下面内容. 一看就知道什么情况了吧.004014E4那里,明显一个JNZ.OD加载,Ctrl+G定位到004014E4.然后看了下,发现,这上面一段代码是明显的单字节判断的地方. [Asm] 纯文本查看 复制代码 CPU DisasmAddress Hex dump Command Comments004014B5 |> /8A10 /MOV DL,BYTE PTR DS:[EAX]004014B7 |. |8ACA |MOV CL,DL004014B9 |. |3A16 |CMP DL,BYTE PTR DS:[ESI]004014BB |. |75 1C |JNE SHORT CrackMe.004014D9004014BD |. |84C9 |TEST CL,CL004014BF |. |74 14 |JZ SHORT CrackMe.004014D5004014C1 |. |8A50 01 |MOV DL,BYTE PTR DS:[EAX+1]004014C4 |. |8ACA |MOV CL,DL004014C6 |. |3A56 01 |CMP DL,BYTE PTR DS:[ESI+1]004014C9 |. |75 0E |JNE SHORT CrackMe.004014D9004014CB |. |83C0 02 |ADD EAX,2004014CE |. |83C6 02 |ADD ESI,2004014D1 |. |84C9 |TEST CL,CL004014D3 |.^\75 E0 \JNZ SHORT CrackMe.004014B5
找到第一条,004014B5处下断点.然后F9运行,随意输入一个key,确定.后面的就不说了吧:
提交,拿下十分。然后队友也紧接着把web10搞定。立马打开re2.
Re2: 提示一个有问题的程序,不能运行,必须修复好程序才行。 直接双击,弹出
貌似要在命令行下完。 先shift+F12吧,貌似没发现什么有用的信息: 庆幸的是,没几个函数:
定位到start,看了看,觉得4011BC太复杂,不想去分析,就直接把它当做是取参数的函数了。有参数了后做了什么呢?F5看了下:
还算好理解,先打开文件,然后读文件,然后处理,再复制,接着是要写文件的。看到了.db,附件中有一个pass.db,这个肯定是要被read的。 不管了,od加载这个文件,设定参数为pass.db。下断点到读文件的地方吧,先看他能不能执行过来。 发现,断下了。可,以外的发现了个问题。 这个buffer居然是空指针.难怪会异常。
那,随意给他指一个地方吧,反正文件也不大,就用旁边的00403020吧。于是,Ctrl+E改掉buffer的值。 再继续F8,到 异常,然后,把ESI的地址改为刚才读取的buffer。 然后你就在刚才的地方得到了key
坑爹的题目中说的是,修复好了后,执行两次,你会得到key。尼玛,IDA中F5一看,各种亦或操作,你执行两次有几个意思呢? 然后,有四十分的基础,立马开R3.
R3: 这题的提示是,exe是一个被病毒感染过的文件,需要手动修复,修复好了后,运行会弹出key。记得,是会弹出key。 尼玛,运行是必须运行不了的。无奈的拖到ida中。胡乱翻了下,没找到啥。然后,od加载,来到入口点。 开头就一个跳转,也没细看,总是模模糊糊的感觉以前见过入口是跳转的,比如VB、BC++,于是也就没有太在意了,直接跟了过去, 开始还正常,后面就乱码了.复制地址进ida看了下: key no,嘿嘿,开心啊,不过,这显然是障眼法。提交,不正确。 然后呢,看了下这几个push和call,根据题目一次,不是说,弹出key么?messagebox么?然后,发现参数也刚好是的。 就想着,肯定是要修复输入表了。很久没脱壳,没有玩修复了。这,怎么整。半天无脑乱碰后,去看了看其他的题目,这会儿,我们的分数开始反超了。有80分的队伍出现。然后,转了一圈,发现没有结果后,再回来看这题目,顺着ida往下拉,发现了一串可疑的字符串。 随手试了下,尼玛还真是key~艹,不能再坑啊~~~ 不过,幸好这题目不是把sendmessage过去的明文算一次得到key,不然,还真指不定能在比赛的时候做出来呢。 回来后,今天再看了看,队友跟别人交流后,给了句:其实就是nop掉jmp,然后再改改。 立马od加载一次,
CPU DisasmAddress Hex dump Command Comments0040CE4C . FF15 68F34300 CALL NEAR DWORD PTR DS:[<&KERNEL32.Ge ; [KERNEL32.GetVersion CPU Disasm Address Hex dump Command Comments 0040CEAC . FF15 4CF24300 CALL NEAR DWORD PTR DS:[<&KERNEL32.Ge ; [KERNEL32.GetCommandLineA CPU Disasm Address Hex dump Command Comments 0040CED7 . FF15 50F24300 CALL NEAR DWORD PTR DS:[<&KERNEL32.Ge ; \KERNEL32.GetStartupInfoA
这不就是VC++的入口点么? 然后,nop掉jmp后,弹出了key 是的,尼玛真弹出了~~擦,MessageBox那才叫弹出吧~~~不能再坑啊~于是,我们又回到了第一,立马开R4。
R4: 一个程序是用来往图片中写入隐藏信息的,也就是相当于LSB之类的。然后,提示中明确了,解密要用的信息在压缩包中,图片中肯定有key: 挺漂亮的图片。还有一串数字,嘿嘿,无视掉。其实,看到这图片挺开心的,终于来了一次隐写了,好开心好开心,然后,拿着Stegsolve看了半天,结果,没看出啥,然后,对每个颜色的低1位、2位,等等各种组合都提取了一次信息,无果。再然后,自己用张小图片,用提供的程序往里面隐藏数字1,再和原图片二进制对比,看了半天,还是无果。之后,总觉得这程序在哪见过,界面如下: 然后去pudn一顿搜,一顿下载,发现,还是不对。折腾了两三个小时,都快要哭了,然后,队友说,人家是逆向题,你还是老老实实逆向算法去吧。晴空一个霹雳啊,尼玛。逆向题,然后,用pexplorer看了下界面,没有发现隐藏的控件。 然后,丢到C32asm中去看字符串。 发现了个疑点,这尼玛什么个情况,居然有“提取信息完毕!”,然后回想题目中那句,解密功能也在程序里。顿时哭了,谁要我自作聪明去玩隐写呢? 然后,就定位到“提取信息完毕”的地方,拖到ida中,定位,然后一直往上翻,到上面有一个retn的地方。 停下,然后再同样的方法去“隐藏信息完毕!”的地方往上找。发现代码几乎一样。 记下这两个地址,解决思路是,猜这两个地方就是按键按下后跳转并执行的地方,那么,没有提取信息的按钮怎么办?自己弄一个上去,或者是,控制程序走向,显然,者更容易实现。于是,有什么办法呢?改004017A0处,改为什么呢?就jmp 00401c00吧。汇编代码就是:E9 5B 04 00 00.当时比赛用的是od2.0,貌似不能直接写jmp 00401C00,然后自己用E9 算了半天又不对,只能很无奈的,把这个地方改了个FF E0,就是jmp eax,然后在这里下断点,点下按键后,就断下,然后手动改eax的值为00401C00。 改完后,00401C00处下断点,然后,等下还要调试。因为你不知道哪个框是图片哪个是文本。 其实可以看C32asm里面的字符串,你就知道哪段是图片,哪段是文本了。 我们用pexplorer把,那两个小的txt控件,拉开,如图: 记得,然后点开始隐藏。 C32asm里面看到处00401C44是“打开含有信息的图片出错”,所以,得到 这里应该是c:\1.bmp了,也就是,第二个框框里是图片。 这里可以手动调一下,之后,弹出对话框,提示解密成功。 然后打开txt得到key如下: B0ACD1BDA3FD1CD6 然后,我们再来处理一下这个程序吧,用pexplorer,打造一个专门解密的。 如图: 到这里的时候,是下午3点,我们拿下了230分了,再然后不到30分钟内,取证的40和80也搞定了,分数到达370。之后,就是恶心的Re5了。
R5: 额,大概原理也知道,程序访问127.0.0.1的exploit.html然后,然后把exploit.html复制到自己开辟的空间,这里因为大小问题造成了溢出。题目的考点就是修复好这个exploit.html就可以得到key。 这个exploit.html的作用其实就是用同样的方法,访问127.0.0.01/shell.dat,然后用shell.dat中的数据来计算得到key。 由于,还没整出来,所以,暂时先不写这篇的。弄出来了再详细分析吧。
给出题目连接吧:
http://pan.baidu.com/s/1ntJm7Dv
——Tracy_梓朋
2014年5月27日15:32:01
|