CTF總結-PWN篇

一、通用過程

  1. 通過file指令查看二進制文件是32位還是64位,這個影響特別大(涉及參數的傳遞方式)
  2. 通過checksec指令查看可執行文件的保護措施開啓情況
  3. 運行一下這個可執行文件,瞭解一些程序運行流程
  4. 開始通過pwntools解題

指令速查

  • ropper -f [文件名] --search [“指令”]
    • ropper -f pwn-2 --search “pop rdi; ret”
      (注意rdi後面的分號和空格)

二、緩衝區溢出攻擊

  1. 尋找可以進行攻擊的位置
  2. 通過cyclic [number] 獲得一個長度爲number的序列
  3. 在攻擊處輸入上一步獲得的序列,查看報錯信息
  4. 通過cyclic -l [序列] 來判斷從第幾位開始覆蓋的是返回地址
  5. 構造payload
  6. 構造payload時請注意是32位程序還是64位程序,對於32位程序,傳遞參數可以通過棧溢出來直接修改參數信息,對於64位程序,可能需要利用GOT技術。
  • 第2~4步也可略過,改爲根據源代碼進行推算,但是這樣比較繁瑣,而且容易出錯。
  • gdb會提示報錯信息,但是請注意它是小端存儲還是大端存儲,比如它提示0x61616167時,對應的不一定是aaag,在小端存儲下對應的其實是gaaa.
  • 請注意,並不是只有gets這種不限制長度的字符串讀取才是緩衝區溢出的信號,對於不限制長度的strcpy也可能導致緩衝區溢出。

三、整型溢出攻擊

  1. 一般如果涉及對字符串長度的判斷,可能就是這一類題型,但往往不會作爲單獨的考點出現,一般會結合其他考點,比如整型溢出+緩衝區溢出。
  2. 解題方法也很簡單,利用整型溢出即可。主要是找到能夠攻擊的位置。

待補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章