20145308 《網絡對抗》 逆向及BOF基礎實踐 學習總結

20145308 《網絡對抗》 逆向及BOF基礎實踐 學習總結

實踐目的

  • 經過兩種方法,實現程序可以運行本來並不會被運行的代碼shell

    實踐原理

  • 利用foo函數的Bof漏洞,構造一個攻擊輸入字符串,覆蓋返回地址,觸發getShell函數
  • 手工修改可執行文件,改變程序執行流程,直接跳轉到getShell函數網絡

    知識點學習總結

    彙編、機器指令

  • 彙編指令與機器指令一一對應函數

    EIP、指令地址

  • %eip存儲指向下一條要執行的指令的地址
  • %ebp存儲棧底指針,棧基址
  • %esp存儲棧頂指針,始終指向棧頂
  • ESP存儲棧底地址,是由ESP在函數調用以前傳遞給EBP的。等到調用結束以後,EBP會把其地址再次傳回給ESP。因此ESP再次指向了函數調用結束後,棧頂的指針學習

    方法一

    反彙編瞭解程序

  • 首先將可執行文件pwn1複製另存爲文件名爲學號20145308的文件並執行,可實現回顯輸入的字符串的功能
    3d

  • 使用objdump -d 20145308 | more命令查看目標文件20145308的反彙編代碼
  • getshell
    指針

  • foo
    code

  • main
    blog

  • 可看到main函數在call 8048491處調用執行foo函數,對應機器碼爲e8 d7ffffff
  • 想要使main函數在此處改成跳轉執行getshell函數,修改d7ffffff(EIP+d7ffffff=foo)c3ffffff(EIP+c3ffffff=getshell)便可ip

    直接修改機器指令,改變程序執行流程

  • 使用vi打開20145308,將顯示模式切換至16進制模式,並查找到e8 d7
  • d7改成c3,並將模式改回原格式,保存
    字符串

  • 運行修改後的文件,成功執行getshell

方法二

反彙編瞭解函數

  • 複製可執行文件pwn120145308lhy

  • 使用objdump -d 20145308lhy | more進行反彙編
  • 目標觸發函數getshell

  • 正常運行的可執行函數foo

  • 讀入字符串部分函數

確認輸入字符串哪幾個字符會覆蓋到返回地址

  • 輸入長度超過緩衝區的字符串

  • 經過查看EIP寄存器的值,發現是5覆蓋返回地址

  • 再次輸入另外一字符串,精確肯定是字符串的哪一個位置覆蓋返回地址

  • 查看EIP寄存器,發現是1234四個數字覆蓋返回地址

構造輸入字符串

  • 構造用getsell地址覆蓋返回地址的字符串

  • 使用16進制格式查看input文件

  • input經過管道符|做爲20145308lhy的輸入,緩衝區溢出,覆蓋返回地址,返回到getshell,截獲getshell後輸入命令ls成功執行

其餘

  • 本次實踐使用兩種方法實現了使程序執行了getshell,第一種方法爲利用foo函數的Bof漏洞,構造一個攻擊輸入字符串,覆蓋返回地址,觸發getShell函數;第二種方法爲手工修改可執行文件,改變程序執行流程,直接跳轉到getShell函數。經過此次實踐複習加深了對上學期學習的Linux命令的理解,也對本次實踐所要學習的知識有所掌握
相關文章
相關標籤/搜索