【pwnable.kr】0x02-collision Writeup

server/2024/9/23 11:54:35/

题目描述

在这里插入图片描述
在这里插入图片描述

解法

拉取文件

scp -P2222 col@pwnable.kr:col .
scp -P2222 col@pwnable.kr:col.c .

分析源码

#include <stdio.h>
#include <string.h>// hashcode值
unsigned long hashcode = 0x21DD09EC;// 返回res,对main函数中传参进行“加密”变换操作
unsigned long check_password(const char* p){int* ip = (int*)p; // *ip把*p强转为整型,前4个字节int i;int res=0;// 20个字节总共分为5次for(i=0; i<5; i++){res += ip[i];}return res;
}int main(int argc, char* argv[]){// argc表示传参数,程序的名称本身被视为第一个参数,存储在argv[0]中// 此题需要传入一个参数if(argc<2){printf("usage : %s [passcode]\n", argv[0]);return 0;}// 传入参数长度需要等于20if(strlen(argv[1]) != 20){printf("passcode length should be 20 bytes\n");return 0;}// 传入的参数经过加密变换需要等于0x21DD09ECif(hashcode == check_password( argv[1] )){system("/bin/cat flag");return 0;}elseprintf("wrong passcode.\n");return 0;
}

阅读源码后,执行样例测试

输入2个参数 / 1个参数,程序输出如下

在这里插入图片描述

调试分析(可跳过)

先随意输入一个值,进一步分析

-g生成含调试信息的可执行文件

在这里插入图片描述

lldb调试

安装lldb
apt-get update
apt-get install lldb

# 输入abcdabcdabcdabcdabcd
lldb a.out abcdabcdabcdabcdabcd# 在check_password第一行
(lldb) b 6
# 运行,传递参数,到断点处暂停
(lldb) r
# 单步执行printf("%d\n", *ip);step in
(lldb) s
#  检查内存,即检查ip指向的内存内容
#  整型为4字节,又因为机器为小端序,低位字节在低地址,即abcd对应0x64636261(从左往右地址增大),对应整数为1684234849
(lldb) x ip
# 打印指针ip指向的内容
(lldb) p *ip

在这里插入图片描述

特殊值构造

逆向“加密变换算法”check_password()分析,题目需要传入一个长度为20的字符串,经过五次累加之后等于0x21DD09EC,即可system("/bin/cat flag");

满足20个字节条件,且五次累加=0x21DD09EC,做除法
0x21DD09EC / 5
在这里插入图片描述
hex(0x21DD09EC - 0x6C5CEC8 * 4),余数为0x6c5cecc
在这里插入图片描述
查看靶机为小端序( LSB executable
在这里插入图片描述
所以输入的低位字节在低地址,高位字节在高地址
0x6C5CEC8 => \xc8\xce\xc5\x06
0x6c5cecc => \xcc\xce\xc5\x06

即shell构造为

./col `python -c 'print "\xc8\xce\xc5\x06" * 4 +"\xcc\xce\xc5\x06"'`

直接在靶机shell上执行payload获取flag

在这里插入图片描述

pwntools-EXP(假设靶机无python环境)

#!/bin/python
from pwn import *payload = p32(0x6c5cec8) * 4 + p32(0x6c5cecc)r = ssh('col', 'pwnable.kr', password='guest', port=2222)
p = r.process(executable='./col', argv=['col', payload])
flag = p.recv()log.success("flag:" + flag.decode())p.close()
r.close()

在这里插入图片描述

Flag

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

http://www.ppmy.cn/server/103295.html

相关文章

【微信小程序】自定义组件 - 插槽

1. 什么是插槽 2. 单个插槽 在小程序中&#xff0c;默认每个自定义组件中只允许使用一个 进行占位&#xff0c;这种个数上的限制叫做单个插槽。 3. 启用多个插槽 在小程序的自定义组件中&#xff0c;需要使用多 插槽时&#xff0c;可以在组件的 .js 文件中&#xff0c;通过…

使用心脏MRI特征追踪评估右心房功能以预测扩张型心肌病患者预后的研究| 文献速递-基于深度学习的癌症风险预测与疾病预后应用

Title 题目 Assessment of Right Atrial Function Measured with Cardiac MRI Feature Tracking for Predicting Outcomes in Patients with Dilated Cardiomyopathy 使用心脏MRI特征追踪评估右心房功能以预测扩张型心肌病患者预后的研究 Background 背景 Right atrial (…

USRP : Link 16 Tactical Data Link

Link 16 调制解调 Link 16 Tactical Data Link ModelPhysical layer frame structureTime slot compositionHeader formatCRCRSCCSK USRPUSRP sendUSRP recv LabVIEW accomplishCRC codingRS codingCCSK Spread SpectrumMSK modulationRS decodingCCSK DespreadMSK demodulatio…

C语言-将n个数输入时顺序的逆序排列,用指针函数实现

一、题目要求&#xff1a; 将n个数输入时顺序的逆序排列&#xff0c;用指针函数实现 二、程序: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int n;printf("请输入一共有多少数:\n");scanf("%d", &n);int arr[100], i;…

杀完进程,自动重启怎么办

(base) liMacBook-Pro-3:/opt/homebrew/var % ps | grep mysqld li 78647 0.0 0.1 412146192 4400 ?? S 7:24PM 0:01.83 /opt/homebrew/opt/mysql8.0/bin/mysqld --basedir/opt/homebrew/opt/mysql8.0 --datadir/opt/homebrew/var/mysql --plu…

wine适配cefsharp时中文输入法无效问题分析与排查

项目场景&#xff1a; 软件采用WPFCefSharp.Wpf.HwndHost方案显示H5页面&#xff0c;现在需要将这一套方案通过wine适配到Linux系统中 问题描述 在H5页面的输入框中输入中文时&#xff0c;能够调出中文输入法&#xff0c;但是中文输入完成后没有内容显示。 发现1&#xff1a…

深度学习Day-30:CGAN入门丨生成手势图像丨可控制生成

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a; 结合代码进一步了解CGAN学习如何运用生成好的生成器生成指定图像 一、 基础配置 语言环境&#x…

AI 智能体:从普通人到《黑神话:悟空》,保姆级教程让你瞬间变身!

大家好&#xff0c;我是木川 今天还没下班&#xff0c;就看到一款名为《黑神话:悟空》的游戏火爆全网&#xff0c;唤醒了无数玩家对大圣孙悟空的崇拜与向往。游戏中&#xff0c;悟空的七十二变让人叹为观止&#xff0c;但你是否想过&#xff0c;借助AI的力量&#xff0c;我们也…