写点什么

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

用户头像
BigYoung
关注
发布于: 2021 年 02 月 04 日
黑客练手入门| 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 型。

  1. 首先查看执行 25 行的 /bin/cat flag命令所需要的条件,是 24 行的 hashcode == check_password(argv[1]), 并且由 20 行可知,用户的第二个输入为 char 型,且长度为 20 字节,hashcode0x21DD09EC,即十进制的568134124

  2. 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 命令。

具体命令:

./col `python -c 'print "\xc9\xce\xc5\x06"*4+"\xc8\xce\xc5\x06"'`
复制代码

flag 就是:daddy! I just managed to create a hash collision :)


本文首发于 BigYounghttp://bigyoung.cn

发布于: 2021 年 02 月 04 日阅读数: 17
用户头像

BigYoung

关注

Python工程师/书虫/极客/ 2020.04.22 加入

伸手摘星,即使徒劳无功,也不至于满手泥污。 欢迎大家访问我的BigYoung小站(bigyoung.cn)

评论

发布
暂无评论
黑客练手入门| pwnable.kr—幼儿瓶—02:collision