全!记一次从代码审计到拿下内网edr的过程

Posted 你永远不了解Thrash的魅力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全!记一次从代码审计到拿下内网edr的过程相关的知识,希望对你有一定的参考价值。

0x01、前言
在某次授权红队行动中,客户给定目标外网资产很少

经过各种挖掘,各种尝试,久久没有结果,注意到某系统为通用系统。

在这里插入图片描述

于是开始了下面的故事。

0x02、寻找源码到getshell

查找源码

1、网盘泄露:这套系统并不开源,各种网盘泄露网站一顿查找,无果

2、Github、gitlab泄露:尝试了多个关键词,均无果

3、Fofa找同类型的站:用favicon.ico,或是用title来搜,并且将这些资产采集起来,最终在某个站发现web.rar,成功获得源码

代码审计

查看代码目录结构如下
在这里插入图片描述

首先看web.xml,注意到这个过滤器filter.PurFilter

在这里插入图片描述

跟进去看下

在这里插入图片描述

此处定义几个数组
在这里插入图片描述

使用getRequestURI()获取url,查找url中最后一个点的位置,然后获取后缀转小写

在这里插入图片描述

这个过滤器实际上是一个权限校验的工作,如果用户没登录的话是只能访问数组里的路径,或者后缀数组的特定后缀的文件。但是此处使用
getRequestURI()获取url,我们注意到

在这里插入图片描述

只要我们的strSuffix为后缀数组中的就能过了这个验证。

我们首先了解一下getRequestURI()这个方法
当我们请求/test/1.jsp;aaa时getRequestURI()取到的结果也是/test/1.jsp;aaa
那么此时想到构造请求/test/1.jsp;1.jpg就能绕过这个权限校验

绕过权限校验以后开始寻找可getshell的漏洞点,直接全局搜索multipart,寻找上传功能

在这里插入图片描述

看到第二个的时候成功发现一处任意文件上传

获得权限

按照代码分析,直接构造包上传shell,成功getshell

在这里插入图片描述

0x03、拿下内网edr

获取edr系统权限

通过shell执行tasklist发现此机器装了某edr

扫描c段443端口发现https://172.x.x.x为某edr web管理界面

用frp开个代理

用已经公开的漏洞测了一遍发现,存在一处命令执行漏洞没修

利用公开的脚本直接弹了一个shell回来

在这里插入图片描述

此次的目的不是获取这个edr的服务器权限,而是可以进到web管理界面可以做到给终端下发后门。所以目标为的登录web管理界面

首先的想法是找数据库账号密码然后登录进后台。

之前也没搞过,先看下进程
在这里插入图片描述

好像是mongodb,使用以下命令查数据库密码

find /ac -type f -name “*.php”| xargs grep “password”
太多了发现密码名字好像叫mongodb_password,再次查找.

find /ac -type f -name “*.php”| xargs grep “mongodb_password”
在这里插入图片描述

查的过程中感觉就算找到数据库连上了密码也很难解密

于是想到之前的未授权任意用户登录,漏洞文件在/ui/login.php

在这里插入图片描述

于是先备份文件,然后将此处的if改为if(1==1)
在这里插入图片描述

使用/ui/login.php?user=admin登录成功

在这里插入图片描述

然后就可以加白名单批量下发马执行上线了。

0x04、技术总计

1、想办法获取外网系统源码

2、代码审计获取外网shell

3、历史漏洞获取edr系统权限

4、修改文件进而任意登录到web管理端记一次从代码审计到拿下内网edr的过程

带头大哥 HACK之道 今天
0x01、前言
在某次授权红队行动中,客户给定目标外网资产很少

经过各种挖掘,各种尝试,久久没有结果,注意到某系统为通用系统。

图片

于是开始了下面的故事。

0x02、寻找源码到getshell

查找源码

1、网盘泄露:这套系统并不开源,各种网盘泄露网站一顿查找,无果

2、Github、gitlab泄露:尝试了多个关键词,均无果

3、Fofa找同类型的站:用favicon.ico,或是用title来搜,并且将这些资产采集起来,最终在某个站发现web.rar,成功获得源码

代码审计

查看代码目录结构如下

首先看web.xml,注意到这个过滤器filter.PurFilter

跟进去看下

此处定义几个数组

使用getRequestURI()获取url,查找url中最后一个点的位置,然后获取后缀转小写

这个过滤器实际上是一个权限校验的工作,如果用户没登录的话是只能访问数组里的路径,或者后缀数组的特定后缀的文件。但是此处使用
getRequestURI()获取url,我们注意到

只要我们的strSuffix为后缀数组中的就能过了这个验证。

我们首先了解一下getRequestURI()这个方法
当我们请求/test/1.jsp;aaa时getRequestURI()取到的结果也是/test/1.jsp;aaa
那么此时想到构造请求/test/1.jsp;1.jpg就能绕过这个权限校验

绕过权限校验以后开始寻找可getshell的漏洞点,直接全局搜索multipart,寻找上传功能

看到第二个的时候成功发现一处任意文件上传

获得权限

按照代码分析,直接构造包上传shell,成功getshell

0x03、拿下内网edr

获取edr系统权限

通过shell执行tasklist发现此机器装了某edr

扫描c段443端口发现https://172.x.x.x为某edr web管理界面

用frp开个代理

用已经公开的漏洞测了一遍发现,存在一处命令执行漏洞没修

利用公开的脚本直接弹了一个shell回来

此次的目的不是获取这个edr的服务器权限,而是可以进到web管理界面可以做到给终端下发后门。所以目标为的登录web管理界面

首先的想法是找数据库账号密码然后登录进后台。

之前也没搞过,先看下进程
好像是mongodb,使用以下命令查数据库密码

find /ac -type f -name “*.php”| xargs grep “password”
太多了发现密码名字好像叫mongodb_password,再次查找.

find /ac -type f -name “*.php”| xargs grep “mongodb_password”

查的过程中感觉就算找到数据库连上了密码也很难解密

于是想到之前的未授权任意用户登录,漏洞文件在/ui/login.php

于是先备份文件,然后将此处的if改为if(1==1)

使用/ui/login.php?user=admin登录成功

然后就可以加白名单批量下发马执行上线了。

0x04、技术总计

1、想办法获取外网系统源码

2、代码审计获取外网shell

3、历史漏洞获取edr系统权限

4、修改文件进而任意登录到web管理端

以上是关于全!记一次从代码审计到拿下内网edr的过程的主要内容,如果未能解决你的问题,请参考以下文章

网络安全记一次代码审计

网络安全记一次代码审计

PHP代码审计 | 记一次CMS代码审计

XDCTF2015代码审计全解

如何通过代码审计从三层内网各种漏洞拿到域控?

记一次小有成就的代码审计