## 3.1、二進制的漏洞利用(1)
二進制的漏洞利用是破壞編譯程序的過程,令程序違反自身的可信邊界從而有利于你——攻擊者。本部分中我們將聚焦于內存錯誤。通過利用漏洞來制造軟件內存錯誤,我們可以用某種方式重寫惡意程序靜態數據,從而提升特定程序的權限(像遠程桌面服務器)或通過劫持控制流完成任意操作和運行我們所用的代碼。
如果你嘗試在已編譯的C程序中找bug,知曉你要找的東西是很重要的。從認識你發送的數據被程序用在什么地方開始,如果你的數據被存儲在一個緩沖區中,要注意到它們的大小。編寫沒有錯誤的C程序是非常難的,[CERT C Coding Standard](https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Coding+Standard)手冊匯總了許多錯誤出現的方式。對[commonly misused APIs](http://stackoverflow.com/questions/4588581/which-functions-in-the-c-standard-library-commonly-encourage-bad-practice)稍加注意是可以加快了解的捷徑。
一旦一個漏洞被確認,它就可以被用來威脅程序的完整性,然而,有各種不同的方式可以達到這個目標。對于像Web服務器這樣的程序,獲取另一個用戶的信息可能是最終目標。另一方面,修改你的權限可能是有用的,比如修改一個本地用戶權限為管理員。
**課程**
第一套課程是《Memory Corruption 101》,提供了Windows環境下緩沖區溢出利用一步一步的解釋和相關背景。第二套課程《Memory Corruption 102》,涵蓋了更多高級主題,包括Web瀏覽器漏洞利用。這兩套課程都是針對Windows的例子,但技術和過程可以用于使用x86指令集的其他操作系統。記住,當你處理UNIX/Linux二進制時,函數名稱和有時候的調用約定是不一樣的。
* [Memory Corruption 101](http://vimeo.com/31348274)
* [Memory Corruption 102](http://vimeo.com/31831062)
**工具**
我們建議使用GDB來調試該部分的挑戰題,因為它們都是在32位Linux下編譯的,然而,GDB更適合用來調試源代碼,而不是沒有標識符和調試信息的純粹二進制程序。諸如[gdbinit](https://github.com/gdbinit/gdbinit)、[peda](https://code.google.com/p/peda/)和[voltron](https://github.com/snarez/voltron)可以使gdb在調試無源碼的程序時更有用。我們建議在你的home目錄下創建一個至少包含以下命令的.gdbinit文件:
```
set disassembly-flavor intel
set follow-fork-mode child
```
**挑戰工坊**
為了運行這些挑戰題,你需要安裝[Ubuntu 14.01(32-bit)](http://www.ubuntu.com/download/desktop/thank-you?country=US&version=14.04&architecture=i386)虛擬機。我們建議使用[VMware Player](https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/6_0),因為它免費且支持性很好。在你運行虛擬機后,打開終端并運行sudo apt-get install socat來安裝socat。
在此次挑戰工坊中共有三道挑戰題,當你在git中clone該手冊的repository后,每道題都包含在其目錄中,每道題的最終目標是操縱執行流以讀取flag。對于每道題,請嘗試將反匯編轉換為C代碼。在嘗試之后,你可以通過查看提供的實際C源碼來確認你的猜測,然后,嘗試利用漏洞來讀取flag。
**挑戰題:Easy**
確認目錄中easy程序的flag。當你執行easy后,它會在12346端口監聽指令。
**挑戰題:Social**
和easy類似,確認目錄中social程序的flag和作為social程序的host.sh。當你執行social后,它將在12347端口監聽指令。
**資源**
* [Using GDB to Develop Exploits – A Basic Run Through](http://www.exploit-db.com/papers/13205/)
* [Exploiting Format String Vulnerabilities](https://trailofbits.github.io/ctf/exploits/references/formatstring-1.2.pdf)
* [Low-level Software Security: Attacks and Defenses](https://trailofbits.github.io/ctf/exploits/references/tr-2007-153.pdf)