黑客练手入门| pwnable.kr—幼儿瓶—02:collision

前言
担心有人不知道 pwnable.kr 是什么,所以觉得有必要简单介绍一下它。
pwnable.kr 介绍
pwnable.kr 是一个非商业性的Wargame网站 ,它提供有关系统开发的各种 pwn 挑战。pwnable.kr 的主要目的是'有趣'。并把每个挑战视为游戏。地址:http://pwnable.kr/
该怎么玩
每个挑战都有对应的标记文件(类似于 CTF),您需要阅读该文件并提交给 pwnable.kr 以获得相应的分数。为了读取标志文件,您需要一些有关编程,逆向工程,漏洞利用,系统知识,密码学的技能。每个挑战都有作者的预期解决方案,但是,还有许多意外的解决方案。
挑战分为四类:
幼儿瓶:非常简单的挑战,都是一些简单的错误。
Rookiss:新手需要掌握的典型漏洞利用。
怪诞:这些挑战是怪诞的,解决起来很痛苦,但获得 Flag 后,成就感满满。
黑客的秘密:针对这些挑战的预期解决方案涉及特殊的黑客技术。
幼儿瓶第二道题:collision
0x000 打开环境
ssh 连接:
查找源码文件,
0x001 源码分析
源码文件 col.c,
知识要点:
char 占用 1 个字节,int 占用 4 个字节 , 这里用户输入时,是 char 类型数据,该程序运行后就会将输入转换成 int 型。
首先查看执行 25 行的
/bin/cat flag命令所需要的条件,是 24 行的hashcode == check_password(argv[1]), 并且由 20 行可知,用户的第二个输入为char型,且长度为 20 字节,hashcode为0x21DD09EC,即十进制的568134124;check_password(argv[1]),查看 4-11 行的功能函数,将用户的输入的char数据类型转换为int型,然后把该用户输入的首地址给指针 ip,指针再遍历用户输入,将其逐个相加,最后返回结果 res,如果该返回的结果res等于hashcode,程序就会输出flag。
0x02 程序运行
要求用户的输入得是 20 个字节的 char(一个字节)型数据,因为程序运行后将char转换为 int(4 个字节) 型,所以要构造 5 个 int 型的数据,使之相加为568134124。因此我们需要先将这 5 个int数据转换为 char 型,刚好就是 20 个字节,这 5 个数据随意构造,只要相加为568134124就可以,考虑到溢出等不必要的麻烦,还是将其平均取值,4 个113626825, 1 个113626824,转化为char型就是\xc9\xce\xc5\x06和\xc8\xce\xc5\x06,下面就是程序代码了
-c :执行当前 cmd 命令,反单引号 “·”,括起来的是执行当前 shell 命令。
具体命令:
flag 就是:daddy! I just managed to create a hash collision :)
本文首发于 BigYounghttp://bigyoung.cn
版权声明: 本文为 InfoQ 作者【BigYoung】的原创文章。
原文链接:【http://xie.infoq.cn/article/5eba20df2211c584043c36914】。未经作者许可,禁止转载。











评论