前面HackStuff的其他成員已經幫我把Dark.rar裡面的東西解完了,真的好黑暗的壓縮檔,最好在ram disk下弄,不然很傷 QAQ
當你解完100層之後會看到一張嘲諷臉,告訴你還沒完,接下來的壓縮檔名很關鍵,4D.rar 5A.rar 90.rar 00.rar,
好熟悉阿,這不是WindowsPE的header嗎?
HITCON2013 解題 - Web5
因為 Wargame 關了 把還記得的部分寫上來。
這題還蠻有趣的
是關於 PHP 的 object injection,主要是 unserialize 出了問題。
http://pastebin.com/pykQL896 chall.phps 原始碼
首先,這題有三個保護
一:bypass md5
不然程式會一直跳到 FakeKey 那邊進行讀取。
查了一下 md5 函數不管輸入怎樣的字串都不會回應 '' 空值,因此是要使它出錯
利用 firefox cookie editor 插入 checksum[] = 利用塞入陣列方式讓其出錯就可以了。
二:encrypt & bypass safe function
因此要自己進行一次 base64_encode 跟 mcrypt_encrypt
而Safe function有一些regular expression要bypass
由於過濾了s(字串),這邊改成大寫S就過了
然後base64的字串會出現+號,用urlencode繞過即可。
三:utilize unserialize php object injection
https://www.owasp.org/index.php/PHP_Object_Injection
查閱 OWASP 文件後,可以知道 PHP 在處理反序列化(unserialize)的時候有 bug
如果在上面有宣告物件,它在unserialize的時候會自動的執行類似
function __destruct(){
這樣的函數
我們看一下原始碼
如果沒有第二步的檢查,一般的 object 注入方法是
建構一個跟上面一樣的 class qoo,加入要覆蓋的 key_var,然後將這個 class serialize 序列化
<?php
class qoo{
var $key_var = "Key";
}
$class = new qoo();
$class_ser = serialize($class);
print_r($class_ser);
?>
將 payload $class_ser 'o:3:"qoo":1:{s:7:"key_var";s:3:"Key";}'; unserialize
就會觸發 qoo 的 __destruct
同時會覆蓋區域變數 key_var,這樣就可以讀到 Key.php 了。
這題還蠻有趣的
是關於 PHP 的 object injection,主要是 unserialize 出了問題。
http://pastebin.com/pykQL896 chall.phps 原始碼
首先,這題有三個保護
一:bypass md5
- $checksum = $_COOKIE['checksum'];
- if ( @md5($checksum) == '' ) {
不然程式會一直跳到 FakeKey 那邊進行讀取。
查了一下 md5 函數不管輸入怎樣的字串都不會回應 '' 空值,因此是要使它出錯
利用 firefox cookie editor 插入 checksum[] = 利用塞入陣列方式讓其出錯就可以了。
二:encrypt & bypass safe function
- base64_decode( $auth_str );
- $auth_str = mcrypt_decrypt
因此要自己進行一次 base64_encode 跟 mcrypt_encrypt
而Safe function有一些regular expression要bypass
- if ( is_string( $s ) && strpos( $s, "\0" ) === false ) {
- if ( strpos( $s, 'O:' ) === false ) {
- return true;
- } else if ( ! preg_match('/(^|;|})s:[+\-0-9]+:"/', $s ) ) {
- return true;
- }
由於過濾了s(字串),這邊改成大寫S就過了
然後base64的字串會出現+號,用urlencode繞過即可。
三:utilize unserialize php object injection
https://www.owasp.org/index.php/PHP_Object_Injection
查閱 OWASP 文件後,可以知道 PHP 在處理反序列化(unserialize)的時候有 bug
如果在上面有宣告物件,它在unserialize的時候會自動的執行類似
function __destruct(){
這樣的函數
我們看一下原始碼
- $cookie_key = "◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣";
- $iv = "00000000";
- class qoo{
- var $key_var = "FakeKey";
- function __construct(){}
- function __destruct(){
- $keyfile = $this->key_var . ".php";
- $keyfile = basename( $keyfile );
- include( $keyfile );
- print $key;
- }
- }
- $auth_str = $_COOKIE['auth_str'];
- unserialize( $auth_str );
如果沒有第二步的檢查,一般的 object 注入方法是
建構一個跟上面一樣的 class qoo,加入要覆蓋的 key_var,然後將這個 class serialize 序列化
<?php
class qoo{
var $key_var = "Key";
}
$class = new qoo();
$class_ser = serialize($class);
print_r($class_ser);
?>
將 payload $class_ser 'o:3:"qoo":1:{s:7:"key_var";s:3:"Key";}'; unserialize
就會觸發 qoo 的 __destruct
同時會覆蓋區域變數 key_var,這樣就可以讀到 Key.php 了。
HITCON2013 解題 - Forensics2
file link
摁,pptx,HIT的圖片和一個link
事情怎麼可能這麼簡單?
docx, xlsx, pptx…等等的格式其實是zip壓縮檔 + xml格式文件,所以就把它解壓縮吧!
東找找西找找之後你發現ppt/media/image2.png這裡有個無敵數位黨證,事情當然也沒有這麼簡單,它除了無敵數位黨證之外,還包含了你的key,圖片內含key?用Notepad++看一下之後好像沒什麼發現,那應該是圖片+壓縮檔的方式吧
什麼?有密碼?猜吧。HIT, HITCON, HITCON2013, HIT2013,終於現出原形了!
摁,pptx,HIT的圖片和一個link
事情怎麼可能這麼簡單?
docx, xlsx, pptx…等等的格式其實是zip壓縮檔 + xml格式文件,所以就把它解壓縮吧!
東找找西找找之後你發現ppt/media/image2.png這裡有個無敵數位黨證,事情當然也沒有這麼簡單,它除了無敵數位黨證之外,還包含了你的key,圖片內含key?用Notepad++看一下之後好像沒什麼發現,那應該是圖片+壓縮檔的方式吧
什麼?有密碼?猜吧。HIT, HITCON, HITCON2013, HIT2013,終於現出原形了!
標籤:
HITCON
HITCON2013 解題 - Web1 & Web2 & Web3
Web 1
wargame link
第一直覺:看Source
果不其然,馬上看到了可疑的東西…
第101行的地方,有一段用aaencode (http://utf-8.jp/public/aaencode.html ) 混淆過的JS Code,貼到Console執行就秒殺第一題了
Web 2
wargame link
負數
read.php?pos=-1
$offset = ($_REQUEST['pos'] - 1 ) * 128 + 32 ;
$offset = -224;
讀取 _DIR 負的起始點開始讀取
一直到
if ( @$fpstr[$j] == "\x00"){break;}
構造 _DIR內容為
/var/www/c/key.php
所以第一篇文章 title
是 /var/www/c/key.php
Web 3
wargame link
code連結
關鍵在favicon.ico,請從各個角度觀看,就會發現驗證碼..
wargame link
第一直覺:看Source
果不其然,馬上看到了可疑的東西…
第101行的地方,有一段用aaencode (http://utf-8.jp/public/aaencode.html ) 混淆過的JS Code,貼到Console執行就秒殺第一題了
Web 2
wargame link
負數
read.php?pos=-1
$offset = ($_REQUEST['pos'] - 1 ) * 128 + 32 ;
$offset = -224;
讀取 _DIR 負的起始點開始讀取
一直到
if ( @$fpstr[$j] == "\x00"){break;}
構造 _DIR內容為
/var/www/c/key.php
所以第一篇文章 title
是 /var/www/c/key.php
Web 3
wargame link
code連結
關鍵在favicon.ico,請從各個角度觀看,就會發現驗證碼..
標籤:
HITCON
訂閱:
文章 (Atom)