Linux的PWN并不難 這是一套針對初學者的Linux二進制漏洞利用開發任務,目前這一套學習內容主要針對的是堆棧緩沖區溢出問題。 我創建這個項目是為了學習如何在不同體系結構上執行簡單的二進制開發,出于教育目的,在解決這一系列任務時,必須遵守下面列出的一組規則。這些任務其實飛鏟小,有的規則是故意沒有實現的。它與大多數CTF挑戰相反,因為這些任務是直接提供給大家的,我們只需要去實現即可。 規則 1、所有任務都必須使用建議的方法來解決,即使你有其他更簡單的方法。2、所有任務都必須通過假定啟用或禁用的特定保護來解決,即使體系結構、工具鏈或特定環境不支持它們。3、所有任務都假設了一個動態鏈接的libc和已知的二進制文件。4、所有的ROP鏈都必須手動構造。 1、:溢出buffeer,并重寫x的值。2、:使用not_called的地址重寫堆中任意的返回地址。3、:跳轉到一個one_gadget地址,確保滿足特定的條件,對于某些架構,可能需要使用到ROP鏈。4、:在棧中分配一個shellcode,并啟動/bin/sh。5、:跟之前的任務一樣,但這里的棧地址是未知的。6、:組成一個ROP鏈來執行system(“/bin/sh”)。7、:組成一個ROP鏈并通過syscall執行execve(“/bin/sh”,NULL, NULL)8、:組成一個ROP鏈來重寫x值,并跳轉到not_called。 空白處意味著保護狀態跟建議的方法不相關。 禁用ALSR: echo 0 | sudo tee /proc/sys/kernel/randomize_va_space 啟用ASLR: echo 2 | sudo tee /proc/sys/kernel/randomize_va_space 解決方案 這些解決方案僅供參考,并不一定適用于所有場景。 環境要求 這些任務已經在x86-64 CPU設備上進行了測試,測試平臺為Linux Mint 19.1,下面是相關的軟件版本: 工具安裝 安裝包: sudo apt-get install build-essentialsudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnugcc-mips-linux-gnu gcc-mips64-linux-gnuabi64 gcc-powerpc-linux-gnugcc-powerpc64-linux-gnu gcc-sparc64-linux-gnusudo apt-get install libc6-dev:i386 libc6-armhf-cross libc6-arm64-cross libc6-mips-crosslibc6-mips64-cross libc6-powerpc-cross libc6-ppc64-cross libc6-sparc64-crosssudo apt-get install qemu-usersudo apt-get install gdb gdb-multiarch#These are probably not required, but just in case:#sudo apt-get install gcc-7-multilib gcc-multilib-arm-linux-gnueabigcc-multilib-mips-linux-gnu gcc-multilib-mips64-linux-gnuabi64gcc-multilib-powerpc-linux-gnu gcc-multilib-powerpc64-linux-gnu 為QWMU和pwntools安裝qemu-binfmt: sudo mkdir /etc/qemu-binfmtsudo ln -s /usr/arm-linux-gnueabihf/ /etc/qemu-binfmt/armsudo ln -s /usr/aarch64-linux-gnu /etc/qemu-binfmt/aarch64sudo ln -s /usr/mips-linux-gnu/ /etc/qemu-binfmt/mipssudo ln -s /usr/mips64-linux-gnuabi64/ /etc/qemu-binfmt/mips64sudo ln -s /usr/powerpc-linux-gnu/ /etc/qemu-binfmt/ppcsudo ln -s /usr/powerpc64-linux-gnu/ /etc/qemu-binfmt/ppc64sudo ln -s /usr/sparc64-linux-gnu/ /etc/qemu-binfmt/sparc64 easy-linux-pwn:【GitHub傳送門】 |
|