FreeBuf:DLink RCE漏洞CVE-2019-17621分析( 三 )
本文插图
本文插图
本文插图
本文插图
最终可成功进行远程调试:
本文插图
3、漏洞分析在路由器运行状态下 , 文件系统中的/htdocs/cgibin的genacgi_main函数在UPnP请求处理过程中 , 存在远程执行代码漏洞 。 UPnP是专用网络中设备之间的通信协议 , 实现了智能设备端到端网络连接结构 。 它也是一种架构在TCP/IP和HTTP技术之上的 , 分布式、开放的网络结构 , 以使得在联网的设备间传递控制和数据 。 UPnP不需要设备驱动程序 , 因此使用UPnP建立的网络是介质无关的 。 同时UPnP使用标准的TCP/IP和网络协议 , 使它能够无缝的融入现有网络 。 构造UPnP应用程序时可以使用任何语言 , 并在任何操作系统平台上编译运行 。
尝试静态下使用IDA反汇编cgibin文件 , 然后F5查看伪代码 , 发现操作失败 , 故换用Ghidra(NSA发布的、基于Java开发的、适用于Windows、Mac和Linux的跨平台反汇编工具) , 发现可快速定位genacgi_main函数并查看伪码(貌似反汇编能力优于IDA?):
本文插图
从伪码中可以看到 , sprintf函数设置了一个包含所有值的缓冲区 , 其中函数参数 ?service=及其值 , 被xmldbc_ephp函数(最后调用send)将“buffer_8”中包含的数据发送给PHP:
本文插图
可看出sprintf用于连接多个变量的值 , 用于填充一个缓冲区 , 设置要传递的新变量 , 其中SHELLFILE将以格式%s%d.sh进行传递 , 主要用于为新的shell脚本命名 。 缓冲区中的数据经过xmldbc_ephp处理 , 由PHP文件run.NOTIFY.php进行处理 , 如下:
本文插图
本文插图
本文插图
程序的调用流程为:buf_8 ->xmldbc_ephp->FUN_0041420c ->FUN_0041372c -> socket 。
关于run.NOTIFY.php内容:
本文插图
其中可见调用了PHP函数 GENA_subscribe_new , 并传递cgibin程序中genacgi_main函数获得的变量 , 还包括变量SHELL_FILE 。 搜索GENA_subscribe_new发现其定义在gena.php文件中 , 分析GENA_subscribe_new功能可知其并不修改$shell_file变量 ,
本文插图
其传递 $shell_file到GENA_notify_init函数 , 也就是shell_file最终处理的地方:通过调用PHP函数fwrite创建新文件 , 且fwrite函数被使用了两次:
本文插图
fwrite函数第一次创建文件 , 文件名由可控的SHELL_FILE变量(uri_service)以及getpid组成:
推荐阅读
- 博联智能BroadLink京东旗舰店4月1日正式开业!
- 漏洞@百万OpenWrt网络设备遭受影响 研究人员披露严重RCE漏洞
- 3DM游戏网▲Now,《控制》现已加入Nvidia云游戏平台GeForce
- MindLinker好不好用?百人在线视频开会毫无压力
- 教师提高网课教学质量的关键在于GeForce
- 设计类网课需求太高怎么办?GeForce电脑带来佳解决方案
- 上网课还在用平板?GeForce三大优势助力更好学习
- 【FreeBuf】Labs发布2020年恶意软件威胁态势报告,Malwarebytes
- 『蓝牙耳机』深迪全球首款IMU+force传感器,助力TWS蓝牙耳机市场应用
- #IT之家#XTREEM ARGB游戏内存获 2020 红点设计奖,十铨T-FORCE
