揭秘家用路由器0day漏洞挖掘技术读书笔记 D-Link DIR-645 authentication.cgi溢出漏洞分析
固件下载地址
漏洞描述如下。
上一篇讲了DIR-815 hedwig.cgi中的漏洞成因及利用方式,这一篇来讲DIR-645 authentication.cgi中的漏洞成因及利用方式。下载之后解压缩得到dir645_FW_103.bin,通过binwalk提取出文件系统。
需要分析的还是/htdocs/cgibin这个程序。我们根据POC使用下面的脚本直接进行动态调试。
我们在堆栈空间分配完毕后的地址0x40B024处下断点。因为溢出发生时总会覆盖saved ra,所以可以通过观察saved ra何时被覆盖来定位存在漏洞的函数。在0x40B500处的read函数调用后可以发现saved ra被覆盖。
继续执行到0x40A494处的getenv("HTTP_COOKIE")
时程序就崩溃了。
点击OK之后程序停在异常地址,在lbu $v0, 0($a1)
指令中a1被覆盖为0x41414141。
查看read函数之前的代码可以得到read函数此处用法为 read(fileno(stdin),var_430,atoi(getenv("CONTENT_LENGTH"));
由于没有判断CONTENT_LENGTH的长度因此造成了缓冲区溢出。
使用书中的patternLocOffset.py生成1160个字节的pattern string,并用下面的命令运行authentication.cgi。
在authenticationcgi_main的返回处0x40BCE0下断点,查看寄存器S0和RA。
再次使用patternLocOffset.py定位偏移。
因为DIR-815 1.01和DIR-645 1.03使用的libc.so.0动态库是一样的,所以关于ROP的选择可以参考前面的内容。
metasploit里面的payload