2019年第十二届全国大学生信息安全实践创新赛线上赛Writeup
本文章來自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html? 未經允許不得轉載!
1.MISC-簽到
下載附件后,看到readme.txt打開后提示會有攝像頭,一開始丟winhex,ida里啥也沒發現,于是就選擇直接打開qiandao.exe,當自己出現在鏡頭里時,會有個綠框,等了很久什么也沒發現,于是回到題目是發現三人行必有flag,搜索了一下這個軟件的xml文件的文件名,發現是人臉識別,結合想到,于是找了個三人照片,發現flag。
?
2.Crypto-puzzles
下載附件是一個html,打開后發現flag格式和題目。
a 1、2、3、4直接計算器計算:
?
得到a1=4006,a2=3053,a3=2503,a4=2560
Part1看了半天,常規找規律等差等比都不是,用二進制將三個已知的表示出來也沒發現東西,去查詢數字性質
?
?
?
因為前兩個有一個未知,直接查后兩個,發現都是質數,應該不會那么巧,應該是質數的等差數列,且相差37,于是前推37個質數,得到26365399,然后利用第一個質數查詢
發現剛好4個數都是相差37個。
?
Part2
?
?
可以看到有四部分組成,分別求解:
?
?
4*lim(x->2) (x^2-3x+2)/(x^2-4)
=4*lim(x->2) (x-1)(x-2)/[(x-2)(x+2)]
=4*lim(x->2) (x-1)/(x+2)
=1
?
?
3*∫(0->ln2) e^x.(4+e^x)^2 dx
=3*∫(0->ln2) (4+e^x)^2 d(4+e^x)
=3*(1/3)[(4+e^x)^3]|(0->ln2)
=3*(1/3)( 6^3 - 5^3)
=91
?
?
2*∫(1->e) (1+5lnx)/x dx
=2*∫(1->e) (1/x) dx +5∫(1->e) (lnx/x) dx
=2*[lnx]|(1->e)+5∫(1->e)*lnx dlnx
=(1 +(5/2)[(lnx)^2]|(1->e))*2
=7
?
?
∫(0->π/2) xsinx dx
=-∫(0->π/2) xdcosx
=-[xcosx]|(0->π/2) +∫(0->π/2) cosx dx
=0 +[sinx]|(0->π/2)
=1
求解出來后相加*77,(91+1+7+1)*77=7700,就是part2
Part3
題目如下:
?
?????? 看到題目,網上找到相關公式如下:
?
代入
?
代入數值解方程 得到Part3為18640
Part4
504*2π/3=p*π/120
120*504*2π=3pπ
P=40*504*2
Part4=40320
最后合并
?
3.Web-JustSoso
下發后第一時間打開F12審查元素
?
發現提示,然后訪問file=index.php 訪問hint.php都無法顯示內容,然后想到了PHP協議
index.php?file=php://filter/read=convert.base64-encode/resource=./index.php
發現成功讀取了源碼的base64,
然后接著讀hint.php的并分別進行解密,得到index.php
Hint.php
?
?
看見Class就知道應該是考察反序列話,發現無法直接new Flag使用,還得把他加到handle中去執行,于是開始構造如下序列,
?
?
然后審查index.php發現有個payload會被反序列,而且必須file=hint.php才行直接放到payload一起提交
?
?
但是提交上面生成的序列化會被攔截,頁面顯示stop hacking,被正則檢測到了。
后來根據匹配中使用的$_SERVER[‘REQUEST_URI’],通過網上查找相關資料,才知道這個的返回值,但是還是不知道如何繞過,根據這個語句在網上找到某大佬博客寫到,可以使用///來進行繞過,于是成功,但是沒有返回flag。
這時候發現有個隨機數的問題
但是沒有想到辦法繞過,之前沒有遇到過,接著搜索相關,知道可以使用序列化引用,讓這兩個值相等。
?
?
于是構造
?
?
返回如下序列化去提交
?
依舊沒有返回flag。。。這時候有些泄氣,后來在查php反序列話的時候,突然看到代碼中的wakeup,之前一直沒注意,但是在那篇文章講了當序列化字符串中,如果表示對象屬性個數的值大于真實的屬性個數時就會跳過__wakeup的執行。于是把上圖中的payload的handle改成了2,為什么構造的字符串為“%00Handle%00handle”呢?在那個大佬博客中看到序列化時生成的序列化字符串中類名前后本來就會有0×00,url編碼下為%00,所以要添加。使用///可以繞過uri的過濾,于是構造
///index.php?file=hint.php&payload=O:6:"Handle":2:{s:14:"%00Handle%00handle";O:4:"Flag":3:{s:4:"file";s:8:"flag.php";s:5:"token";N;s:10:"token_flag";R:4;}}
然后使用上面的payload得到
?
本文章來自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html? 未經允許不得轉載!
1.saleae
首先看到題目名saleae,搜索得知是一個邏輯分析工具,下載安裝并學習如何使用。然后下載logicdata文件,用saleae打開,發現有4個頻道。
根據題目提示,搜索AoiSystem,發現這個網頁標題中提到SPI。SPI協議正好使用了芯片上的4個引腳,猜測logicdata文件應該用SPI協議進行分析。
?
觀察波形,發現channel0是具有周期性的方波,應為時鐘信號。
?
?
channel1沒有信號,應為主機輸入線。
channel2的波形不具有規律性,應為承載主機輸出數據的MISO線。
?
?
channel3在channel0和channel2有信號時是低電平,其余時間為高電平,應為使能信號。
?
?
使用saleae進行SPI分析。
?
?
分析數據處出現flag。
?
?
導出數據并用文本編輯器處理,得到flag。
2.24c
依題意,本題同樣使用saleae進行分析。搜索題名24c得知是基于IIC協議的EEPROM。
?
?
使用saleae進行I2C分析。
?
?
得到flag。
?
?
導出,得到以下文本:
| Time [s],Packet ID,Address,Data,Read/Write,ACK/NAK 0.843872000000000,0,'160' (0xA0),' ' (0x20),Write,ACK 0.844038500000000,0,'160' (0xA0),f (0x66),Write,ACK 0.844205000000000,0,'160' (0xA0),1 (0x31),Write,ACK 0.844371000000000,0,'160' (0xA0),6 (0x36),Write,ACK 0.844537500000000,0,'160' (0xA0),3 (0x33),Write,ACK 0.844704000000000,0,'160' (0xA0),b (0x62),Write,ACK 0.844870500000000,0,'160' (0xA0),d (0x64),Write,ACK 0.845036500000000,0,'160' (0xA0),f (0x66),Write,ACK 0.845203000000000,0,'160' (0xA0),4 (0x34),Write,ACK 0.845369500000000,0,'160' (0xA0),e (0x65),Write,ACK 0.845536000000000,0,'160' (0xA0),} (0x7D),Write,ACK 0.845702500000000,0,'160' (0xA0),'0' (0x00),Write,ACK 0.945962500000000,1,'160' (0xA0),'0' (0x00),Write,ACK 0.946318000000000,2,'160' (0xA0),f (0x66),Read,ACK 0.946481500000000,2,'160' (0xA0),l (0x6C),Read,ACK 0.946645000000000,2,'160' (0xA0),a (0x61),Read,ACK 0.946808500000000,2,'160' (0xA0),g (0x67),Read,ACK 0.946972000000000,2,'160' (0xA0),{ (0x7B),Read,ACK 0.947135500000000,2,'160' (0xA0),c (0x63),Read,ACK 0.947299500000000,2,'160' (0xA0),4 (0x34),Read,ACK 0.947463000000000,2,'160' (0xA0),6 (0x36),Read,ACK 0.947626500000000,2,'160' (0xA0),d (0x64),Read,ACK 0.947790000000000,2,'160' (0xA0),9 (0x39),Read,ACK 0.947953500000000,2,'160' (0xA0),e (0x65),Read,ACK 0.948117500000000,2,'160' (0xA0),1 (0x31),Read,ACK 0.948281000000000,2,'160' (0xA0),0 (0x30),Read,ACK 0.948444500000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.948608000000000,2,'160' (0xA0),e (0x65),Read,ACK 0.948771500000000,2,'160' (0xA0),9 (0x39),Read,ACK 0.948935500000000,2,'160' (0xA0),b (0x62),Read,ACK 0.949099000000000,2,'160' (0xA0),5 (0x35),Read,ACK 0.949262500000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.949426000000000,2,'160' (0xA0),4 (0x34),Read,ACK 0.949589500000000,2,'160' (0xA0),d (0x64),Read,ACK 0.949753000000000,2,'160' (0xA0),9 (0x39),Read,ACK 0.949917000000000,2,'160' (0xA0),0 (0x30),Read,ACK 0.950080500000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.950244000000000,2,'160' (0xA0),a (0x61),Read,ACK 0.950407500000000,2,'160' (0xA0),8 (0x38),Read,ACK 0.950571000000000,2,'160' (0xA0),8 (0x38),Read,ACK 0.950734500000000,2,'160' (0xA0),3 (0x33),Read,ACK 0.950898000000000,2,'160' (0xA0),- (0x2D),Read,ACK 0.951061500000000,2,'160' (0xA0),4 (0x34),Read,ACK 0.951225000000000,2,'160' (0xA0),1 (0x31),Read,ACK 0.951388500000000,2,'160' (0xA0),c (0x63),Read,NAK 5.946647000000000,3,'160' (0xA0),\t (0x09),Write,ACK 5.946813500000000,3,'160' (0xA0),a (0x61),Write,ACK 5.946980000000000,3,'160' (0xA0),c (0x63),Write,ACK |
分析可知,通過I2C總線執行了三輪操作:
| 寫' 'f163bdf4e} 讀flag{c46d9e10-e9b5-4d90-a883-41c 寫\t ac |
根據I2C操作的相關知識,讀操作讀到的內容應為芯片上第160頁處原本已有的內容,而寫入操作則是在第160頁處若干偏移量的位置覆蓋寫入。第一次寫的偏移量顯示字符為空格,轉為十進制ASCII碼即為32,注意到讀部分讀取到c后為NAK且這部分正好有32個字符,因此第一次寫是正好接在讀到這部分的后面。于是得到flag{c46d9e10-e9b5-4d90-a883-41cf163bdf4e}。再看第三次寫,制表符對應的十進制ASCII碼為9,即在字符串下標9處用ac覆蓋,得到flag。
本文章來自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html? 未經允許不得轉載!
3.usbasp
根據題意,這題應該和第一天的《saleae》一樣使用saleae軟件進行分析,且仍然為AoiSystem設備,仍應用SPI協議分析。
打開logicdata文件后首先觀察波形,顯然channel3應為使能信號。
?
?
注意到題干中有“一鍵暴打出題人”,猜測MOSI、MISO、時鐘、使能4條線可能直接按0、1、2、3順序即可,按默認設置很符合“一鍵”的說法。
?
?
直接按默認設置運行,未能得到結果。
?
?
再讀題目,又注意到“升級固件”,猜測協議設置要修改。翻出第一天的saleae.logicdata進行對比,使能信號最可疑。
?
?
改它丫的!
?
?
運行看到flag。
?
?
導出,得到flag。
?
1.easyGo:
此題拿到手,拖進ida發現是內聯編譯的,函數名稱都沒了,遂從程序找入口,運行程序
出現字符串Try again,在ida中搜索,根據交叉引用來到如下圖處,大概可以看出輸入和輸出的地方
?
?
嘗試點了函數附近的變量,,,,flag竟然以明文在內存中存放,用腳本提取即得到flag
?
?
?
2.Bbvvmm:
比賽一開始就看這道題,杠了整整一天,經驗少,走了很多彎路,下面講思路:
拖入ida,動態調試各個流程跟進弄清函數作用,剛開始沒注意提示,盲目的在加密函數里花了大量時間,當看到提示后,立即搜索國密加密算法,找到SM4算法,下載源碼,發現和題目的流程一模一樣,那就好辦了,下圖為分析出來的一些函數:
可以看到這個函數把username的ascii拆開再用ascii保存
?
加密的結果經過base64編碼,
?
?
解開base64:EF468DBAF985B2509C9E200CF3525AB6
用網上代碼解密(密鑰就在題目主函數里),然后合成ascii:
?
?
得到:6 2 6 1 6 4 7 2 6 5 7 2 3 1 3 2
即badrer12
我以為這就完了,想著password隨便輸
噩夢才剛剛開始:
另一個條件根據題目名看出和vm相關,對這一塊了解不多,只能慢慢分析,分析出剛開是初始化函數的結構,
?
?
?
分析函數跳轉過程,嘗試分析op對應函數的用途,然后就在掙扎中分析了一下午,難度太大,很絕望。
然后就放棄分析流程,開始打算找規律,將ida棧視圖調整為虛擬指令的sp(很容易找),把斷點下在call上,初始輸入的password為123456
隨著程序運行,在棧視圖可以跟蹤到這幾個數的ascii,發現
?
?
31->49,32->4B,33->49,34->4F,35->49,36->4B,判斷點的值則是對應值相加的結果
規律并不明顯,嘗試把輸入和對應的數字異或,發現其在棧上出現了,而且每個都出現了;
31xor49 = 78, 32xor4B = 79,即找到的對應的數字是有78和31異或得到的,其余同理,為了讓判斷點的值為0,可輸入78,79等,這樣和棧中的數異或依然為0,即78,79等代表的字符就為正確密碼。即xyz{|}
?
?
所有信息都在棧中,可以很容易看出規律
拿到密碼本地測試成功,但nc卻不行,排除題目原因,只能是疏忽了什么,看了下代碼,username是用scanf以%9s讀入的,而輸入username只有8個字符,估計是第9個字符沒讀上,遂用pwntools連接,在username后添\x00,成功得到flag
?
?本文章來自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html??未經允許不得轉載!
轉載于:https://www.cnblogs.com/iAmSoScArEd/p/10780242.html
總結
以上是生活随笔為你收集整理的2019年第十二届全国大学生信息安全实践创新赛线上赛Writeup的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ZOJ 4014] Pretty Ma
- 下一篇: 掌握这些PPT技巧,让你的工作效率提高1