记某次省HW:步步艰辛的打点入口
2023-6-30 12:14:45 Author: mp.weixin.qq.com(查看原文) 阅读量:5 收藏

微信公众号:渊龙Sec安全团队
为国之安全而奋斗,为信息安全而发声!
如有问题或建议,请在公众号后台留言
如果你觉得本文对你有帮助,欢迎在文章底部赞赏我们

0# 前言

越来越卷,受苦的只有打工人,Hw只会吃力不讨好
为了不必要的,本文会打码很严重,各位师傅见谅

欢迎各位师傅来关注我个人的公众号哈哈~ 

1# 环境介绍

  • 目标系统:Windows Server 2016

  • 中间件:IIS10 / Asp.Net4.0

  • 目标IP:55.55.55.55(无法透露真实IP,此为假设)

2# 入口点

提供的靶标为:http://55.55.55.55:8111/
是个大官网,找不到什么可利用的点,而且IP封的太快了

于是开始端口扫描,经过好几个IP的分段扫描,发现了几个端口(因为IP封禁太快,这里端口分开跑一下),发现了以下资产:

  • http://55.55.55.55:8411/   (地市的系统)

  • http://55.55.55.55:6611/   (省直的系统)

细看这两个都是同一个框架的,测试发现两个都存在弱口令admin/123456
同时发现地市的资产对IP封禁很少,省直的资产封IP嘎嘎快

于是首选地市的资产,发现后台没有上传点,js分析也没有发现upload相关的上传,放弃
不得已,转到省直的目标找到了几个上传模块,发现上传接口都是同一个

3# 文件上传点

在上面的省直的系统中找到几个上传模块,如下:

1假设文件上传为:http://55.55.55.55:6611/aa/bb/up1oad
2文件上传路径为:http:/55.55.55.55:6611/image,/2023/test.png

4# 文件上传尝试绕过

4.1 后缀绕过

首选别名绕过,发现目标asmx后缀名是可以上传的

发现访问进行了URL跳转:

1http://55.55.55.55:6611/500.html?=/image/2023/test.asMx

我的第一反应是,这是linux的吗?aspx能在linux上跑吗?
还特意去google-一下,发现linux应该是可以跑aspx的

这里也利用了png改成pnG的方式,但是目标报错(假设是linux先测试一波)
既然是假设目标系统为Linux,第二次上传了asmx

发现访问也进行了URL跳转,如下:

1http://55.55.55.55:6611/500.html?=/image/2023/test.png.asmx

4.2 补充说明

目标这个系统框架,在2020年HW的时候被文件上传绕过一次了:

当时的文件上传绕过方式如下:

指定是改了文件上传的校验,又想到自己曾经遇到过这种情况,可以试试看
当时访问也是这种500,不过当时那个是Liux系统跑的jsp(利用 ; 可以绕过正常访问)

这里利用 ; 也无法正常访问,到这里就不用考虑系统,只需要考虑后缀名即可

又想到有一次文件上传绕过,当时无法访问是因为文件后缀和文件内容不匹配,比如:a.asp 内容需要全部是asp内容

详细可以参考一下我之前写的:
https://www.t00ls.com/thread-62556-1-1.html
或者
https://www.freebuf.com/articles/web/270385.html

假设asmx可以成功,接下来就是考虑内容检测的问题了
内容检测,不知道是什么检测机制,对一些字符的拼接有拦截,以下是asmx的头部测试:

asmx的马子,本身是不会asp的,对免杀陷入沉思
不停的搜文章,发现所有的文章大多数都是同一个师傅(Ivan1ee)写的
然后发现有这个师傅(Ivan1ee)的好友,Ivanlee师傅有问必答我爱死了

访问还是无法访问,到这里就感觉可能不是免杀的问题,还能是后缀问题,(该退就退,不能一条路写到黑,其实是已经耗时一天了,Hw中一天是什么概念!)

