GTFOBins
(gtfobins.org)- ได้จัดทำรายการไบนารี Unixแยกตามความสามารถ และเชื่อมการทำงานที่เป็นไปได้ของแต่ละไบนารีไปยังหน้ารายละเอียดและลิงก์แองเคอร์ได้โดยตรง
- หมวดหมู่ที่ปรากฏซ้ำเป็นประจำคือ Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load, Privilege escalation และบางรายการมี Bind shell กำกับเพิ่มเติม
- File read และ Shell กระจายอยู่กว้างมาก ขณะที่เครื่องมืออย่าง dd·sed·sqlite3 มีทั้ง การอ่านและการเขียน ทำให้เส้นแบ่งกับเครื่องมือแบบใช้ดูข้อมูลอย่างเดียวไม่ชัดเจน
- เครื่องมืออย่าง apt·git·journalctl·systemctl มักมีทั้ง Command และ Inherit ขณะที่ไบนารีอเนกประสงค์อย่าง bee·pipx·sqlmap·vim ก็ปรากฏซ้ำพร้อมทั้ง การส่งข้อมูลผ่านเครือข่ายและการทำงานของเชลล์
- Privilege escalation ปรากฏจำกัดอยู่ในบางไบนารีที่มีลิงก์แยกต่างหาก และรายการกว้างตั้งแต่ 7z ถึง zypper ก็ช่วยให้เห็นความแตกต่างของการผสมผสานการทำงานในเครื่องมือทั่วไปได้ในภาพรวม
การกระจายของความสามารถหลัก
- รายการที่เน้นหรือใช้ได้เฉพาะการอ่านไฟล์กระจายอยู่กว้างมาก
- รายการที่สามารถเรียกใช้เชลล์ก็มีจำนวนมากเช่นกัน
- มีหลายรายการที่มีทั้งการเขียนไฟล์และการอ่าน ทำให้เส้นแบ่งกับเครื่องมือแบบใช้ดูข้อมูลอย่างเดียวไม่ชัดเจน
- การรันคำสั่งหรือการสืบทอดสิทธิ์พบได้บ่อยในตัวจัดการแพ็กเกจ เครื่องมือระบบ และโปรแกรมแบบโต้ตอบ
- apt, apt-get, git, journalctl, man, systemctl, timedatectl, zless เป็นตัวอย่างเด่น
ไบนารีอเนกประสงค์
- ไบนารีอเนกประสงค์ที่มีหลายการทำงานพร้อมกันปรากฏซ้ำอยู่บ่อยครั้ง
-
รายการอเนกประสงค์ที่อิงกับ Inherit
- apport-cli, batcat, cargo, crash, gcloud, git, journalctl, man, opencode, psql, run-mailcap, systemd-resolve มี Inherit ควบคู่กับ Shell, Command, File read, File write
-
รายการที่รวมถึงเครือข่ายและการย้ายไฟล์
-
กลุ่มเอดิเตอร์และดีบักเกอร์
-
กลุ่มตัวจัดการแพ็กเกจและรันไทม์
เครือข่าย เชลล์ และการโหลดไลบรารี
- ความสามารถ Upload/Download ไม่ได้มีเฉพาะในเครื่องมือเครือข่าย แต่ยังพบร่วมกับเชลล์และรันไทม์ของภาษาอีกด้วย
-
เครื่องมือที่เน้นการรับส่งข้อมูล
-
Reverse shell และ Bind shell
-
รายการที่มี Library load
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูเหมือนหลายคอมเมนต์จะสับสนกัน เลยขอยกตัวอย่างว่ามันถูกใช้เมื่อไรในบริบท security/CTF
ในสภาพแวดล้อมที่เป็น restricted shell หรือรันได้แค่บางคำสั่ง/ไบนารี ปกติแล้วมักจะยังใส่อาร์กิวเมนต์ได้ค่อนข้างอิสระ
ตอนนั้นถ้าใช้ GTFOBins ก็อาจต่อยอดไปถึงการอ่าน/เขียนไฟล์หรือสั่งรันคำสั่งได้ จนหลุดออกจากบริบทที่ถูกจำกัดและได้เชลล์มา
ถ้าใครเปิด sudo ทิ้งไว้ หรือให้ SUID bit กับ GTFOBin ก็อาจอ่านหรือเขียนไฟล์สำคัญ และรันคำสั่งที่มีสิทธิ์สูงได้ด้วยวิธีที่แม้แต่คนตั้งค่าก็ไม่ทันคาดคิด
การจัดการสิทธิ์ยังค่อนข้างดิบ เพราะเน้น block-list กับ allow-list เป็นหลัก
ครั้งหนึ่งผมเผลอให้สิทธิ์ powershell กับ Claude ในเซสชันหนึ่ง แล้วหลังจากนั้นถ้าเครื่องมืออย่าง git ถูกบล็อก มันก็จะเขียนสคริปต์ powershell ที่ทำงานอย่างเดียวกันขึ้นมาใช้เองเพื่ออ้อมสิทธิ์ที่ถูกบล็อก
ในระบบที่ออกแบบดีจริงคงไม่เอา powershell ไปใส่ใน allow-list ทั่วไปหรอก แต่ถ้ามีช่องว่างของระดับสิทธิ์ระหว่างเครื่องมือ เทคนิคในหน้านี้ก็ดูเหมือนจะพาอ้อมกลับมาได้สบาย
วิธีติดตั้งที่ผมเคยเห็นในบริษัทหนึ่งคือ ทำให้โปรแกรมใน allowlist ที่แอดมินใส่ไว้รันผ่าน
sudoได้โดยไม่ต้องใส่รหัสผ่าน และตั้งแต่แรกก็มีเครื่องมือสารพัดประโยชน์อย่าง vim, bash รวมอยู่แล้วจากมุมคนทำงานที่บ้านมันกลับรู้สึกเหมือนเป็นเรื่องดี เพราะซอฟต์แวร์ที่บอกว่าจะ "ปกป้อง" คอมผมตัวนี้ ดันทำให้ถ้ามีคนมาเจอเครื่องตอนผมลุกไปแป๊บเดียวแล้วลืมล็อกหน้าจอ เขาจะสั่งอะไรต่อมิอะไรได้ง่ายขึ้นมาก
หลายปีก่อนทีมซัพพอร์ตต้องจับแพ็กเก็ตเครือข่ายด้วย
tcpdumpก็เลยใส่กฎ sudo ที่เปิดอาร์กิวเมนต์ไว้พอสมควรเพื่อให้ทำงานได้เร็วตอนนั้นดูสมเหตุสมผล เพราะพอร์ตหรือ NIC อาจเปลี่ยนได้ แต่จริง ๆ แล้ว
tcpdumpมีออปชัน-zที่ให้ระบุคำสั่งบีบอัดได้ ซึ่งถ้าใส่คำสั่ง "พิเศษ" ลงไป ก็ยึดเครื่องเซิร์ฟเวอร์ได้ทั้งเครื่องเลยsudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z rootมันดูเป็นรายละเอียดเล็ก ๆ แต่แบบนี้พลาดกันง่ายมาก
เดี๋ยวนี้มีชั้นอย่าง apparmor มาช่วยลดความเสี่ยงแบบนี้ได้บ้าง แต่ก็เพิ่มปัญหาปวดหัวแบบอื่นตามมา และยังคงตั้งค่าพลาดได้ง่ายอยู่ดี
ครั้งล่าสุดที่ผมใช้ของคล้าย ๆ แบบนี้คือราว ๆ ปี 1995 บน Windows 3.11 ในห้องคอมของโรงเรียนมัธยมต้น
เขาล็อกไว้ให้รันได้แค่ไม่กี่แอปที่ได้รับอนุมัติ ซึ่งหนึ่งในนั้นคือ Word
แล้วใน Word ก็เขียนแมโครและเรียก shell เพื่อรันแอปอื่นได้
สุดท้ายเครื่องที่ดูเหมือนถูกล็อกให้มีแค่ไม่กี่แอป กลับกลายเป็นรันอะไรก็ได้แทบทั้งหมด
ตอนนั้นมันสะใจมาก และหลังจากนั้นก็แทบไม่ค่อยเห็นอะไรคล้ายกันอีก
บางทีก็เห็นคนพูดกันว่าเครื่องแสดงข้อมูลแบบสัมผัสตามร้านหรือห้างสามารถหลุดจาก kiosk mode ได้ ซึ่งก็น่าจะเป็นพวกเดียวกัน
พอเห็น
restic - Shell, Command, Uploadแล้วก็รู้สึกว่าการที่ผมปรับไม่ให้รันแบ็กอัปเป็น root นั้นพอมีเหตุผลขึ้นมาหน่อยผมเลยให้มันรันเป็นผู้ใช้ทั่วไปแทน แต่ให้แค่ read-all-files capability และปิด login shell ไป
แน่นอนว่าบนเดสก์ท็อปมันอาจจะเยอะเกินไป และถ้าผู้โจมตีทะลุถึงระดับนั้นได้อยู่แล้ว ก็คงอ่านไฟล์แทบทั้งหมดได้อยู่ดีและฝัง backdoor ลงในแบ็กอัปได้เหมือนกัน
[0] https://man7.org/linux/man-pages/man7/capabilities.7.html
เรามีวิธีรับมือผู้โจมตีมนุษย์จากระยะไกล ผู้โจมตีแบบบอตจากระยะไกล และในระดับหนึ่งก็รวมถึงผู้โจมตีมนุษย์ในเครื่องด้วย แต่ตอนนี้ บอตผู้โจมตีในเครื่องที่เขียนโค้ดเองได้ กลายเป็นสิ่งที่ต้องใส่ใจมากขึ้นกว่าเดิมมาก
มันไม่ได้อยู่หมวดเดียวกับมัลแวร์แบบตรง ๆ เสียทีเดียว
ผมเองก็เคยมองคอนเทนเนอร์เป็นขอบเขตความปลอดภัยที่เกี่ยวข้อง แล้วปล่อยให้ทุกโปรเซสข้างในรันเป็น root แต่พอมี LLM เข้ามา ก็เริ่มไม่แน่ใจว่าความปลอดภัยระดับ OS สำคัญขึ้นทันที หรือจริง ๆ กลายเป็นแทบไม่มีความหมายไปแล้วกันแน่
ผมยังงง ๆ อยู่ว่า นี่หมายถึงเวลาไม่มี
catก็ให้ใช้base64 /path/to/input-file | base64 --decodeแทนcat /path/to/input-fileใช่ไหมหรือหมายถึง
base64 /path/to/input-file | base64 --decodeสามารถอ้อมสิทธิ์การอ่านไฟล์ได้เลยโปรเซสที่ถูกเรียกมาปกติจะรับสิทธิ์เดียวกับผู้ใช้ที่รันมัน ยกเว้นเฉพาะกรณีมี setuid bit เท่านั้น
ประเด็นคือ ในสภาพแวดล้อมที่พยายามปิดเครื่องมือ Unix มาตรฐานเพื่อกัน lateral movement ของผู้โจมตี ก็ยังใช้เครื่องมืออื่นทำสิ่งเดียวกันได้อยู่ดี
ไม่ได้เจาะทะลุสิทธิ์ตัวมันเอง แต่เป็นเรื่องของการให้ผลลัพธ์เดียวกันด้วยไบนารีอื่น ใน restricted shell ที่อนุญาตแค่ไม่กี่คำสั่ง
แบบนี้พบได้บ่อยมากใน CTF
คุณสามารถรัน
base64ด้วยสิทธิ์ root เพื่อเข้ารหัสเนื้อหาไฟล์เป็น base64 แล้วส่งเอาต์พุตนั้นให้โปรเซส base64 อีกตัวถอดกลับมา สุดท้ายก็เห็นเนื้อหาไฟล์ได้โดยรวมแล้วมันก็เหมือน
catที่เพิ่มขั้นตอนขึ้นมาเท่านั้นเมื่อก่อนผมเคยเป็นหนึ่งในผู้ดูแลเครื่องมือพวกนี้ตัวหนึ่ง แล้วพอเห็นมีคนใช้มัน งัดเชลล์ออกมาได้ ก็ขำดี
ทั้งสร้างสรรค์ สนุก และเป็นเอกสารอ้างอิงที่ดีด้วย
ตอนเล่น
hackthebox.euผมใช้สิ่งนี้ บ่อยมากGTFOBins มีมานานพอสมควรแล้ว และมีประโยชน์ตั้งแต่ก่อนยุค AI
เหตุผลที่ AI มีประโยชน์ สุดท้ายก็คือมันดึงข้อมูลดี ๆ ที่มีอยู่ก่อนแล้วแบบนี้ขึ้นมาใช้ได้
ผมยังไม่ค่อยเข้าใจว่าทำไม
base64ถึงอยู่ในลิสต์เท่าที่ผมคิด มันน่าจะอ่านได้แค่ไฟล์ที่ผู้ใช้เข้าถึงได้อยู่แล้วเท่านั้น หรือผมเข้าใจอะไรผิด
หรือคำอธิบายว่าเป็น การอ้อมข้อจำกัดความปลอดภัยในเครื่องที่ตั้งค่าผิด มีความหมายต่างจากที่ผมเข้าใจ
ตัวอย่างง่ายที่สุดคือ ต่อให้เปลี่ยนเชลล์เริ่มต้นเป็น rbash ถ้าผู้ใช้ยังแค่รัน
bashแล้วเข้าเชลล์ปกติได้อยู่ มาตรการนั้นก็หมดความหมายsudoersอาจอนุญาตให้ รัน base64 เป็น root ได้ไม่รู้ว่าทำไปทำไม แต่ถ้าเป็นแบบนั้น ก็จะอ้อมข้อจำกัดสิทธิ์ที่ตั้งใจไว้ และอ่านไฟล์อะไรก็ได้ในระบบ
หรือถ้าใน Claude Code ตั้งให้รัน
base64ได้โดยไม่ต้องมีการตรวจทาน ก็อาจเท่ากับเปิดทางให้อ่านไฟล์ลับอย่าง.envได้ด้วยบางครั้งระบุอนุญาตไว้ชัดเจนผ่าน
sudo -lหรือบางครั้งมีอย่างอื่นเรียกเครื่องมือนั้นในฐานะ root อยู่แล้วน่าจะดีถ้ามีการแสดง วิธีบรรเทา สำหรับการอ้อมแบบนี้ควบคู่ไปด้วย
ตัวอย่างเช่นกรณีได้เชลล์จาก
moreตั้ง
SHELLเป็น/bin/falseก่อนรันmoreเปลี่ยนไปใช้
lessใน secure modeหรือถ้าใช้
moreผ่านsudoก็ใช้ NOEXEC flag เป็นต้นวิธีอื่น ๆ ที่เหลือสุดท้ายก็มีส่วนที่ต้องหวังดวงอยู่มาก
เจ๋งดี และมีวิธีที่สร้างสรรค์แบบคาดไม่ถึงด้วย
อย่าง yt-dlp นี่ผมนึกไม่ถึงเลย
คงต้องกลับไปคิดใหม่แล้วว่าจะติดตั้งมันไว้ดีไหม