本次SWPUCTF開賽了,一共做了5個misc+2個web,RE和Android沒時間看= =,pwn完全不會,果然又是和去年一樣划水。題目都出的很不錯,做題的時候思路其實也容易想到,剩下幾個web有思路但是最后還是沒有做出來。
簡單寫個WP吧。
本次比賽的部分文件我已保存上傳至xxx。懶得上傳,需要的話找我拿吧。
一、MISC
神奇的二維碼
下載之后是一個二維碼,直接掃描后是一個fakeflag,直接binwalk先掃描一波
可以發現里面有幾個rar,將其分離出來,其中兩個rar解出來都是沒有東西的,只有最后那個flag.doc下面的一大串字符,用base64解密發現可以轉換。
那么就寫一個簡單的Py腳本吧= =,當然也可以手動一直轉換。

import base64 with open('./1.txt') as f: s = f.readlines()[0].strip() try: while True: s = base64.b64decode(s) except: print(s)
然后加上swpuctf{}提交就可以了。這道題就算是簽到題吧。
漂流的馬里奧
打開直接運行會在所在目錄生成一個1.txt,內容如下
還是繼續使用binwalk分離內部文件,其下面有個50000.rar,打開后發現也就是1.txt的壓縮包,我們使用010 editor查看一下16進制源碼
發現其比普通的rar文件多了CTM部分和STM部分,搜索一下發現CMT就是壓縮包的注釋部分,那么STM是什么呢,同樣我還發現STM部分包含flag.txt這肯定就是隱藏的flagle,在google上搜索RAR STM相關關鍵字后我找到了這樣一篇博文,大概就滿足我們所說的隱藏信息。
再繼續搜索相關NTFS流的資料后我找到了獲取這個數據流的方法。如下,更多關於NTFS流的信息可以自行再搜索相關資料。
偉大的偵探
從這個標題就知道和福爾摩斯相關,打開密碼.txt后如下
根據提示編碼錯誤,我們使用010 editor轉換編碼,最后發現密碼如下
然后misc文件夾下的內容如下
果然還是和福爾摩斯有關的,這也就是歸來記中的跳舞的小人,但是這只是簡單的按照書中的碼表進行轉換,和其真正的解密方法(根據出現頻率解密)不相同,最后對照網上的碼表得到flag
swpuctf{iloveholmesandwllm}。
你有沒有好好看網課
打開有flag2.rar,和flag3.rar,都有加密,經檢測不是偽加密,那就爆破吧,flag3是可以被爆破的,然后里面就是我們人見人愛的影流之主了,flag.doc內容如下,
根據題目的提示,我們去看一下這些數字的幀數。
這兩幀的燈位置都有隱藏信息,提取出來如下
..... ../... ./... ./... ../
dXBfdXBfdXA=
第二行直接可以base64解密,第一行最開始猜測是莫斯加密,可是對不上莫斯的碼表,最后一個個嘗試之后發現其是敲擊碼,得到密碼
wllmup_up_up,用這個密碼可以打開flag2.rar。然后010 editor打開就可以發現在末尾的flag了。
Network
下載后發現里面只有一個txt文檔,而且里面只有四個數字
這道題比較誤導人的地方就是,它的標題叫做Network,剛好這四個數字又對應了四個網關地址,於是方向錯誤,最后對比其二進制才發現端倪,這四個數字轉成8位二進制后,只有最高兩位二進制不同,我們嘗試寫一個腳本將其最高兩位提取出來,並且4個一組轉換位ASCII。發現寫出來的16進制數開頭是50 4B,應該也就是zip了,腳本如下

fp = open('t.txt','r') a = fp.readlines() p = [] for i in a: p.append(int(i)) s = '' for i in p: if i == 63: a = '00' elif i == 127: a = '01' elif i == 191: a = '10' elif i == 255: a = '11' s += a import binascii flag = '' for i in range(0,len(s),8): flag += chr(int(s[i:i+8],2)) flag = binascii.unhexlify(flag) wp = open('ans.zip','wb') wp.write(flag) wp.close()
打開后發現需要密碼,010查看發現全局加密和局部加密位不一,也就是偽加密了,改09 為 00后打開
然后又是一大串的字符,不說了上base64,解密得到flag
flag{189ff9e5b743ae95f940a6ccc6dbd9ab}
easy_web
打開如下,一個登陸注冊界面,隨意注冊個賬號。
可以發現可以申請廣告。
然后發現其是可以實現XSS的,但是這題管理員並不上線,所以XSS沒有什么用
后面經過了一些測試發現之后,廣告詳情的SQL是通過廣告名進行搜索的,所以這里可能實現二次注入,猜測SQL為(做完題后再猜測的)
select xx from xxx where title='xxx' limit 0,1
然后嘗試之后發現過濾了or,sql,join,空格,#,-等一些字符,期間最頭疼的就是過濾了or,那么order和information_schema都不能使用了,查詢字段我們還可以用union select,但是咋查表呢,最后我是自己手動猜出來的,數據庫為web1,下面有users表,里面有name和pass字段,admin的pass就是最后的flag,構造如下廣告
沒錯,有22列,然后點擊廣告詳情就可以得到flag的md5了,根據題目說明使用somd5解密即可得到flag
這題的很多細節,比如查列數以及如何構造sql就不再說了,這里就只講一下最后的payload實現。
簡單的Python
比賽結束了 = =題目下線了,沒法復現了。
emmm這題不知道是不是出題人失誤啊,猜了個redis密碼為password竟然直接連接上了。
然后就用了一波別人的session獲得了flag...
WEB3弄出了secretkey了,下一步應該是個ssti了,但是周六周天都有事= =沒有做了。