Netgear-R8300-UPnP RCE漏洞分析复现-水滴实验室

根据Netgear官方在2020年7月31日发布的公告,在Netgear R8300型号的路由器中,UPNP服务存在缓冲区溢出漏洞(PSV-2020-0211)。
通过对Netgear-R8300-UPnP栈溢出漏洞的复现,掌握在仿真情况下对nvram相关问题的处理,注重细节的利用。值得借鉴的是,在漏洞利用过程中,NULL字符截断问题的解决思路。(文章中若有不足之处,请大家见谅)
漏洞分析
固件下载地址

https://www.downloads.netgear.com/files/GDC/R8300/R8300-V1.0.2.130_1.0.99.zip
提取文件系统
binwalk -Me R8300-V1.0.2.130_1.0.99.chk
/usr/sbin/upnpd 程序中漏洞点解析
upnp服务开启1900端口,在upnp_main函数执行流程时,通过recvfrom函数接收数据并传递给ssdp_http_method_check函数,在ssdp_http_method_check内部执行strcpy操作时,未对输入的数据做任何安全检查,造成栈溢出。
源码如下:
int upnp_main()
{
//…
recvBuf[0] = 0;
//接收通过1900端口发送的数据,保存在 recvBuf 缓冲区中。
v28 = recvfrom(dword_C4580_upnp_http_fd_1900, recvBuf, 0x1FFFu, 0, (struct sockaddr *)&v63, (socklen_t *)&v71);
v29 = v64;
stru_C44FC.__fds_bits[(unsigned int)dword_C4580_upnp_http_fd_1900 >> 5] &= ~(1 << (dword_C4580_upnp_http_fd_1900 & 0x1F));
if ( v29 )
{
if ( v28 )
{
inet_ntoa_b();
recvBuf[v28] = 0;
if ( acosNvramConfig_match(“upnp_turn_on”, “1”) )
//接受的数据recvBuf传递给ssdp_http_method_check函数
ssdp_http_method_check(
recvBuf,
(int)&v59,
(unsigned __int16)(HIWORD(v63) << 8) | (unsigned __int16)(HIWORD(v63) >> 8));
}
else
{
printferror(2, “%s(%d):EOF…\n”, “upnp_main”, 883);
}
}
//…
}

signed int __fastcall ssdp_http_method_check(const char *recvBuf, int a2, int a3)
{
//…
int v4; // r6
int v39; // [sp+18h] [bp-640h]
int v40; // [sp+24h] [bp-634h]
int *v51; // [sp+628h] [bp-30h]
//…
printferror(3, “%s(%d):\n”, “ssdp_http_method_check”, 203);
if ( dword_93AE0 == 1 )
return 0;
v51 = &v40;
//1. 未对recvBuf进行长度检查
//2. strcpy未进行复制的数据长度进行限制
strcpy((char *)&v40, recvBuf);
v7 = sub_B60C((const char **)&v51, (const char *)&v52);
v8 = v7;
//…
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值