程序源码
题目分析
分析一下程序源代码,发现需要输入一个长度正好为20的字符串作为参数。
check_password()中将这个长度为20的字符串分为5部分,每一部分4字节,并将这4字节转化成整型数求和,求和结果和hashcode作比较,hashcode = 0x21DD09EC
,如果相等就打印flag。
解题思路
找5个整型数,让他们相加等于568134124(hashcode)
把这5个数转化成16进制,构造长度为20的字符串
这里要注意两点,一是构造的字符串中不能出现字符串终止的标记’\x00’,二是要注意内存中的小端存储(可使用pwn库中的p32()函数转换)
解题脚本
#!/usr/bin/python
import subprocess
from pwn import *
hashcode = 0x21DD09EC
a = 0x01020304
b = hashcode - 4 * a
payload = p32(a) * 4 + p32(b)
target = subprocess.Popen(args=['/home/col/col',payload])
由于/home/col目录下没有权限创建文件,脚本需要放在/tmp目录下执行
$ vim /tmp/col.py
# ----edit-it------
$ python /tmp/col.py