crazyWP

题目来源:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=1&id=5509&page=3
攻防世界crazy
这题进去之后发现要求输入32长度的字符串,然后会提示第几位有错误,就想到了可以穷举。
先给出代码:

from pwn import*
key="!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
flag='tMx~qdstOs~crvtwb~aOba}qddtbrtcd'.ljust(32,'!')
while(True):
    p = process("./crazy")
    p.sendline(flag)
    p.recvuntil("You did not pass ")
    i=int(p.recv(2))
    print(flag[0:i+1])
    for x in range(len(key)):
        if flag[i]==key[x]:
            t=list(flag)
            t[i]=key[x+1]
            flag=''.join(t)
            break

写的过程中遇到了很多问题,但最后还是搞了出来。
总体思路是枚举flag,每次枚举一位。代码中利用了pwntools:process()是创建一个进程;sendline()是发送并补充’\n’;recvuntil()是直到遇到什么为止;recv()是接受指定数目的字节。利用这些工具很轻松的就可以把框架写出来。
过程中遇到了一些问题。一个是每次运行时运行一会就停止了,附带一系列报错信息,我的解决方法是重定义flag的初始值,每次推进几位,然后多次重复。还有一个问题是一个小细节,接收错误位置i时应该写p.recv(2),而不是p,recv(1)。这个问题差点把我心态搞炸。
总体来说思路比较简单,当做暴力的练习还是十分不错的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值