【pwnable.kr】collision_pwnable.kr-02 collision-程序员宅基地

技术标签: CTF  PWN  

ssh登录,源码如下:

#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
    
	int* ip = (int*)p;
	int i;
	int res=0;
	for(i=0; i<5; i++){
    
		res += ip[i];
	}
	return res;
}

int main(int argc, char* argv[]){
    
	if(argc<2){
    
		printf("usage : %s [passcode]\n", argv[0]);
		return 0;
	}
	if(strlen(argv[1]) != 20){
    
		printf("passcode length should be 20 bytes\n");
		return 0;
	}

	if(hashcode == check_password( argv[1] )){
    
		system("/bin/cat flag");
		return 0;
	}
	else
		printf("wrong passcode.\n");
	return 0;
}

这道题的代码也比较简单,输入20个字符,然后将这二十个字符每四个转换为一个int,相加之后与存储的hash比较。每四个char转换为int的公式为
int = char[0]+char[1]*256+char[2]*256*256+char[3]*256*256*256
由于每个char是8bit所以可以看成是一个256进制的数来计算int。

由于一开始没有想到可以通过python向col程序传入不可打印的字符,所以真的在遍历哪些可见字符能符合条件。但是后来发现即使是值最小的可见字符串加起来也要比给定的hash大很多。
经过别人的writeup的提醒,才知道可以将指令的运行结果作为程序的命令行参数。
于是构造payload如下即可:

col@ubuntu:~$ ./col `python -c "print '\x01'*16+'\xE8\x05\xD9\x1d'"`
daddy! I just managed to create a hash collision :)

使用 \x01进行填充是因为如果用\x00会发生截断。还要注意一下小端序的问题(低位放在低地址)。

补充:其他的关于将指令运行结果作为程序输入的方法:

#Use command output as an argument
./vulnerable `your_command_here`
./vulnerable $(your_command_here)
#Use command as input
your_command_here | ./vulnerable 
#Write command output to file
your_command_here > filename 
#Use file as input
./vulnerable < filename
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33892117/article/details/89233300

智能推荐

c#_HttpClient_application/x-www-form-urlencoded_参数转义_winform 参数转义-程序员宅基地

文章浏览阅读1.7k次。导读: 仅供使用httpclient库模拟http请求,Post请求头Content-Type: application/x-www-form-urlencoded 遇到 非字母或数字的字符 时转义的问题直接上code:https://github.com/dswyzx/forblogs及结果截图1:问题:因对接接口,参数内存在字符"+",导致双方对参数进行确认时发生分歧具体表现为:"+"字符在httpclient 为HttpRequestMessage 请求体封装HttpRequestMess_winform 参数转义

批量录入快递地址-快宝地址服务(PHP代码示例)-程序员宅基地

文章浏览阅读467次。快递地址写错了怎么办?快递地址写的不详细怎么办?怎么皮批量录入收件人地址?微商怎么批量录入发件人地址?快宝地址清洗,有效的解决了寄送快递时,批量录入收件人信息、发件人信息时,纠正地址数据,不完整地址识别,地址信息不完整时补全,已经合并区县的地址更正为最新的区县等,并输出结构化地址数据的一个有效方案。一、地址清洗适用场景1. 不完整地址识别比如地址“山东省烟台市烟台市峰哥”,由省市街道组成,..._怎么批量统一收货地址格式

Spring Boot 2.0之走向自动装配_springboot2.0自动装配过程-程序员宅基地

