DIR-645溢出漏洞复现
和DIR-815溢出漏洞非常相似,相当于再巩固一遍吧。
authentication.cgi中post请求时CONTENT_LENGTH没有限制,后续作为read参数造成溢出
漏洞利用分析
根据漏洞信息、漏洞出现在authentication.cgi,也是指向./htdocs/cgibin的符号链接
当为post请求时,读取CONTENT_LENGTH和CONTENT_TYPE的值,若不为空,read( stdin , v71 , CONTENT_LENGTH ) ,这里stdin即为POST中的body数据,而v71也是固定长度的,所以这里存在溢出,然后观察一下怎么完整走完改函数,就可以控制程序流了
这里利用for循环来分别定位数据中的id=、password=,并取走对应内容计算长度
然后依据i来将数据strncpy到v67中,而这里strncpy的长度参数居然用的源数据长度,所以这里也可以造成溢出,这里如果使id数据过长会导致后续strncpy失败,所以id数据尽量短写,利用password来溢出
后续就没什么影响的内容了,直接执行就好
漏洞测试
函数退出时的操作:
尝试一下溢出测试偏移
之后和DIR-815溢出漏洞就一样了,确定libc_base,利用mipsrop找到合适的gadget
注 addiu $s5,$sp,0x10是将$sp+0x10的值存到 $s5
1 | pad = b"A"*(0x408-0x8-0xa) |
构造payload
确定好偏移,就可以控制程序流了
还是一样的原因,用户模拟qemu执行不了system(‘/bin/sh’)
系统模拟:
https://bbs.kanxue.com/thread-272318.htm#msg_header_h2_4
- 本文作者: 1uckyc
- 本文链接: https://1uckyc.github.io/2024/03/11/Dlink-DIR645溢出漏洞复现/