题目分析
入门nc题
题目只给了远程环境,试了几次,发现是在给定进制下的+-*%的自动化计算,关键在于使用pwntools接受信息,以及进制的转换
接受base可以使用
p.recvuntil(b'base ')base=int(p.recvuntil(b') ',drop=True))接受src1和src2和符号可以用
src1=int(p.recvuntil(b' ',drop=True),base)print(src1)logic=p.recvuntil(b' ',drop=True)print(logic)src2=int(p.recvuntil(b' =',drop=True).decode(),base)print(src2)int自带进制转换为十进制
然后就是计算以后的转换为原来进制,numpy库有base_repr方法可以用
计算就这样
matchlogic.decode():case'+':ans=np.base_repr(src1+src2,base)case'-':ans=np.base_repr(src1-src2,base)case'*':ans=np.base_repr(src1*src2,base)case'%':ans=np.base_repr(src1%src2,base)然后传回去就行
但是不知道重复几次,我1000次累加,发现设为3000次时,2025次以后就直接出flag并停止了,所以实际上exp就用2025次就行。
exp
frompwnimport*importnumpyasnp context.log_level='debug'p=remote('challenge.imxbt.cn',32000)p.recvuntil(b"So let's test your pwntools!\n")for_inrange(2027):p.recvuntil(b'base ')base=int(p.recvuntil(b') ',drop=True))print(f'base={base}')src1=int(p.recvuntil(b' ',drop=True),base)print(src1)logic=p.recvuntil(b' ',drop=True)print(logic)src2=int(p.recvuntil(b' =',drop=True).decode(),base)print(src2)matchlogic.decode():case'+':ans=np.base_repr(src1+src2,base)case'-':ans=np.base_repr(src1-src2,base)case'*':ans=np.base_repr(src1*src2,base)case'%':ans=np.base_repr(src1%src2,base)p.recvuntil(b':')p.sendline(ans)p.interactive()