-
-
[原创]蝶澈的CTF题的回忆
-
2017-9-6 16:53
5009
-
参考资料
[分享]蝶澈的CTF题
embedded-device-lab
之前分析蝶澈的CTF题过程中,学到了一些新东西。一直想记录一下,算是交流和来往。可是等到忘的快差不多了也还是没写。
简单分析
看到文件名感觉像是一个正常的设备固件,搜索一下发现是一个真是的路由器的固件,还曾出过漏洞。
下载了原版固件,使用binwalk解包之后,对所有的文件进行了对比。
我采用的方式是针对每个文件hash,然后比较。
find . -type f |xargs md5 > test.txt
diff 1.txt 2.txt
可以看到文件大概有3处修改,增加了nc文件,passwd和services文件。以及help目录删掉了一些文件。
看蝶澈的writeup中使用了https://github.com/bmaia/binwally这个工具做两个目录的文件比较。
静态分析:
看一下字符串,可以看到不少有价值的字符串。不过看不到中文的字符串。
直接cat可以看到中文:
动态调试
路由器的环境搭建可以参考看雪。通常来说搭建一个mips的调试环境还是需要花费不少时间,踩一些坑的。为了方便分析。我做了一个基于docker的一键测试环境embedded-device-lab可以直接使用gdb或者ida动态调试。
经过简单的尝试,发现应该是需要输入一个密码。如果密码正确,可以获得flag。
通过getflag。socket等关键字,可以定位到关键函数400310。通过一番调试发现,
这里:
loc_400710:
lw $v1, 0x850+var_830($fp)
li $v0, 1
beq $v1, $v0, loc_40038C
nop
需要v1不等v0才能进入有getflag相关的逻辑。而当我们随便输入密码的时候,v1都是等于v0=1的。所以,在这里把v0修改成其他的值,就可以继续运行到getflag相关的逻辑。
其实我也分析过了一下加密的函数,只是没看懂。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课