微信公众号:渊龙Sec安全团队
为国之安全而奋斗,为信息安全而发声!
如有问题或建议,请在公众号后台留言
如果你觉得本文对你有帮助,欢迎在文章底部赞赏我们
越来越卷,受苦的只有打工人,Hw只会吃力不讨好
为了不必要的,本文会打码很严重,各位师傅见谅
欢迎各位师傅来关注我个人的公众号哈哈~
目标系统:Windows Server 2016
中间件:IIS10 / Asp.Net4.0
目标IP:55.55.55.55(无法透露真实IP,此为假设)
提供的靶标为: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相关的上传,放弃
不得已,转到省直的目标找到了几个上传模块,发现上传接口都是同一个
在上面的省直的系统中找到几个上传模块,如下:
1假设文件上传为:http://55.55.55.55:6611/aa/bb/up1oad
2文件上传路径为:http:/55.55.55.55:6611/image,/2023/test.png
首选别名绕过,发现目标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
目标这个系统框架,在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中一天是什么概念!)
这里就测试其余后缀是否可以绕过
一边请教,一边百度,和好朋友一起终于可以上传 .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()%>
输出当前主机时间,发现成功了!
但是测试别的内容仍是无法上传文件
都到了这里,怎么可能放弃呢?
关键就在:Content-Encoding:
百度了一下 Content-Encoding
绕过文件上传,发现很多文章
经过测试发现只要 Accept-Encoding:
和 Content-Encoding:
编码相同即可绕过
解释一下:
Accept-Encoding 设置在请求头当中,会告诉服务器,我可以接受哪种编码压缩
Content-Encoding 设置在响应头中,会告诉客户端,我用的是哪种编码压缩,但也可以放在Header头上
内容检测绕过:
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进行后渗透
提权的过程耗时1天,你问我为啥提权(普通用户100分,管理员可能5000分)
老思路:利用反射去提权,上线CobaltStrike,查看系统补丁状态
先用了 printspoofer
反射进行提权,发现无法提权
尝试过以下方法:
printspoofer
SweetPotato
PrintNotifyPotato
DCOMPotato
SharpEfsPotato
LocalPotato
PetitPotato
发现反射都没成功
注:之前都是利用CobaltStrike反射去绕过,但在搜索文章过程中,发现Windows Server 2016对反射进行了一些补丁,导致之前的反射方式会被查杀
最终用的DCOMPotato成功提权,项目地址如下:
1https://github.com/zcgonvh/DCOMPotato
当然需要免杀了~ 免杀哪里来的,当然要找好兄弟!
总共耗时2天多,不知道换了多少次IP地址
不知道为啥现在写起来有点索然无味,感觉当时好笨
希望各位师傅能从我这里学到一些文件上传ByPass的思路
我是G0mini,我在渊龙Sec安全团队等你
微信公众号:渊龙Sec安全团队
欢迎关注我,一起学习,一起进步~
本篇文章为团队成员原创文章,请不要擅自盗取!