當前位置:
首頁 > 最新 > 2018強網杯線上賽Web部分思路心得及writeup分享

2018強網杯線上賽Web部分思路心得及writeup分享

強網杯線下賽也結束了,我們團隊也取得了不錯的成績。比起結果,我更看重的是和小夥伴一起奮鬥的過程。夢想很遠,還好一路有你。在此記錄下一起奮鬥過的足跡。

0x01 web簽到

看到前兩個判斷很容易聯想到數組的MD5的特性,用直接過

第三個判段:將兩個hash碰撞相等的文件轉成16進位

param1=%0e%30%65%61%55%9a%a7%87%d0%0b%c6%f7%0b%bd%fe%34%04%cf%03%65%9e%70%4f%85%34%c0%0f%fb%65%9c%4c%87%40%cc%94%2f%eb%2d%a1%15%a3%f4%15%5c%bb%86%07%49%73%86%65%6d%7d%1f%34%a4%20%59%d7%8f%5a%8d%d1%ef?m2=%0e%30%65%61%55%9a%a7%87%d0%0b%c6%f7%0b%bd%fe%34%04%cf%03%65%9e%74%4f%85%34%c0%0f%fb%65%9c%4c%87%40%cc%94%2f%eb%2d%a1%15%a3%f4%15%dc%bb%86%07%49%73%86%65%6d%7d%1f%34%a4%20%59%d7%8f%5a%8d%d1%ef


地址:http://39.107.33.96:20000

註冊賬號登錄成功後會有一個發文章和提交反饋的地方存在XSS,但是並不能打到COOKIE。官方提示了PhantomJS/2.1.1所以想到了在安全客看到的這個

《從PhantomJS圖片渲染中的XSS漏洞到SSRF/本地文件讀取漏洞》,參考鏈接:

https://www.anquanke.com/post/id/86371。本地復現成功,線上不行,發現windows.domain不同,不過還是學到了點姿勢。後來嘗試了一陣後發現其實這個地方只是在phantomjs中載入,不是登錄狀態,容器還會直接打開我們提交的連接,如果下存在XSS應該就可以拿到COOKIE

參考利用RPO(Relative Path Overwrite)相對路徑覆蓋技術

我們先發布一篇文章

然後提交該鏈接

其中驗證碼可通過查錶快速獲取,然後成功獲取COOKIE

這個顯然是提示真正的COOKIE在路徑下,構造代碼

d=document;f=d.createElement("iframe");f.src="/QWB_fl4g/QWB/";f.onload=function();d.body.appendChild(f};d.body.appendChild(f));"

成功獲取該頁面下的COOKIE

從而成功獲取flag


註冊登陸後發現,首頁會從中取出值做二次查詢,因此,在註冊時候猜測不為存入資料庫。註冊新賬號,為的時候,查詢不出相同年齡的人,因此二次注入成立。腳本如下

結果如下


開始在想jackson,shior的洞都無果,後面在此人github主頁上驚奇的發現有個phrack-docker項目:https://github.com/zjlywjh001/phrackCTF-Team-Docker。Dockerfile上有postgresql的口令和密碼並在pg_hba.conf中發現psql允許遠程訪問。

參考postgresql_getshell

遠程登錄一波操作後無果,但是udf能行通。

結果

PS:附上Orange大牛的反序列化解法

http://blog.orange.tw/2018/03/pwn-ctf-platform-with-java-jrmp-gadget.html

通過代碼審計很容易發現註冊處email存在sql注入

直接通過sqlmap構造,使用使sqlmap識別正確頁面

#py.txt

POST /register HTTP/1.1Host: 39.107.32.29:20000Content-Length: 212Cache-Control: max-age=0Origin: http://39.107.32.29:20000Upgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8Referer: http://39.107.32.29:20000/registerAccept-Language: en,zh-CN;q=0.9,zh;q=0.8,zh-TW;q=0.7Cookie: session=de32a41b-54fa-4b6f-9c86-df6848cc8c29Connection: close

csrf_token=ImJmZDk1NTZiZDNjZTczOTllMGE5Y2UxMTQ3NDMxN2Y0NGYwNDZmMGYi.DZevVA.Tub8TPOi3FfJsylw3Ct-VLsd_CY&username=testfuckfuck&email=fuckfuck123"or (1=1*)#%40qq.com&password=fuckfuck&password2=fuckfuck&submit=Register

