简单易懂的 pwnable.kr 第二题[collision]Writeupt

简单易懂的 pwnable.kr 第二题[collision]Writeupt

题目地址:http://pwnable.kr/play.php

题目如下:
在这里插入图片描述
和第一题一样,题目给了我们一个ssh远程登录地址和登录密码,废话不多说,先进入VMware虚拟机的ubuntu 16.04系统里面看看。
在这里插入图片描述
密码是:guest。 第一次输错了大家不要介意。
在这里插入图片描述
迫不及待查看一下里面都有什么文件以及属性。Linux命令:ls -al,发现col.c文件是可读的。col文件是可执行的不知道为什么可读,可以查看Linux 文件属性和权限
在这里插入图片描述
其他文件都没办法操作目前,那我们就查看一下col.c里面的内容。
Linux命令:cat col.c
不知道这个命令的可以自行百度或者查看Linux常用命令大全
内容如下:

#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;
}

带参数的main函数点击查看
我们可以看到只要 system("/bin/cat flag"); 这一语句执行我们就可以得到我们想要的flag。而想要执行这一语句,我们就需要前面两个if语句不能执行,并且第三个if语句要保证执行。也就是说我们的 argc >= 2 、argv[1] == 20 并且 check_password的返回值为 0x21DD09EC

  1. argc >= 2 :要求我们至少输入一个参数
  2. argv[1] == 20:要求我们第一个参数要20个字节
  3. check_password函数的作用:是将一个20个字节的字符串拆分为5个整型指针并将其所对应的值相加。

0x21DD09EC = 0x02020202 * 4 + 0x19D501E4

所以写一个小python脚本将值给求出来,并输入即可。在这里插入图片描述
0x21DD09EC = 0x01010101 * 4 + 1DD905E8
所以当然也可也输入,print ‘\x01010101’ * 4 + ‘\xE8\x05\xD9\x1D’。
答案不唯一,大家随意。

可能大家有疑惑为什么反着写,因为C语言是小端存储。

flag大家也看到了就是:

daddy! I just managed to create a hash collision 😃

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

希望对大家有所帮助哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于PyTorch的Embedding和LSTM的自动写诗实验LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值