[PWN][基础篇]如何利用printf漏洞突破canary保护

简介: [PWN][基础篇]如何利用printf漏洞突破canary保护

如何利用printf漏洞突破canary保护

使用的实例代码如下

image.png

为了配合本次实例的教学,大家在编译时,不加pie保护,加cannary保护,整个的流程就是,分析程序之后,编写exp,利用printf漏洞(填充func函数,使其返回地址为exploit函数)来突破canary并且覆盖ret。

image.png

之后使用gdb开文件,查看func函数

1.png

来自英语白痴的小tip:

image.png

我们可以大概搞清楚func的流程,就是先read,然后printf,然后read,就是这样子。

我们下断就下到printf这里,我输入的测试用例是HHH

1.png

我们回去看一下代码,输出的格式format我们没有给,所以默认的输出就是esp+4,现在我们来看一下栈吧,也就是0x28

1.png

image.png

这里查看的canary的值,也就是0x619da200,我们在stack中找到他,然后计算一下canary和栈顶之间的偏移量是多少

image.png

1.png

我们重新运行,并且用一下format格式,也就是我输入的%15$08x,上图还是断到了printf函数,我们n,看看输出了什么

image.png

然后我们查看一下stack 0x28,看看canary的值

image.png

也就是我们输出的那个值。

我们成功的将cannary的值输出了,那我们就可以写exp了

image.png

上面就是exp了,现在我给大家讲一下exp为甚这样子写

首先导入pwn包,然后process()捕捉进程,然后计算canary的偏移,就是canary和输入的字符串的距离,第二个红框和第三个红框之间的距离,也就是8,所以canary_offset = 8*4(个字节)

image.png

canary_offset * ‘a’ 就是把那8行填充为垃圾数据’a’

然后加上canary了,然后定义个变量,canary

首先要发送泄露的地址,也就是p.sendline(%15&08x) 这里就是我们一开始查看的那个,这个格式是一个string.format(),然后我们要接收这个泄露的地址,所以就是canary = recv(),然后打印出canary,是为了测试一下canary对不对,这个写不写无所谓的,后面的[:8],是因为记录了回车,也就是那个\n,但是我们不需要它,所以只要8位就可以了。

payload目前是:canary_offset * ‘a’ + canary

然后我们应该把ret的那段也填充了,所以创建一个变量ret_offset为什么是3*4,如下图

image.png

现在的payload是:canary_offset * ‘a’ + canary + ret_offset * ‘a’

然后我们要加上然后地址,我们要getshell,然后的地址应该是函数exploit(),我们在gdb中用dissass exploit来查看,如下图

image.png

设置新变量exploit_add = p32(0x08049192) p32 告诉电脑这是个32位地址

最后就是sendline,给第二个read(大家回头看看程序的代码)发送payload

最后一步获取运行时环境p.interactive()

还有比较重要的一点就是在我们接收到的canary是人眼看到的正序,但是呢程序是小端存储,所以我们要把canary变成倒叙传给程序,也就是canary = cannary.decode(“hex”)[::-1]

大功告成

我们运行一下exp,看下图:

image.png

1.png

getshell成功!!!!!!!!

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

exp写起来太恶心了,但是写完的时候是真的爽,pwn基础篇完结撒花,呱唧呱唧!!!!

相关文章
|
安全 Linux 网络安全
/var/log/secure日志详解
Linux系统的 `/var/log/secure` 文件记录安全相关消息,包括身份验证和授权尝试。它涵盖用户登录(成功或失败)、`sudo` 使用、账户锁定解锁及其他安全事件和PAM错误。例如,SSH登录成功会显示"Accepted password",失败则显示"Failed password"。查看此文件可使用 `tail -f /var/log/secure`,但通常只有root用户有权访问。
3708 4
|
2月前
|
存储 安全 前端开发
Web渗透-文件上传漏洞-上篇
文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
349 1
Web渗透-文件上传漏洞-上篇
|
前端开发 rax Shell
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(上)
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)
1121 0
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(上)
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
561 3
|
数据安全/隐私保护 Windows
BUUCTF Windows系统密码 1
BUUCTF Windows系统密码 1
743 0
BUUCTF Windows系统密码 1
|
数据挖掘 测试技术 API
8个非常好用的 Python 效率工具
8个非常好用的 Python 效率工具
262 0
|
Linux Shell KVM
Kali系统基于qemu虚拟化运行img镜像文件
QEMU是一个由Fabrice Bellard创建的开源虚拟化器,能在多种平台上运行,如x86、ARM、PowerPC。它支持硬件仿真和虚拟化,允许在宿主系统上运行不同架构和OS,如Windows、Linux。QEMU特点包括硬件仿真、虚拟化支持(与KVM配合)、磁盘和网络仿真、快照及回滚功能。此外,文档还展示了在Kali Linux中安装和配置QEMU的步骤,包括下载、内存设置、源更新、软件安装、创建桥接脚本以及启动和管理虚拟机。
904 1
Kali系统基于qemu虚拟化运行img镜像文件
|
存储 前端开发 JavaScript
反射型 XSS 攻击演示(附链接)
反射型 XSS 攻击演示(附链接)
|
安全 Docker 容器
漏洞扫描—Awvs&Nessus(Docker版V3.0​)更新
漏洞扫描—Awvs&Nessus(Docker版V3.0​)更新
漏洞扫描—Awvs&Nessus(Docker版V3.0​)更新