unctf2021部分wp
1,rejunk
下載程序並運行,隨機輸入幾個數提示length error,拖進idapro找到main函數后f5查看偽代碼,根據題目提示垃圾代碼混淆與逆向異或運算可觀察得到關鍵的兩行
我們可以看到幾個字符串,這就是關鍵語句,分析容易得知將v9(從0開始循環的數與flag字符串中每個字符加上2的值異或運算得到了變換后的字符串),根據異或運算的性質開始寫腳本
運行得到flag如下所示
(感謝坤哥對解此題的大力幫助)
2, ezlogin
下載后打開是這樣的
程序提示是程序流程識別,算法逆向,還是ida主函數看偽代碼
看了看流程也不是特別懂,但好像login那里有東西,於是我login了一波,觀察代碼貌似輸入一個數就行了?(我也不知道為啥就爆出來了flag)如圖
3, easy_rsa
下載后得到一個名字為easyrsa的文件,加上后綴txt將它以文本打開可知它是已知qpce求密文的rsa問題
直接寫腳本即可
可以跑出來
165720758591616896381926092066231533379319438670959799283552583224184682787196461195645這一串串數字,然后用libnum將數字轉成字符串可得flag
Flag:UNCTF{Th1s_1s_f1ag_f0r_unctf_2021!!}
4, 分析badusb流量
下載得到一堆數字,四個一組,觀察發現前兩列只有00和20
題目提示為鍵盤映射,不難知道實質就是usb流量分析中鍵盤流量分析的一種,查閱資料得知如下對應方式
根據flag的形式以及花括號的特殊性,我們不難判斷20開頭的是shift之后的,00就是普通輸入的,找到對應關系flag就容易獲得了,最后得到UNCTF{Y0u-Are-very-n1ce}
5, fuzz_md5
進題目閱讀代碼
我分別查詢了php中preg_replace和substr函數的作用如下
其中preg replace函數在本題中的作用是過濾掉unctf這個字符串,而substr的意思則是截取pass3的前五位。逐行分析代碼邏輯如下:
首先get傳參user,post傳參pass,pass2是pass的md5值,pass3是pass2的前五位,之后將user中unctf這個字符串過濾掉得a。如果同時滿足a為unctf且pass3是66666的話就可以爆出flag。這就是程序的基本邏輯
那么,對於user,它過濾掉了一遍unctf,我們直接用嵌套雙寫繞過,令初始的user為uncunctftf即可。那么對於pass,我們已知他經過md5加密后的前五位是66666,寫腳本爆破即可(理論上來說md5不存在逆向解,但可根據一定關系映射進行爆破)
運行后得到的值隨便一個就可以作為pass
最后我們進行傳參即可,post傳pass,get傳user,傳遞完畢可直接得到結果
6, 探秘中世紀城堡
下載附件看到
根據提示,推測先凱撒,再base64,最后柵欄密碼。於是開始嘗試,發現凱撒偏移為5時剛好可以base64解密
在根據題目雙重阻攔推測雙重柵欄,設置柵欄密碼偏移為2得到
這就是flag