pwn入门感受
他是想让你来计算给出的100道题计算结果是否正确,文件没有源代码,所以初步判定这道题属于Blind Pwn类型,具体可以看这个链接CTF Blind pwn题型学习笔记,以了解Blind Pwn的相关知识。
开始有个很矛盾的地方,就是不知道盲打有很多相应的攻击方式,不知道用哪一种,就在网上搜索都试一试,但是没有一个行得通,就想到之前打ciscn时有一道类似的web题,就是写脚本暴力破解得到flag。
接下来就开始尝试写代码,首先要用到pwntools,这是python的第三方库(支持python2与python3),在网上可以找相应的下载方式,可以在ubuntu和Windows上使用(Windows上下载使用有点玄学,得看运气)。首先建立连接这里是远程连接就用
from pwn import *
sh = remote("IP addr",port) //本地程勋就用sh = process("./程序名")
pwntools库中有readline,sendline函数(有很多读写函数,可以在官方文档上看)
分析给出的信息段,从 Welcome...... 到 Now.. start 一共有7行,就用了7个readline函数,之后是有规律的出现三行,前两行给出两个加数,第三行给出计算的结果,一共有100道题。使用循环语句:
for i in range(100):
sh.readline()
sh.readline()
//这两个函数就只是把信息接受到,不做任何处理,因为没啥用。接下来的是关键
s=sh.readline() //把第三行的计算公式给读下来,读出来的是字符串
接下来用到split函数,先把“+”两边的分开,numbers[0]="762",numbers[1]="135=897",将numbers[0]转换为int类型
numbers = s.split(b"+")
num0=int(numbers[0])
再将numbers[1]用split函数把“=”两边的分开,得到s[0]="135",s[1]="897",在强制转换为int类型
s = numbers[1].split(b"=")
num1=int(s[0])
num2=int(s[1])
最后就是计算num0与num1的和与num2是否相等,根据相应要求发送对应字符串。
if(num0+num1==num2):
sh.sendline(b'BlackBird')
print("BlackBird")
else:
sh.sendline(b'WingS')
print("WingS")
以上用到print函数只是为了更加清晰的看到这个过程。
最后根据结果一步一步增加代码,最终exp如下:
得到flag
1 个帖子 - 1 位参与者