文章浏览阅读1.6k次。Spring 模式注解装配模式注解模式注解是一种用于声明在应用中扮演“组件”角色的注解。如 Spring Framework 中的 @Repository 标注在任何类上 ,用于扮演仓储角色的模式注解。@Component 作为一种由 Spring 容器托管的通用模式组件,任何被 @Component 标注的组件均为组件扫描的候选对象。类似地,凡是被 @Component 元标注(meta-..._springboot2.0自动装配过程

Ubuntu 设置 telnet,inetd 超级服务器及 Linux常用的网络命令_telnetd 和 telnet-程序员宅基地

文章浏览阅读1.7k次。telnet服务安装sudo apt-get install xinetd telnetdsudo /etc/init.d/xinetd statussudo /etc/init.d/xinetd restart如果出现 telnet: Unable to connect to remote host: Connection refused则在 /etc/inetd.conf 增加一..._telnetd 和 telnet

GAN综述及其在图像生成领域的应用(含原理、代码详解)_基于损失函数分类的gan研究综述-程序员宅基地

文章浏览阅读1.1w次。首先我们用一句话来概括下原始GAN。原始GAN由两个有机中整体构成——生成器 [公式] 和判别器 [公式] ,生成器的目的就是将随机输入的高斯噪声映射成图像(“假图”),判别器则是判断输入图像是否来自生成器的概率,即判断输入图像是否为假图的概率。GAN的训练也与CNN大不相同,CNN是定义好特定的损失函数,然后利用梯度下降及其改进算法进行优化参数,尽可能用局部最优解去逼近全局最优解。但是GAN的训练是个动态的过程,是生成器 [公式] 与判别器 [公式] 两者之间的相互博弈过程。通俗点讲,GAN的目的就.._基于损失函数分类的gan研究综述

高通Android平台硬件调试之Camera篇_高通平台camera灰区为啥四根线-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏12次。1、Camera成像原理介绍Camera工作流程图Camera的成像原理可以简单概括如下:景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过IO接口传输到CPU中处理,通过DISPLAY就可以看到图像了。电荷耦合器件(CCD)或互补金属氧化物半导..._高通平台camera灰区为啥四根线

随便推点

flask_migrate进行数据库迁移_flask migratecommand 菜鸟教程-程序员宅基地

文章浏览阅读1.1k次。什么是数据库迁移?所谓数据库迁移就是这个数据库到另一个数据库之间的任意形式的数据移动,说白了就是更新什么时候用?在开发过程中需要修改数据库模型 而且修改之后还要更新数据库。仅当数据库不存在时,flask_sqlalchemy才会根据模型创建,所以更新的唯一方式就是:删除旧的数据库db.create_all()旧数据库的数据自然而然丢失了,所以说更新表更好的办法就是数据库迁移。flask_migratepip install flask_migratefrom flask_migrate_flask migratecommand 菜鸟教程

对称加密+非对称加密,实现数据安全传输-程序员宅基地

文章浏览阅读1.1w次,点赞11次,收藏61次。一般金融类的产品,涉及前端和后端交互的时候,都会都严格的数据安全保证。防止黑客攻击,信息篡改。加密方式有很多,总的来说,分为2种:对称和非对称。我们先来看一下,这两种加密方式分别是什么?他们有什么区别?对称加密:对称加密,即采用对称的密码编码技术,他的特点是,加密和解密使用相同的秘钥。 常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6...

【已解决】XAMPP无法启动mysql-程序员宅基地

文章浏览阅读6.5k次,点赞10次,收藏49次。最近在学习安卓开发,为了免于自己搭服务器,选择连接到XAMPP的mysql数据库。在这贴出自己遇到的一些问题。It seems that the port 3306 is already in use.aer you sure you want to use this portmysql服务器需要使用3306端口。这个错误意思是3306已经被其他程序使用了,所以XAMPP不能启动mysql服务。这里我们就需要修改XMAPP里mysql的端口,避免端口冲突。我们右键选择mysql->confi

error: jump to case label-程序员宅基地

文章浏览阅读2.2w次,点赞11次,收藏21次。The following is not allowed:switch (a){ case 1: int a = 6; //stuff break; case 2: /_error: jump to case label

【Python】之glob库介绍-程序员宅基地

文章浏览阅读921次。概述 glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。可以使用*、?、[ ]这三种通配符对路径中的文件进行匹配。 ● *:匹配0个或多个字符● ?:匹配单个字符● [ ]:匹配指定范围内的字符,如:[0-9]匹配数字1. 通配符_glob库

matlab做离散时间系统,离散时间系统分析及MATLAB实现-程序员宅基地

文章浏览阅读1.8k次。离散时间系统分析及MATLAB实现 离散时间系统分析及MATLAB实现 摘自:张登奇,周婷,梁莺.离散时间系统分析及MATLAB实现[J].湖南理工学院学报(自然科学版),2009,(03) 摘 要:线性时不变离散时间系统是最基本的数字系统,差分方程和系统函数是描述系统的常用数学模型,单位脉冲响应和频率响应是描述系统特性的主要特征参数,零状态响应和因果稳定性是系统分析的重要内容。文章从系统的分析流..._编写一个matlab函数来计算并绘制离散时间系统y[n]=5y[n-1]+x[n]

推荐文章

热门文章

相关标签