เมื่อทุบตีทั่วไป
การออกแบบของทุบตีเกี่ยวกับไฟล์เริ่มต้นค่อนข้างแปลก โหลดทุบตี.bashrc
ในสองสถานการณ์ที่ไม่เกี่ยวข้อง:
บน SSH โดยทั่วไป
เมื่อคุณรันคำสั่งผ่านโปรโตคอล SSH คำสั่งจะถูกส่งผ่าน wire เป็นสตริง สตริงจะดำเนินการโดยเปลือกระยะไกล เมื่อคุณเรียกใช้ssh example.com somecommand
ถ้าเปลือกเข้าสู่ระบบผู้ใช้ระยะไกลเป็น/bin/bash
เซิร์ฟเวอร์ SSH /bin/bash -c somecommand
วิ่ง ไม่มีวิธีเลี่ยงผ่านเชลล์ล็อกอิน สิ่งนี้อนุญาตให้เชลล์ล็อกอินที่ จำกัด ตัวอย่างเช่นอนุญาตเฉพาะการคัดลอกไฟล์และไม่ใช่การดำเนินการคำสั่งทั่วไป
มีข้อยกเว้นหนึ่งข้อ: โปรโตคอล SSH อนุญาตให้ไคลเอนต์ร้องขอระบบย่อยเฉพาะ หากไคลเอ็นต์ร้องขอsftp
ระบบย่อยดังนั้นโดยค่าเริ่มต้นเซิร์ฟเวอร์ OpenSSH จะเรียกใช้โปรแกรม/usr/lib/openssh/sftp-server
(ตำแหน่งอาจแตกต่างกัน) ผ่านเชลล์ล็อกอินของผู้ใช้ แต่สามารถกำหนดค่าให้เรียกใช้เซิร์ฟเวอร์ SFTP ภายในผ่านสาย
Subsystem sftp internal-sftp
ในsshd_config
ไฟล์ ในกรณีของเซิร์ฟเวอร์ SFTP ภายในและเฉพาะในกรณีนี้เชลล์ล็อกอินของผู้ใช้จะถูกข้าม
สำหรับความท้าทายนี้
ในกรณีของ OverTheWire Bandit 18 .bashrc
มี
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
ดังนั้นคุณสามารถแก้ปัญหาในระดับนี้ได้โดยการทำอะไรก็ตามที่ทำให้ทุบตีไม่ให้มีปฏิสัมพันธ์
ในขณะที่คุณค้นพบ SFTP ทำงาน
แต่ssh bandit18@bandit.labs.overthewire.org cat readme
ก็ยังใช้ได้ ตามที่จะ
และการกด Ctrl + C ในเวลาที่เหมาะสมในระหว่างการเข้าสู่ระบบแบบโต้ตอบก็จะใช้ได้เช่นกัน: มันจะขัดจังหวะการทุบตีดังนั้นจึงไม่สามารถดำเนินการได้อย่างสมบูรณ์ Bash ใช้เวลาในการเริ่มต้นด้วยกล้องจุลทรรศน์ดังนั้นในขณะที่วิธีนี้ใช้ไม่ได้ผลก็สามารถทำได้ในทางปฏิบัติ echo 'cat readme' | ssh bandit18@bandit.labs.overthewire.org
.bashrc