黑客练手入门| 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】。未经作者许可,禁止转载。
评论