pwnable 笔记 Toddler's Bottle - collision

pwnable 笔记 Toddler's Bottle - collision_第1张图片

程序源码

pwnable 笔记 Toddler's Bottle - collision_第2张图片

题目分析

分析一下程序源代码,发现需要输入一个长度正好为20的字符串作为参数。
check_password()中将这个长度为20的字符串分为5部分,每一部分4字节,并将这4字节转化成整型数求和,求和结果和hashcode作比较,hashcode = 0x21DD09EC,如果相等就打印flag。

解题思路

  1. 找5个整型数,让他们相加等于568134124(hashcode)

  2. 把这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

pwnable 笔记 Toddler's Bottle - collision_第3张图片

你可能感兴趣的:(pwn,pwnable.kr,题解)