这里就测试其余后缀是否可以绕过

4.3 继续绕过后缀

一边请教,一边百度,和好朋友一起终于可以上传 .asp
不同fuZZ,耗时一晚上(应该还能简化,这里直接能用,没有再详细追究)

1Content-Disposition: form-datA*;;;;;;;;;;;;;;name="file";;;;;;;;;;;;;;;;;;;;;
2filename1123="1.aspx";$20 filename="test.asp"
3Content-Type: multipart/form-data; boundary= ---------------------------

备注:没有细究是否可以简化,成功上传asp

主要是能访问上传的 .asp 文件!

要成了,要成了!测试上传helloworld

发现gg了,内容检测还需要绕过,于是就慢慢测试内容,发现和上面的检测一样
试过了各种编码免杀,发现目标的WAF有点难搞
(这里省略测试了N次,差不多花了一上午的时间

这里coffee123456表哥提示可以试试执行时间命令:<%=now()%> 输出当前主机时间,发现成功了!

但是测试别的内容仍是无法上传文件

4.4 最终文件上传内容检测绕过

都到了这里,怎么可能放弃呢?

关键就在:Content-Encoding:
百度了一下 Content-Encoding 绕过文件上传,发现很多文章

经过测试发现只要 Accept-Encoding:Content-Encoding: 编码相同即可绕过

解释一下:
Accept-Encoding 设置在请求头当中,会告诉服务器,我可以接受哪种编码压缩
Content-Encoding 设置在响应头中,会告诉客户端,我用的是哪种编码压缩,但也可以放在Header头上

4.5 最终绕过文件上传的方式

内容检测绕过:

1Content-Encoding:

后缀绕过Fuzz:

1Content-Type: multipart/form-data; boundary= ---------------------------
2Content-Disposition: form-datA*;;;;;;;;;;;;;;name="file";;;;;;;;;;;;;;;;;;;;;
3filename1123="1.aspx";$20 filename="test.asp"

最终内容如下:

1Content-Encoding:
2Content-Type: multipart/form-data; boundary= ---------------------------
3Content-Disposition: form-datA*;;;;;;;;;;;;;;name="file";;;;;;;;;;;;;;;;;;;;;
4filename1123="1.aspx";$20 filename="test.asp"

成功上传 .asp 的木马文件

注:asp的权限比较低,后续上传了aspx进行后渗透

5# 提权

提权的过程耗时1天,你问我为啥提权(普通用户100分,管理员可能5000分)

老思路:利用反射去提权,上线CobaltStrike,查看系统补丁状态
先用了 printspoofer 反射进行提权,发现无法提权

尝试过以下方法:

  • printspoofer

  • SweetPotato

  • PrintNotifyPotato

  • DCOMPotato

  • SharpEfsPotato

  • LocalPotato

  • PetitPotato

发现反射都没成功
注:之前都是利用CobaltStrike反射去绕过,但在搜索文章过程中,发现Windows Server 2016对反射进行了一些补丁,导致之前的反射方式会被查杀

最终用的DCOMPotato成功提权,项目地址如下:

1https://github.com/zcgonvh/DCOMPotato

当然需要免杀了~ 免杀哪里来的,当然要找好兄弟!

6# 总结

总共耗时2天多,不知道换了多少次IP地址
不知道为啥现在写起来有点索然无味,感觉当时好笨
希望各位师傅能从我这里学到一些文件上传ByPass的思路

我是G0mini,我在渊龙Sec安全团队等你
微信公众号:渊龙Sec安全团队
欢迎关注我,一起学习,一起进步~
本篇文章为团队成员原创文章,请不要擅自盗取!


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg4NTY0MDg1Mg==&mid=2247485077&idx=1&sn=9634bed1010bbe4d477837d1ba098e52&chksm=cfa49d6ef8d314788be4b7d25d676e62a009b1a325d909b1dfd04865d45cf4175d47ac86490a&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh