- Danh sách binary Unix được sắp xếp theo từng chức năng, và các hành động có thể thực hiện từ mỗi binary đều được liên kết trực tiếp tới trang chi tiết và anchor link
- Các phân loại lặp lại thường gặp là Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load, Privilege escalation, và ở một số mục còn có thêm Bind shell
- File read và Shell xuất hiện rất rộng, còn các công cụ như dd, sed, sqlite3 vừa có đọc vừa có ghi, làm mờ ranh giới với những công cụ chỉ mang tính tra cứu đơn thuần
- Các công cụ như apt, git, journalctl, systemctl thường bao gồm Command và Inherit, trong khi những binary đa năng như bee, pipx, sqlmap, họ vim lại nhiều lần xuất hiện với cả truyền tải qua mạng và hành vi shell
- Privilege escalation chỉ xuất hiện giới hạn ở một số binary có gắn liên kết riêng, và danh sách rộng từ 7z đến zypper cho thấy rõ sự khác biệt trong tổ hợp hành vi của các công cụ phổ thông chỉ trong một cái nhìn
Phân bố chức năng tiêu biểu
- Các mục chỉ đọc tệp hoặc thiên về đọc được phân bố rất rộng
- Các mục có thể thực thi shell cũng rất nhiều
- Có nhiều mục vừa ghi tệp vừa đọc, khiến ranh giới với các công cụ chỉ để tra cứu trở nên mờ hơn
- Thực thi lệnh hoặc kế thừa quyền thường xuất hiện trong trình quản lý gói, công cụ hệ thống và chương trình tương tác
Binary đa năng
- Các binary đa năng sở hữu nhiều hành vi cùng lúc xuất hiện lặp đi lặp lại
-
Các mục đa năng dựa trên Inherit
- apport-cli, batcat, cargo, crash, gcloud, git, journalctl, man, opencode, psql, run-mailcap, systemd-resolve đều gắn Inherit cùng với Shell, Command, File read, File write
-
Các mục bao gồm cả mạng và di chuyển tệp
- bee, byebug, dstat, easy_install, facter, irb, knife, pipx, poetry, rake, sqlmap, vagrant, volatility còn có cả Reverse shell, Upload, Download, Library load
-
Nhóm trình soạn thảo và trình gỡ lỗi
- gdb, nvim, rvim, view, vim, vimdiff gộp Inherit với Shell, Reverse shell, Bind shell hoặc File read/write, Upload, Download, Library load
-
Nhóm trình quản lý gói và runtime
- apt, apt-get, bundle, bundler, pip, rpm, rpmdb, rpmquery, rpmverify, yum thường đi kèm cả shell, truy cập tệp và hành vi mạng
Mạng, shell, nạp thư viện
- Chức năng upload/download không chỉ gắn với công cụ mạng mà còn xuất hiện cùng shell và runtime ngôn ngữ
-
Công cụ thiên về truyền tải
- ab, curl, finger, ftp, nc, scp, sftp, smbclient, ssh, tar, tftp, wget, whois có Upload hoặc Download
-
Reverse shell và Bind shell
- bash, gawk, go, jjs, julia, ksh, lua, nawk, nc, nmap, node, openssl, pandoc, php, ruby, socat, socket, tclsh, telnet, zsh đều thuộc nhóm này
-
Các mục có Library load
- bash, byebug, curl, ffmpeg, gdb, gem, gimp, irb, knife, ldconfig, mysql, nginx, nvim, openssl, pip, python, rake, ruby, ssh-keygen, tclsh, vim, volatility, wish, yum đều nằm trong đó
Các mục leo thang đặc quyền
- Privilege escalation chỉ xuất hiện giới hạn ở những binary có gắn như một mục riêng
-
Danh sách liên kết leo thang đặc quyền
1 bình luận
Ý kiến trên Hacker News
Có vẻ nhiều bình luận đang hơi nhầm, nên nếu lấy ví dụ về lúc thứ này được dùng trong ngữ cảnh bảo mật/CTF thì sẽ như sau
Trong môi trường có shell bị hạn chế hoặc chỉ cho chạy một số lệnh/binary nhất định, thường vẫn có thể truyền tham số khá tự do
Lúc đó, dùng GTFOBins có thể dẫn tiếp tới việc đọc/ghi file hoặc thực thi lệnh, từ đó thoát khỏi ngữ cảnh bị giới hạn và lấy được shell
Nếu ai đó mở sudo hoặc gán SUID bit cho một GTFOBin, thì còn có thể đọc/ghi các file nhạy cảm hoặc chạy lệnh có đặc quyền theo cách mà ngay cả người cấu hình cũng không lường trước được
Cách xử lý quyền hạn của nó khá nguyên thủy vì chủ yếu dựa trên block-list và allow-list
Có lần trong một phiên làm việc tôi lỡ cấp quyền powershell cho Claude, rồi sau đó khi các công cụ như git bị chặn thì nó viết script powershell làm cùng việc để chạy, qua mặt phần quyền bị chặn
Một hệ thống bình thường thì sẽ không đưa powershell vào allow-list chung, nhưng nếu có khoảng hở giữa các mức cho phép theo từng công cụ thì có vẻ hoàn toàn có thể xoay xở bằng các kỹ thuật trên trang này
Tôi từng thấy ở một công ty cách triển khai là các chương trình nằm trong allowlist do quản trị viên thêm vào sẽ được chạy bằng
sudomà không cần mật khẩu, và ngay từ đầu đã có các công cụ đa dụng như vim, bash trong đóỞ góc độ người làm việc từ xa thì tôi còn thấy đó là may mắn, vì phần mềm nói là để "bảo vệ" máy tính của tôi này thực ra lại khiến việc ai đó đến chạy gì đó dễ hơn nhiều nếu tôi rời chỗ một lúc và quên khóa màn hình
Vài năm trước đội hỗ trợ cần chụp bắt mạng bằng
tcpdump, nên để xử lý nhanh họ thêm một quy tắc sudo khá thoáng về tham sốKhi đó việc đó có vẻ tự nhiên vì cổng hoặc NIC có thể thay đổi, nhưng thật ra
tcpdumpcó tùy chọn-zđể chỉ định lệnh nén, nên nếu nhét một lệnh "đặc biệt" vào đó thì có thể chiếm luôn máy chủsudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z rootTrông nhỏ nhặt nhưng những thứ như vậy thực sự rất dễ bị bỏ sót
Ngày nay các lớp như apparmor đôi khi giúp giảm rủi ro này, nhưng đổi lại cũng sinh thêm rắc rối khác và vẫn rất dễ cấu hình sai
Lần cuối tôi dùng thứ tương tự là trên máy tính trường cấp hai cài Windows 3.11 vào khoảng 1995
Họ khóa chỉ cho chạy vài ứng dụng được phê duyệt, mà một trong số đó là Word
Trong Word thì có thể dùng macro và dùng shell để chạy ứng dụng khác
Thế là chiếc máy tính bị khóa chỉ hiện vài ứng dụng thực chất lại thành máy có thể chạy gần như mọi thứ
Hồi đó cảm giác rất phấn khích, và từ sau đó tôi hầu như không còn thấy chuyện tương tự nữa
Thỉnh thoảng tôi có thấy người ta nói có thể thoát kiosk mode trên các màn hình cảm ứng thông tin ở cửa hàng hay trung tâm mua sắm, và chắc đó cũng cùng một nhóm vấn đề
Nhìn mục
restic - Shell, Command, Uploadlàm tôi thấy việc chỉnh để không chạy backup bằng root có phần được hợp lý hóa hơnThay vào đó tôi cho nó chạy bằng người dùng thường nhưng chỉ cấp read-all-files capability và bỏ shell đăng nhập
Tất nhiên trên desktop thì có thể là quá tay, và nếu kẻ tấn công đã chui được tới mức đó thì đằng nào cũng gần như đọc được mọi file và cài backdoor vào bản sao lưu
[0] https://man7.org/linux/man-pages/man7/capabilities.7.html
Chúng ta có cách đối phó với kẻ tấn công là con người từ xa, bot từ xa, và phần nào là cả con người cục bộ, nhưng bot tấn công cục bộ có thể tự viết mã thì giờ là đối tượng phải để tâm hơn rất nhiều so với trước
Nó cũng không hoàn toàn cùng một loại với malware
Tôi cũng từng xem container là một ranh giới liên quan và cho chạy toàn bộ tiến trình bên trong bằng root, nhưng khi có LLM chen vào thì tôi không còn chắc bảo mật ở mức OS đột nhiên trở nên quan trọng hơn, hay ngược lại là trở nên vô nghĩa hơn
Tôi hơi bối rối, ý ở đây là khi không có
catthì hãy dùngbase64 /path/to/input-file | base64 --decodethay chocat /path/to/input-fileàHay là
base64 /path/to/input-file | base64 --decodecó nghĩa là nó tự vượt qua cả quyền đọc fileTiến trình được gọi thường kế thừa nguyên quyền của người dùng đã chạy nó, và chỉ có ngoại lệ khi có setuid bit
Điểm chính là trong môi trường cố chặn lateral movement của kẻ tấn công bằng cách tắt các công cụ Unix chuẩn, thì vẫn có thể làm cùng việc bằng công cụ khác
Không phải vượt qua bản thân quyền hạn, mà là nói về việc trong một shell hạn chế chỉ cho phép vài lệnh thì vẫn tạo ra cùng kết quả bằng binary khác
Chuyện này trong CTF cực kỳ phổ biến
Chạy
base64với quyền root để mã hóa nội dung file sang base64, rồi giải mã đầu ra đó bằng một tiến trình base64 khác thì cuối cùng bạn vẫn xem được nội dung fileXét cho cùng thì nó cũng giống
cat, chỉ là thêm vài bướcTôi từng là người bảo trì của một trong những công cụ kiểu này, nên thấy ai đó bật được shell bằng nó thì khá buồn cười
Vừa sáng tạo vừa thú vị, và cũng là tư liệu hay
Hồi chơi
hackthebox.eutôi đã dùng thứ này rất nhiềuGTFOBins đã có từ khá lâu rồi, và ngay cả trước thời AI nó cũng đã là tài liệu hữu ích
Chính điều làm AI hữu ích là nó có thể kéo lên và tận dụng những tư liệu như thế này vốn đã tồn tại sẵn
Tôi không hiểu lắm vì thấy
base64cũng có trong danh sáchTheo tôi thì nó chỉ có thể đọc những file mà người dùng vốn đã truy cập được thôi, hay là tôi đang hiểu sai
Hay là mô tả vượt các hạn chế bảo mật cục bộ trên hệ thống bị cấu hình sai có nghĩa khác với cách tôi đang hiểu
Ví dụ đơn giản nhất là dù có đổi shell mặc định thành rbash, nếu người dùng vẫn chỉ cần chạy
bashlà vào được shell thường thì mọi thứ coi như mất ý nghĩasudoerscó thể cho phép chạy base64 bằng quyền rootTôi cũng không biết vì sao ai đó lại làm vậy, nhưng nếu rơi vào tình huống đó thì bạn sẽ có thể vượt qua giới hạn quyền dự định ban đầu và đọc bất kỳ file nào trên hệ thống
Hoặc nếu trong Claude Code người ta cho phép chạy
base64mà không cần xét duyệt thì có thể cũng đồng nghĩa mở đường để đọc cả các file bí mật như.envHoặc được cho phép tường minh trong
sudo -l, hoặc có thứ gì khác gọi công cụ đó dưới quyền rootSẽ hay hơn nếu nó cũng chỉ ra cả cách giảm thiểu các kiểu lách này
Ví dụ nếu trường hợp lấy shell qua
morethìđặt
SHELLthành/bin/falsetrước khi chạymoređổi sang
lessở secure modehoặc nếu dùng
morequasudothì dùng cờ NOEXEC chẳng hạnNhững cách khác rốt cuộc vẫn có phần dựa vào may rủi
Khá ngầu, và có những cách tiếp cận sáng tạo mà tôi không ngờ tới
Ví dụ như yt-dlp thì tôi chưa từng nghĩ đến
Chắc phải xem lại việc cứ cài sẵn nó thôi