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
Proceess:
開啟題目,title為hex和cookie,下載圖片載入編輯器,找到如下hex
23696E636C7564652066696C653D22386630306232303465393830303939382E70687022
複製程式碼
解碼為include file="8f00b204e9800998.php",訪問該頁面,檢視cookie,獲得base64加密的key 如圖
解密即可。
Key:[email protected]}
2.web2-慧眼識珠
Url: http://ctf.sobug.com/hack_game/5220de5ab2a8ce7d/index.html
Point: 100
Description: 仔細檢視頁面,獲取key
Proceess:
訪問,檢視到cookie裡有check=0,因而想構造check=1的cookie,構造完畢後繼續訪問發現頁面仍未變化。 繼續檢視後發現當前頁面為index.html,裡面的一段加密的js程式碼解密後就為check=0,再無其他資料。修改cookie後嘗試需訪問其他動態頁面,訪問index.php後響應中返回key,如圖
Key: [email protected]}
3.web3-資料&暗語
Url:http://ctf.sobug.com/hack_game/f31c5630b00b0131/index.php
Point:150
Description: 仔細檢視頁面獲取你想要的key
Proceess:
開啟後,檢視原始碼提示referer&code,圖片中描述去官網看看,確定referer應為官網Referer:http://www.seclover.com( 注意請求頭裡若在末尾加了/不會出結果的,Referer:http://www.seclover.com/) 構造referer後,訪問獲得的響應內容如下
諾基亞的鍵盤結果如下
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: 仔細檢視頁面,度娘知道答案喲
Proceess:
通過題目中谷歌是檢索不到的,得知存在robots.txt檔案,訪問獲得裡面的disallow目錄User-agent: * Disallow: /S$cL0ver/ Disallow: /include/
訪問/S$cL0ver/
根據說明,測試代理訪問,本地設定X-Forwarded-For為www.seclover.com訪問,獲得您的ip為www.seclover.com 得知其ip獲取是利用X-Forwarded-For,修改其為www.seclover.com的ip,訪問即可獲得key
Key:{S2CloveRWelcomE_Y0u}
5.web5-程式設計&指令碼
Url:http://ctf.sobug.com/hack_game/f8495eeedb8e92ee/index.php
Point:200
Description: 程式設計解決問題
Proceess:
Burp抓包可以看到響應頭中有個password欄位
每次請求都會變化,這樣只要寫個自動化指令碼抓取後自動提交就可以了,指令碼如下
跑起來就可以得到key:
Key: {b7mIfekXA5lwLq}
6.web6-windows密碼
Url:http://ctf.sobug.com/hack_game/1ffd89ff6c2a0012/index.php
Point:150
Description: windows密碼機制
Proceess:
下載得到兩張圖片,進行處理 用stegdetect進行處理,發現利用outguess加密演算法,隱藏的資料,根據提示是windows弱口令,試了幾次成功讀取 如圖
檢視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: 獲取後臺密碼
Proceess:
有驗證碼,檢視驗證碼是否存在繞過,此處的邏輯漏洞為找回密碼功能,點開忘記密碼,提示四位驗證碼已傳送到您手機, 因而暴力猜解驗證碼即可。擷取請求包,載入burpsuite intruder,設定payloads為0000-9999進行爆破,爆破後如下
登入框登入成功後,彈出key
Key:{4297f44b13955235245b2497399d7a92}
8.web8-U盤病毒
Url:http://ctf.sobug.com/hack_game/eaf10b34b5ba8770/index.php
Point:300
Description: U盤病毒分析,獲取key
Proceess:
下載U盤映象後,解壓1.4M,果斷mount之。得到一個exe和autorun,根據autorun裡的資訊,放到windows下。 看了下是winrar的自解壓的檔案,然後用winrar開啟,得到3個檔案。如圖
執行1.exe解壓出一個隱藏的test.txt檔案。內容如下,計算md5提交就是flag
Key: {隊友玩星際去了,沒要到key,我代寫的}
9.web9-電報解碼
Url:http://ctf.sobug.com/hack_game/70e8ff92f2cb2576/index.php
Point:200
Description: 仔細檢視頁面獲取key
Proceess:
Win7訪問是如上圖的,但是linux訪問直接顯示的如下
根據摩斯碼錶得到明文:
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: 注入繞過
Proceess:
根據題目得知引數為id,訪問獲得如下提示
得知sql語句。將其載入sqlmap中可以讀取到database() version()等資訊,其利用的是盲注。此處過濾了select等字元, 且大小寫無法繞過。測試發現大致的過濾思路為,檢測到字串中有= 和select等字元,會提示Holly Shit! Damn it.但union未檢測,多次測試select用%00來繞過
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: 按題目要求完成
Proceess: Burp抓包,傳正常圖片,提示{不會吧,上傳圖片不好吧!至少你也傳個能解析的啊!} 但上傳php檔案無論怎麼改、截斷都是提示檔案型別錯誤,所以猜測其對content-type進行了驗證,看其是否為圖片。 此時上傳圖片改為xx.php提示上傳檔案出錯,然後利用檔名為大寫PHP繞過,如圖
Key:[email protected]}
12.web12-SQL
Url:http://ctf.sobug.com/hack_game/8f0784928387928a/index.php
Point:500
Description: 找找看看,有洞喲
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
為
而該檔案為
因而可以確認其不是檔案包含,而是檔案讀取。因而想構造引數讀取confi.php裡的內容。多次測試發現傳入字元會提示日期錯誤,傳入file=2014061202000000一個超長資料,提示伺服器內部500錯誤,說明過了日期檢測函式;傳入file=2014061202000000../提示日期格式不對,傳入file=0xabcdef123提示伺服器內部500錯誤。多次測試發現無法繞過其日期檢測函式。
將注意力放在admin的登入框裡,有驗證碼,輸入帳號錯誤會提示不存在該帳號,測試了多個常用管理帳號後依然提示帳號不存在,由於題目是SQL,因而考慮到是sql注入,測試了多次後,發現注入應該不在登入框處。
點開搜尋框,url為search.php?word=&tongpeifu=*&sqltongpei=%
顯示結果如下
根據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=
發現沒有回顯內容,如圖
提交search.php?word=li?ux&tongpeifu=?&sqltongpei=n
獲得回顯
因而大致確定程式的邏輯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/>";
複製程式碼
輸出為
有沒有很熟悉,echsop之前爆過的一個外掛注入也是類似,利用替換,將單引號逃逸出來 仔細想想,該怎樣進行替換,才會使單引號逃逸出來? 首先在word中測試,另外兩個引數為空,檢視輸出
Word中的\ ‘ %00中的反斜線都是成對出現的,所以要想使得單引號逃逸出來,必須使得其前面的\被轉義, 那萬用字元該用哪個進行替換呢,使得萬用字元分別為’或\或%00,時候,其替換的時候也為成對替換,因為其自身也被轉義了。
但是將萬用字元變為\0檢視輸出
令sqltongpeif=\ 輸出檢視,單引號逃逸
然後執行常規的查庫、查表、讀取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處,在程式結束的地方下斷點,執行程式。成功斷下後,直接在棧上可以看到註冊碼,如圖。
2.Crack2-Crackme2
Url:http://ctf.sobug.com/crackme/82a7d5ac894e5bb8/index.php Point:200
Process:
一個易語言寫的程式~ OD載入,ALT+M, 在crackme.data段F2下斷,F9執行
中斷在krnln庫檔案程式碼裡,F8單步過下面的JMP就到程式領空
,這時找字串,應該是有2個還是3個失敗,1個不能為空,1個成功,所有中文字串都下上斷點,分析下
首先隨便輸入,如果斷下來
判斷密碼是不是32位的 生成正確註冊碼
F9重新執行,在上面的那個函式斷下後,看棧裡,下面的那個就是正確的註冊碼
3.Crack3-Crackme3
Url:http://ctf.sobug.com/crackme/e26cac7bac3f78c1/index.php
Point:300
Process:
分析個sethc.exe 貼上鍵後門。 直接看訊息處理的地方吧
1那個地方是判斷ecx是不是為0x30,這個地方是滑鼠的點選次數,下面會有分析
2 那個地方是判斷按的是確定還是取消,確定是1,取消是2
繼續往下看
點選滑鼠左鍵右鍵都會讓ecx+1,左鍵在403070處寫入0x4c,右鍵寫入0x52 到滿足ecx==0x30的時候,會來到00401C40這個地方判斷滑鼠點選的那48下的具體情況; 下面這個迴圈,將0x4c對應一個0,0x52對應一個1,48下轉化為6位元組
下面那個比較的地方,那6個位元組和“查水錶”的HEX值比較
比較一樣就可以啟動“後門”彈出本題的flag:D27789EFCA409B6B6EE297D412334A65 所以把“查水錶”的2進位制轉化出來,就可以確定滑鼠左鍵右鍵點選的次序,觸發“後門”。
4.Crack4-Crackme4
Url:http://ctf.sobug.com/crackme/820af53738bfa68e/index.php Point:400 Process: 提示為:輸入正確的密碼,會釋放出檔案。key就在檔案中。 tips:第一層密碼為6為純數字,第二層密碼也是6位。 拿到程式後,放入PEID
FSG的殼,脫殼後發現裡面有檔案讓損壞,所以帶殼分動態除錯,IDA分析脫殼後的吧。
執行到第3行命令那,棧裡第4個位置就是程式入口。在棧中裡那個位置右鍵資料視窗中跟隨
然後下硬體訪問斷點,F9,然後就可以看到真正的程式碼了 先看401370函式吧,這個是對結果的處理函式,等下分析的時候需要用到,輸入的引數為數字,然後6種情況
然後IDA的F5看
為空沒有輸入密碼,不為空進入4013E0處理~ 下面這個函式,當我脫殼後會返回錯誤5,所以帶殼分析了••
進去看下,當返回成0的時候為正確,那麼就會生成檔案,如果返回2,是密碼錯誤。 裡面有把你的密碼經過sprintf和“HOWHP”連線在一起,經過401000的2次加密,和一個特定的hash對比。 根據我的那個方法跟一下就OK了,然後需要獲得的hash如下 esi=0018F9F0, (ASCII "09B2F924C20C5CA427EED2C5B98BEFBF")
需要加密後的hash為 第一步,我採取的爆破,提示說是第一個密碼是6位純數字,程式碼在附件裡。如果有附件~~ 爆破出來是564987
然後生成了一個一樣的exe,同樣加殼。只是最後生成的檔案會不一樣。這個的密碼提示為6位,但是不一定是純數字了,我一開始直接拿第一步寫的程式跑了下純數字,果然不行,然後就去看程式,修改指令,看看會生成什麼,結果發現生成了個gif 馬上想到GIF89a 6位,也許可以推算出來key 在401270函式裡是寫檔案的,呼叫了40110把你輸入的key和原有資源做運算
看看演算法
異或操作,果然可以! 我使用的密碼是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:拿到程式後,首先看了字串
有反除錯,根據那些int3,很明顯是seh反除錯,打亂程式的執行流程,導致定位關鍵函式帶來困難行流程。 2:來到跟進異常處理,來到
下面的這個地方判斷是不是int3引起的異常,是就往下執行,不是就返回EXCEPTION_CONTINUE_SEARCH
這個地方,設定EIP
來我們看看edx的值
也是int3,帶著疑惑,繼續看~~ 多試幾次後,EDX在不斷增大~ 最後10多次後,發現了不是int3的情況
進一步的跟蹤,發現是用異常處理例程是沒隔10次左右的INT3異常對應一條MSAM語句,所有的語句整合起來,也就是註冊碼的演算法了~ 此外UnhandledExceptionFilter在沒有debugger attach的時候才會被呼叫。所以,跟蹤起來很困難。 選擇設定條件記錄斷點
整理後
根據結果就可以分析演算法了。最後做出序號產生器,提交OK~ 附上原始碼和一個可以執行的賬號~ 請注意:序號產生器的輸出倒過來才是正確的註冊碼,然後使用者名稱和註冊碼不能相同,不想改了,注意下就好
v_dature 536426
複製程式碼