#End py.txt

結果:


通過審計發現處讀取緩存存在反序列化漏洞

其中,key是通過預設的和組合在一起計算md5得到,已知,可控,可以輕易構造通過第一步中的SQL注入,可以在緩存目錄下寫入自己構造的pickle序列化數據,通過構造來反序列化執行惡意代碼。

pickle反序列化時存在一定過濾:

但由於禁用的方法不全,可以繞過,例如:

即可下載遠程代碼執行。

反彈shell後,找到flag:


題目信息

There is a world of 3pigs~ (web+pwn)

hint:unsorted bin attack by using top chunk

hint2:SSTI in login again

解題過程查看源碼獲得提示

知道考的可能是時序攻擊,密碼長度為10位

通過測試,發現前面的密碼正確的時候,用時最長

時序攻擊大概可以這麼理解,用於驗證密碼的函數一位一位判斷密碼,錯誤就立即返回,只有前面正確才會判斷後面字元,所以前面字元正確的越多所需要的時間越長。

寫腳本進行爆破

得到密碼為

題目放出的時間太靠後了,大部分精力都放在wechat上了


題目信息

https://www.qiangwangbei.com/wechat/wechat_7yu89io0.jpg

Please follow our WeChat Official Account (web+pwn)

hint:sqli in fromUser

hint2 : sqli1 not mysql not blind , sqli2 in message and you know anything in blacklist

hint3 : sqli2:table is adminuserhint4:if you are admin, you can read local file from ssrf

解題過程:

然而一切並沒有想像的那麼簡單,出來的信息和可控的輸入查詢根本就是對兩張表的兩個獨立查詢,start_time的內容確實可以回顯,但是限制了輸入位只能32位,並且不能構造聯合查詢語句,想要通過回顯跨表或者跨庫注出更多信息幾乎不可能,在查詢過程中伺服器幾度崩潰,一番嘗試後發現了一些奇奇怪怪的東西:

隨後看到HINT提示sql注入的點在fromUser上,聯想到微信公眾號的介面似乎有這個參數,於是使用微信公眾平台介面調試工具https://mp.weixin.qq.com/debug向自己的伺服器提交請求,獲取發送的請求包,並模擬微信向比賽伺服器發送請求。

可以看出,這是一個insert語句的SQL注入,輸出點在,嘗試 返回 3.11.0,可知資料庫為SQLite。嘗試子查詢得到note表中id為999的文章內容為:

並沒有外部解析,按照之前的思路使用公眾號的第三個介面嘗試SSRF,然而回顯告訴我們內網也訪問不到這個域名。接著嘗試了修改host、反代、cname指向等等各種方式都訪問不了這個頁面,局面一度變得十分尷尬。

該域名直接訪問或者通過內網也都不可達,猜測伺服器配置限制只能域名訪問,通過微信上的ssrf功能向我們的vps發送請求,可以獲得微信伺服器的ip地址為。通過綁定本地(常用作繞過cdn等雲waf直接訪問目標主機),將指向便能正常訪問,訪問得到頁面截圖如下:

該網站的前台存在3個頁面,分別是登陸(admin_login.php)、留言(leave_message.php)和找回密碼(forgetpassword.php)

在頁面的變數中存在SQLi,然而這個地方提交回顯只有兩種結果,一種是Success,不論SQL語法是否正確;另一種是Hacker,代表此次請求被waf攔截了。因此要SQL注入只能用

經過一些列的Fuzz 得到了以下信息:

message變數不能存在不可見字元、x20、x09、反引號、換行符和注釋符

SLEEP函數不可傳字元串和數字常量,但可以傳函數(PS:經過幾次測試可以通過SLEEP(UNHEX(HEX(VERSION()))) 的形式延時版本號實數5秒多)

SELECT 和 FROM 後面不能接左括弧。

此題難點在於SQL中不能通過常用分隔符分離SQL語句的關鍵字,然而在盲注查詢的時候,結構是必出現的,因此經過大量測試得知通過下面的方式可以查詢到adminuser表中的信息,並繞過WAF:

其中@x:= 意思是變數,根據文檔意思是兼容ODBC的一種寫法。

完整的變數的payload為

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雙螺旋Sec團隊 的精彩文章:

TAG:雙螺旋Sec團隊 |