這是一套Linux Pwn入門教程系列,作者依據i春秋Pwn入門課程中的技術分類,並結合近幾年賽事中出現的一些題目和文章整理出一份相對完整的Linux Pwn教程。
課程回顧>>
Linux Pwn入門教程第一章:環境配置
Linux Pwn入門教程第二章:棧溢出基礎
本系列教程僅針對i386/amd64下的Linux Pwn常見的Pwn手法,如棧,堆,整數溢出,格式化字元串,條件競爭等進行介紹,所有環境都會封裝在Docker鏡像當中,並提供調試用的教學程序,來自歷年賽事的原題和帶有注釋的python腳本。
今天是Linux Pwn入門教程第三章:ShellCode的使用、原理與變形,本文篇幅較長,希望大家耐心看完,閱讀用時約15分鐘。
ShellCode的使用
在上一篇文章中我們學習了怎麼使用棧溢出劫持程序的執行流程。為了減少難度,演示和作業題程序裏都帶有很明顯的後門。然而在現實世界裡並不是每個程序都有後門,即使是有,也沒有那麼好找。因此,我們就需要使用定製的ShellCode來執行自己需要的操作。
首先我們把演示程序~/Openctf 2016-tyro_shellcode1/tyro_shellcode1複製到32位的Docker環境中並開啟調試器進行調試分析。需要注意的是,由於程序帶了一個很簡單的反調試,在調試過程中可能會彈出如下窗口: