?既然這篇文章提到了CTF 我就先來科普一下 ?What is CTF???
賽事介紹:
CTF是一種流行的信息安全競賽形式缅叠,其英文名可直譯為“奪得Flag”孝宗,也可意譯為“奪旗賽”绳锅。其大致流程是飒焦,參賽團(tuán)隊(duì)之間通過進(jìn)行攻防對抗、程序分析等形式悼沿,率先從主辦方給出的比賽環(huán)境中得到一串具有一定格式的字符串或其他內(nèi)容等舔,并將其提交給主辦方,從而奪得分?jǐn)?shù)糟趾。為了方便稱呼慌植,我們把這樣的內(nèi)容稱之為“Flag”甚牲。
賽事起源:
CTF起源于1996年DEFCON全球黑客大會,以代替之前黑客 們通過互相發(fā)起真實(shí)攻擊進(jìn)行技術(shù)比拼的方式蝶柿。發(fā)展至今丈钙,已 經(jīng)成為全球范圍網(wǎng)絡(luò)安全圈流行的競賽形式。
競賽模式:
?CTF競賽模式具體分為以下三類:
? ? ? 一交汤、解題模式(Jeopardy)
在解題模式CTF賽制中雏赦,參賽隊(duì)伍可以通過互聯(lián)網(wǎng)或者現(xiàn)場網(wǎng)絡(luò)參與,這種模式的CTF競賽與ACM編程競賽芙扎、信息學(xué)奧賽比較類似星岗,以解決網(wǎng)絡(luò)安全技術(shù)挑戰(zhàn)題目的分值和時(shí)間來排名,通常用于在線選拔賽戒洼。題目主要包含逆向俏橘、漏洞挖掘與利用、Web滲透施逾、密碼敷矫、取證、隱寫汉额、安全編程等類別曹仗。
? ? ?二、攻防模式(Attack-Defense)
在攻防模式CTF賽制中蠕搜,參賽隊(duì)伍在網(wǎng)絡(luò)空間互相進(jìn)行攻擊和防守怎茫,挖掘網(wǎng)絡(luò)服務(wù)漏洞并攻擊對手服務(wù)來得分,修補(bǔ)自身服務(wù)漏洞進(jìn)行防御來避免丟分妓灌。攻防模式CTF賽制可以實(shí)時(shí)通過得分反映出比賽情況轨蛤,最終也以得分直接分出勝負(fù),是一種競爭激烈虫埂,具有很強(qiáng)觀賞性和高度透明性的網(wǎng)絡(luò)安全賽制祥山。在這種賽制中,不僅僅是比參賽隊(duì)員的智力和技術(shù)掉伏,也比體力(因?yàn)楸荣愐话愣紩掷m(xù)48小時(shí)及以上)缝呕,同時(shí)也比團(tuán)隊(duì)之間的分工配合與合作。?
? ? 三斧散、混合模式(Mix)
結(jié)合了解題模式與攻防模式的CTF賽制供常,比如參賽隊(duì)伍通過解題可以獲取一些初始分?jǐn)?shù),然后通過攻防對抗進(jìn)行得分增減的零和游戲鸡捐,最終以得分高低分出勝負(fù)栈暇。采用混合模式CTF賽制的典型代表如iCTF國際CTF競賽。
CTF的江湖:
我們一般習(xí)慣把ctf分成四類:
? ? ? ?1.題目來源是滲透實(shí)戰(zhàn)或安全研究的paper
? ? ? ? ? ?? 國內(nèi):BCTF(blue lotus)箍镜、0CTF(0ops)源祈、HITCON(hitcon\217)
? ? ? ? ? ?? 國際:DEFCON煎源、CODEGATE、PlaidCTF新博、Boston Key Party CTF
? ? ? ?2.題目來源是各類有趣的漏洞薪夕,舉辦者一般是賽棍
? ? ? ? ?? 國內(nèi):HCTF(HDUISA)、CCTF(0xFA)赫悄、XDCTF(XDSEC)原献、SCTF(三葉 草)、ALICTF(alibaba)埂淮、360
? ? 3.舉辦者一般是賽棍姑隅,但往往并不擅長于舉辦比賽
? ? ? ?? 國內(nèi):SSCTF(四葉草)、RCTF(ROIS)倔撞、華山杯讲仰、ISG、信息安全國 賽痪蝇、XCUNA(高校網(wǎng)安聯(lián)賽)
? ? ? 4.舉辦者一般是技術(shù)從業(yè)者鄙陡,并不懂CTF
? ? ? ? ?? 國內(nèi):WHCTF、新XDCTF躏啰、首都安全日等...
那么科普完畢 我們接下來就實(shí)戰(zhàn)一波
我這里就拿國內(nèi)一家安全公司出的一個(gè)入門級app的題目做分析
??要求如下:
? ? ? ? ?1.有殼就脫殼 ??2.拿到此題的Flag
首先拿到一個(gè)app用工具查一下 這里提示沒有殼
那么我們安裝一下看一下軟件頁面
一打開就是如此 ??兩個(gè)編輯框 ?然后點(diǎn)擊登陸就跳轉(zhuǎn)到另一個(gè)頁面提示”Waiting fot you!”
既然如此 ?打開jadx-gui工具反編譯一波 從java層入手
首先找到他的”AndroidManifest.xml”?里面有個(gè)”activity”標(biāo)簽里面就是他的活動頁面的信息
可以看到這里有3個(gè)活動頁面信息
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
有這兩個(gè)屬性的值上面的活動頁面就是我們的入口頁面(一開打軟件所顯示的頁面信息)
既然如此我們之前看到過有個(gè)登陸的按鈕在一啟動的活動下 ??
那么我們到此活動頁面看一下按鈕下的邏輯事件(“com.tencent.testvuln.MainActivity”)
來到這個(gè)類里面找到按鈕點(diǎn)擊事件 也就是onClick事件下
首先一個(gè)switch語句獲取view.id 進(jìn)入第一個(gè)分支也就是 case R.id.button1
然后接著判斷我們輸入的內(nèi)容是不是為空 或者說輸入的長度是否為0 ?如果條件成立就進(jìn)行一個(gè)彈窗提示我們輸入的內(nèi)容”不能為空”
然后定義兩個(gè)string類型的變量接收我們輸入的內(nèi)容
Obj是第一個(gè)編輯框的內(nèi)容 ?obj2是第二個(gè)編輯框的內(nèi)容
然后startActivity跳轉(zhuǎn)到另一個(gè)活動頁面也就是”SecondActivity”并將我們輸入的內(nèi)容也傳遞過來 ?然后在onCreate初始化函數(shù)進(jìn)行判斷
這一塊兒的邏輯就很清晰了
if (Encryto.doRawData(this, stringExtra + stringExtra2).equals("VEIzd/V2UPYNdn/bxH3Xig=="))
所有的比較邏輯都是在這里了
調(diào)用一個(gè)Encryto類下的doRawData將this 以及stringExtra + stringExtra2).equals("VEIzd/V2UPYNdn/bxH3Xig=="傳遞進(jìn)去
我們現(xiàn)在跟蹤到doRawData方法
發(fā)現(xiàn)System.loadLibrary("JNIEncrypt"); ??加載了這樣一個(gè)so庫 ?此方法也是由native關(guān)鍵詞所修飾的
那么打開此app的lib文件夾發(fā)現(xiàn)也只有一個(gè)so文件庫
拿出我們的ida工具反編譯一波先
發(fā)現(xiàn)并沒有java_ 靜態(tài)注冊的方法那么我們也只能找到JNI_OnLoad動態(tài)注冊的位置
來到了
RegisterNatives就是注冊的函數(shù) 他的第三個(gè)參數(shù)就是我們要找到的方法體 ?第四個(gè)參數(shù)就是他注冊的個(gè)數(shù)
然后我們一步步跟蹤到了這里 ?發(fā)現(xiàn)采用了一個(gè)AES/ECB/PKCS5Padding的加密方式
Key勒就擺在面前的”thisisatestkey==”
然后我們來解密一波
將VEIzd/V2UPYNdn/bxH3Xig== ?解密得出”aimagetencent”
第三個(gè)頁面這里會解密一個(gè)9YuQ2dk8CSaCe7DTAmaqAA==值
將9YuQ2dk8CSaCe7DTAmaqAA== ?解密得出”Cas3_0f_A_CAK3”
以上版權(quán)歸博主所有趁矾,如有轉(zhuǎn)載請聯(lián)系作者,或+群:692903341