我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

1.环境搭建

对于简单验证,您可以使用:

sudo docker pull jetbrains/teamcity-server:2023.11.3
sudo docker run -it -d --name teamcity -u root -p 8111:8111 jetbrains/teamcity-server:2023.11.3
# sudo ufw disable

这里我们使用+IDEA远程调试来调试代码。

首先去官网下载exe文件:

我选择的版本是2023.11.3,如果是2023.05.x版本的话,会出现部分文件位置不正确,缺少部分文件的情况(比如web-.jar)。

图片怎么变成文件_html变成jsp文件_微信怎么把图片变成文件

然后直接解压然后拖进IDEA中打开:

微信怎么把图片变成文件_图片怎么变成文件_html变成jsp文件

在conf文件夹中创建一个新的.xml:


<Server port="8105" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />

    GlobalNamingResources>
    <Service name="Catalina">
        <Connector port="8111" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="60000"
                   redirectPort="8543"
                   useBodyEncodingForURI="true"
                   tcpNoDelay="1"
                   maxHttpHeaderSize="16000"
        />

        <Engine name="Catalina" defaultHost="localhost">
            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                       resourceName="UserDatabase"/>

            Realm>
            <Host name="localhost"  appBase="webapps"
                  unpackWARs="true" autoDeploy="true">


                <Valve className="org.apache.catalina.valves.ErrorReportValve"
                       showReport="false"
                       showServerInfo="false" />

            Host>
        Engine>
    Service>
Server>

打开-2023.11.3\bin\.bat,在第一行插入以下代码:

SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8188

并配置远程JVM调试:

完成后进入bin目录,通过--start启动;如果是第一次启动,需要配置数据库位置,admin账号密码等。

图片怎么变成文件_html变成jsp文件_微信怎么把图片变成文件

做完这些之后在idea中设置断点开始调试,并通过yakit等包测试配置是否成功进入调试:

html变成jsp文件_微信怎么把图片变成文件_图片怎么变成文件

2. 漏洞分析

有些文件夹中需要右键点击lib文件夹,点击Add as ... 将其添加到依赖项中,避免出现大量错误影响阅读。建议先用F8、F7一步一步调试整个代码,熟悉路径的函数名。

负责请求处理和分发的函数点位于-2023.11.3\\ROOT\WEB-INF\lib\web-.jar!\\\\.class,我们看到函数最后调用了l,所以我们在l函数这里设置断点,开始调试:

微信怎么把图片变成文件_html变成jsp文件_图片怎么变成文件

按F7步进可以看到,由于我们请求的/hax不存在,所以直接分发给er去处理:

微信怎么把图片变成文件_html变成jsp文件_图片怎么变成文件

如果我们请求/app/rest/,它将分发到:

F8继续往下走,经过该函数的时候,大家要警惕,从函数名看,意思是看请求中是否有jsp字段,也就是有没有?jsp=xxx,如果有,那么就更新视图:

微信怎么把图片变成文件_图片怎么变成文件_html变成jsp文件

按F7查看,程序获取了一个jsp字段,即/app/rest/;.jsp:

图片怎么变成文件_微信怎么把图片变成文件_html变成jsp文件

继续F8,我们想看的是获取到新的View之后的渲染过程,因此我们进入t函数:

html变成jsp文件_微信怎么把图片变成文件_图片怎么变成文件

继续按F8,就看到了我们期待的功能:

html变成jsp文件_微信怎么把图片变成文件_图片怎么变成文件

进入后按 F8 继续。我们想了解 /app/rest/;.jsp 是如何处理的,因此我们进入该函数:

图片怎么变成文件_微信怎么把图片变成文件_html变成jsp文件

出现两个紫色方块。左键单击第一个进入:

里面的逻辑比较简单,就不细说了,返回的结果是一个view:

图片怎么变成文件_html变成jsp文件_微信怎么把图片变成文件

