[PWN][基础篇]printf漏洞介绍

简介: [PWN][基础篇]printf漏洞介绍

printf漏洞介绍

1、概念

2、漏洞成因

3、实例代码

4、实例二


printf(format,<参量表>)

1、概念

printf接受变长的参数,其中第一个参数为格式化字符串,后面的参数在实际运行时将与格式化字符串中特定的子字符串进行对应,将格式化字符串中的特定字串,解析为相应的参与值。格式化字符串就是%这种。

2、漏洞成因

printf函数在执行时,首先进行格式化字符串的解析–从栈(或者寄存器)获取参数并与符号说明进行匹配,然后将匹配的结果输出到屏幕上,那么 ,如果格式化字符串中的符号声明与栈上参数不能正确匹配,比如参数个数少于符号声明个数时,就会造成泄漏。

而本书,printf也就是一个有力的攻击武器,我们可以通过控制字符串的值来实现更多的泄露或者完成个高级的利用。

3、实例代码

image.png

gcc编译之后用gdb打开

我们可以看到红框内edx是“My name is %s”,这个时候注意我们的代码,printf后面是没有跟参的,在本该压参的位置没有参数,导致了压入的是“My name is %s”。

1.png

我们看到红框呢内,程序开始调用printf函数了,我们的格式是给了,但是var这个参数是什么我们没有给,所以他就会到esp,高4位的地方去取值

1.png

所以说这个是残缺的程序,那我们来帮助他完成。

set *(0xffffd844) = 0x804a008

1.png

4、实例二

代码如下

image.png

gcc编译后使用windbg打开,首先查看一下main函数,如下图

1.png

红框中就是就是read函数,且我们要在sub esp,0x4下断点,因为那里开始要分配空间

1.png

当我们单步到call read时,我们可以输入自己想说的话,最后程序也是可以输出的,这就利用了printf漏洞


希望大家可以有所收获!!!

相关文章
|
NoSQL 安全 Shell
简单的PWN学习-ret2shellcode
最近在学习pwn,这是一道2016年的pwn题目,主要学习关于栈溢出以及劫持栈指针达到命令执行的效果,笔者水平较差,请轻喷
|
前端开发 rax Shell
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(上)
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)
799 0
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(上)
每日一题---383. 赎金信[力扣][Go]
每日一题---383. 赎金信[力扣][Go]
每日一题---383. 赎金信[力扣][Go]
|
存储 安全 NoSQL
[PWN][基础篇]如何利用printf漏洞突破canary保护
[PWN][基础篇]如何利用printf漏洞突破canary保护
272 0
[PWN][基础篇]如何利用printf漏洞突破canary保护
[PWN][高级篇]ROP-ret2libc基础知识
[PWN][高级篇]ROP-ret2libc基础知识
479 0
[PWN][高级篇]ROP-ret2libc基础知识
|
NoSQL Shell
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(下)
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)
276 0
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(下)
|
Shell Linux Python
[PWN][知识小节]shellcode生成和测试
[PWN][知识小节]shellcode生成和测试
281 0
[PWN][知识小节]shellcode生成和测试
|
安全 Linux C语言
[PWN][基础篇]保护函数和溢出实例
[PWN][基础篇]保护函数和溢出实例
172 0
[PWN][基础篇]保护函数和溢出实例
|
Shell Linux
[PWN][进阶篇]ROP_Ret2Shellcode-32实例(下)
[PWN][进阶篇]ROP_Ret2Shellcode-32实例
173 0
[PWN][进阶篇]ROP_Ret2Shellcode-32实例(下)
|
前端开发 rax Shell
[PWN][进阶篇]ROP-Ret2Shellcode-64位实例(上)
[PWN][进阶篇]ROP-Ret2Shellcode-64位实例
407 0
[PWN][进阶篇]ROP-Ret2Shellcode-64位实例(上)