作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进行调用,例如 char s[20] = “Hello world!\n”; printf(“%s”, s); 然而,有时候为了省事也会写成 char s[20] = “Hello world!\n”; printf(s); 事实上,这是一种非常危险的写法.由于printf函数族的设计缺陷,当其第一个…
本文作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42943-1-1.html 0×00 printf函数中的漏洞printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进行调用,例如 然而,有时候为了省事也会写成 事实上,这是一种非常危险的写法.由于printf函数族的设计缺陷,当其第一个参数可被控制时,攻击者将有机会对任意内存地址进行读写操作. 0×01 利用…
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/amd64下的Linux Pwn常见的Pwn手法,如栈,堆,整数溢出,格式化字符串,条件竞争等进行介绍,所有环境都会封装在Docker镜像当中,并提供调试用的教学程序,来自历年赛事的原题和带有注释的python脚本. 课程回顾>> Linux Pwn入门教程第一章:环境配置 Linux Pwn入门教程…
目录 PWN学习之格式化字符串漏洞 格式化输出函数 格式化字符串漏洞 漏洞利用 使程序崩溃 栈数据泄露 任意地址内存泄漏 栈数据覆盖 任意地址内存覆盖 PWN学习之格式化字符串漏洞 格式化输出函数 可变参数:https://blog.csdn.net/smstong/article/details/50751121 (C语言可变参函数的实现) 首先我们了解格式化字符串漏洞前,需要对格式化输出的函数进行一个了解,在C中格式化输出函数一共有如下: fprintf() "按照格式字符串将输出写入流中.…
目录 [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precision(精度) length(类型长度) n$(参数字段) 格式化字符串漏洞 格式化字符串漏洞原因: 漏洞利用 使程序崩溃(测试) 栈数据泄露(堆栈读) 获取栈变量数值 获取栈变量字符串 堆栈读总结 栈数据覆盖(堆栈写) 覆盖变量 任意地址内存泄漏(任意读) 任意地址内存覆盖(任意写) 覆盖小数(小于…
前言 格式化字符串漏洞也是一种比较常见的漏洞利用技术.ctf 中也经常出现. 本文以 njctf 线下赛的一道题为例进行实战. 题目链接:https://gitee.com/hac425/blog_data/blob/master/decoder 正文 程序的流程如下 部分函数已经进行了标注,看程序打印出来的提示信息就知道这个是一个 base64 解码的程序,然后可以通过 猜测 + 验证 的方式,找到那个 用于 base64 解码的函数. 这个程序的漏洞在于将 base64 解码后的字符串直接传…
前言 这是 0ctf 的一道比较简单的格式化串的题目. 正文 逻辑非常简单 do_read 可以打印内存地址的数据,可用来 泄露 got. leave 格式化字符串漏洞. printf(s) 直接调用 exit 退出了.不过可以使用 %1000c 触发 printf 里面的 malloc 和 free, 所以思路很清楚了,修改 free_hook 或者 malloc_hook 为 one_gadget, 并且在格式化串末尾加上 %1000c触发 malloc 和 free 最后 最开始修改 fr…
linux最早的漏洞防护机制nx-stack刚刚出现后就有人想出了突破方法.那就是只有栈是不可执行,而除了栈以外的其他地方还是可以执行的,只要把返回地址执行别的地方就可以. 一.格式化字符串漏洞 格式化字符串漏洞在Windows下很难以利用,但是在Linux下的pwn题目中出现的频率是很高的. 格式化字符串的“$”操作符,其允许我们从格式化字符串中选取一个作为特定的参数.例如, printf("%3$s", 1, "b", "c", 4); 最终…
1.1    canary内存保护机制 1.1.1    canary工作原理 canary保护机制类似于/GS保护机制,是Linux下gcc编译器的安全保护机制之一,在栈中的结构如下图所示: 在函数初始化的时候回初始化一个随机的canary值置于缓冲区的末端,在函数返回之前会对canary的值进行验证,无误则正常返回. 1.1.2    通过格式化字符串漏洞绕过canary ⑴.原理分析: 因为通过格式化字符串漏洞可以实现任意内存的读写,而且,在一个程序里,不同函数在运行中使用的canary值…
本文系原创,转载请说明出处 本文为基于CTF WIKI的PWN学习 0x00 格式化字符串原理 先附一张经典的图,如下 其栈上布局如下: some value 3.14 123456 addr of "red" addr of format string : " Color %s, Number %d, Float %4.2f" 如果程序写成了: printf("Color %s, Number %d, Float %4.2f"); 分别将栈上的…