官网解释的很清楚了,内部的资源视图解析器会将视图名解析成JSP文件的路径,并包装成对象,再将请求发送给它执行JSP渲染流程;比如之前我们看到的404.jsp,就解析成了404.html:

图片怎么变成文件_微信怎么把图片变成文件_html变成jsp文件

继续按F8往下走。我们还是点击进入:

html变成jsp文件_图片怎么变成文件_微信怎么把图片变成文件

继续走,按 F7 进入 del 函数:

微信怎么把图片变成文件_图片怎么变成文件_html变成jsp文件

进入一个函数的字面意思是获取以下内容的过程:

html变成jsp文件_图片怎么变成文件_微信怎么把图片变成文件

图片怎么变成文件_html变成jsp文件_微信怎么把图片变成文件

左键点击第二步进入:

微信怎么把图片变成文件_图片怎么变成文件_html变成jsp文件

然后一步步按F7,来到org...core.#。可以看到这一步传入的路径被处理了,不存在的/app/rest/;.jsp被改为了存在的/app/rest/。这样就把正在处理的url改了,这样就实现了任意都可以访问了:

但是分析到这儿,还是没有解释一个关键的东西,那就是为什么我们访问一个不存在的URI,比如这里的/hax,它不进行认证呢?要理解这个,我们得去调试一下……#这个方法,我在调试的时候,访问了一个不存在的URI,它显示var4.size() == 1,然后进入了多个方法。

在调试的时候发现由于反编译失败,很多代码都读不出来,但可以肯定是因为uri的不存在导致他们的判断结果为真,从而导致最终结果为真。这个地方以后有待研究,如果大家有什么想法也可以直接留言交流,谢谢指教。

开发

RCE方法主要有两种,一种是请求/app/rest/debug/,一种是在后台上传恶意插件。

但由于之前CVE-2023-42793的原因,官方直接删除了这个端点,也就是说2023.11.x之后的版本只能考虑第二种方法,参考:

这部分可以通过抓包的方式写出来。但是我调了.0的shell之后发现连接不上。抓包后发现403提示:

尝试替换:

html变成jsp文件_图片怎么变成文件_微信怎么把图片变成文件

发现没用,依然是403:

微信怎么把图片变成文件_html变成jsp文件_图片怎么变成文件

尝试删除X-Tc-Csrf-Token,仍然403:

微信怎么把图片变成文件_图片怎么变成文件_html变成jsp文件

继续删除,直接500:

图片怎么变成文件_微信怎么把图片变成文件_html变成jsp文件

目前我还没有看代码调试,从前面的错误 CSRF X-TC-CSRF-Token does not match CSRF value 来看,我猜测它对应的是一个 csrf token。尝试从浏览器访问目标,得到自动生成的:

然后出现403错误:

图片怎么变成文件_html变成jsp文件_微信怎么把图片变成文件

替换之后发现冰蝎3已经连接上了:

此时我认为添加自定义请求标头将允许访问,但它仍然不起作用:

原来是冰蝎3没有给你添加,我尝试手动添加,还是不行:

原来这里有两个,一个是冰蝎识别领域后添加的,一个是我们自定义的。

由于之前没有关注过冰蝎4,所以我思考了很久,准备自己去修改冰蝎源码,直到看到了冰蝎4:

html变成jsp文件_微信怎么把图片变成文件_图片怎么变成文件

结束!

我写的脚本地址如下:

此时,任何版本的漏洞都可以被利用:

根据的博客,即使删除了该插件,它也会在-.xml中留下永久的条目,因为只有先禁用该功能才能删除它,例如C:\\\\\-.xml:


<disabled-plugins>
  <disabled-plugin name="WYyVNA6r" />
disabled-plugins>

测试了一下发现不对,直接删除是可以的,但是需要重启,先禁用再删除就不需要重启了。

有关后渗透的更多信息,请参阅:

二维码
扫一扫在手机端查看

本文链接:https://by928.com/5416.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线