-
-
[旧帖]
[求助]揭秘家用路由器0day漏洞挖掘技术第三章修复运行环境总是出错
0.00雪花
-
发表于:
2016-3-22 09:58
3823
-
[旧帖] [求助]揭秘家用路由器0day漏洞挖掘技术第三章修复运行环境总是出错
0.00雪花
大神们帮忙看一下,拜托了。第一次发贴,不会加图片,文档都在附件里了。照着那本书上做,出现了这样的错误,不知道大家有没有遇到过。
提取文件系统
使用binwalk将dir605L_FW_113.bin中的文件系统提取出来;
在提取的根文件系统中搜索web服务器程序boa;
获取运行错误信息
上图为运行boa的错误提示信息,使用ida分析boa,在字符串窗口中搜索“Initialize AP MIB failed!”。
可以看出再执行puts(“Initialize AP MIB failed!”)前有一个比较并跳转指令(bnez $v0,loc_418250),418250在41823C下面,如果成功跳转也许就不会报错。在0x0041821C和0x0041823C处下断点,然后以调试模式重新运行boa(sudo chroot . ./qemu-mips -g 1234 ./bin/boa)。
使用ida动态调试boa,发现apmib_init()函数执行完会返回0,而那句跳转指令的意思是如果v0里的值(函数返回值)不等于0就跳转到418250的位置,因为返回值为0,所以会继续执行puts函数,输出错误信息,然后直接返回,程序将会崩溃,web服务器启动失败。
编写劫持函数动态库
找到动态链接库里的apmib_init()函数,通过动态调试和静态反汇编对函数代码进行分析,由于函数内代码处理流程对测试没有影响,可以伪造其返回值为1,程序执行完apmib_init()函数之后跳到418250的位置,正常初始化其它参数。
编译生成动态库apmib-ld.so(mips-linux-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so)。
运行测试
将编译好的apmib-ld.so复制到DIR-605L路由器文件系统的根目录下;
把交叉编译环境下的libgcc_s.so.1动态库复制到根目录下的lib目录下;
使用LD_PRELOAD环境变量加载apmib-ld.so来劫持apmib.so中的apmib_init()函数,运行结果如下,“Initialize AP MIB failed!”错误被修复,但是程序还是崩溃了。
出现了新的错误,不能加载libc.so.1库,去交叉编译环境下寻找该库,发现它是指向另一个库的链接于是把两个库都复制到根目录的lib目录下继续执行boa,发现不能加载另一个库,用同样的方法处理了这个错误,又重新执行boa,结果如下:
继续出错,不能处理的重定位类型0x2f,到这里我就不知道该怎么办了,书上也没有出现这种情况。使用调试模式加载新的动态库运行boa,用ida进行动态调试,虽然下了断点但一运行就崩溃,说明在上次处理的那个错误执行前就出现了错误,不知道为什么。也许是把apmib_init()函数改坏了。不能顺利的打开web服务的端口,还有一个问题是程序运行错误之后IDA不能停在错误的地方,而是退出远程调试模式。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!