1. 程式人生 > >【pwnable.kr】 asm seccomp sadbox & 64位shellcode 讀 flag

【pwnable.kr】 asm seccomp sadbox & 64位shellcode 讀 flag

image-20181122132244133

題目資訊

nc之後檢視資訊如下。根據readme提示,本關是要求登陸伺服器後,nc 9026埠連線asm程式來讀flag。flag檔名很長。

image-20181122131906999

看了原始碼發現程式做了如下操作。mmap了一塊記憶體讀取shellcode並執行,開啟了seccomp沙箱[1],限制只能使用open read write exit exit_group系統呼叫。因此本關就是利用這些系統呼叫來寫64位下讀flag的shellcode。

可以通過cat /proc/self/status |grep -i seccomp檢視當前系統是否打開了seccomp沙箱。

image-20181122131821074

exp

讀取flag的shellcode思路如下:

image-20181122132001925

x64的部分系統呼叫參考[2]。本來自己手寫彙編,push 字串到棧上,再呼叫pwntools的asm生成機器碼。遇到了兩個問題:

  • 第一個問題:即使設定了arch為amd64,pwntools asm(push number),number如果超過4位元組會報錯。用mov再push解決 。
  • 第二個問題:64位下呼叫系統呼叫需要用syscall而不是int 0x80。

部分exploit:

image-20181122132047995

image-20181122131444774

PS:這題之前沒有除錯,間隔了很久才寫了wp,感興趣的可以去做做pwnable.tw上的orw,一個是32位,一個64位,利用思路一樣。

此外,以後程式碼或者輸出準備儘量用圖片了,雖然佔用一點空間,但是讀起來舒服一點。

參考