揭秘家用路由器0day漏洞挖掘技术读书笔记 D-Link DIR-645 authentication.cgi溢出漏洞分析

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

你可能感兴趣的:(IOT安全)