第十六届全国大学生信息安全竞赛CISCN---Cypto

news/2024/11/19 4:30:18/

1.Sign_in_passwd

 

 打开环境,下载附件,用记事本打开flag的文件

 发现里面是像base密码但又不像base密码的一串,第二行的%,就很像url密码啊,之前做题没接触过啊,还是做题做少了

没有啥解题思路,看了一下别人的wp,要base64换表????这是个啥

浅了解一下,我发现自己其实对base64也不太了解,就只是知道大概字符串编码成什么样会是base64,那么今天就把他了解清楚吧

base64原理:

简单来说就是——“把3个字节变成4个字节”

这么说吧,3个字节一共24个bit,把这24个bit依次分成4个组,每个组6个bit,再把这6个bit塞到一个字节中去(最高位补两个0就变成8个bit),就会变成4个字节。没了。

因为6个bit最多能表示2^6=64,也就是说Base64编码出来的字符种类只有64个,这也是Base64名字的由来。

对重组后的数据处理,每组最前面添加两个“0”,构成每组8个bit。由于在最前面添加的0,所以对数值不构成影响。

这里要注意其实严格上来说base64并不属于加密,只是为了方便传输而已。

到这里你可能会发现貌似只有字节数是3的倍数才能处理啊,那么现实情况中,不是3的倍数的情况多的是,怎么办?

方法::补零加   “=”号(2个0为一个=)

因此Base64编码后有时候可以看到=或者==这都是正常的。

那么解码的密文就有一定的要求的,从前面的分析中得出来,加密之后形成的密文长度一定是4的倍数,且字符串中的字符一定要在映射表中,或者字符为=,还有,只可能有一个=或一个==.

映射表:

 我看有些大佬说,会有些题目遇到换映射表的情况,但我暂时还没遇到,等遇到了我在研究吧。

我看见base64的应用中有一条是:Url中有二进制数据,这个时候需要Base64编码(Web安全的Base64),那是不是可以验证我们题目中的第二行

经过查阅资料发现,在逆向中base64换表是经常用到的(怪不得,我都不咋研究逆向)

诶哟,这个题就是上述的换映射表的情况,我真服了,所提到的base64换表就是换编码所对应的映射表。

开始做题!

首先对第二行将要转换的表做url解码:

再进行base64换表

 2.badkey1

 

下载附件后,大概知道这个题是个rsa的密码题

 尝试运行一下,大概知道我们应该输入什么

审计代码,发现当有ValueError错误时,会输出flag

 捋一下,这个题目中的关键点

1.proof_of_work()函数要求用户找到一个长度为4的字符串XXXX,使得sha256(XXXX + proof[4:])等于给定的哈希值_hexdigest。如果用户提供了正确的XXXX,函数返回True,否则返回False。
2.如果proof_of_work()返回False,程序将退出。
3.程序设置一个10秒的定时器。用户需要在10秒内完成接下来的任务,否则程序将被中断。
4.程序提示用户提供一个“错误的”RSA密钥对。用户需要输入两个质数p和q,这些质数需要满足一些条件(例如,它们必须是512位长的质数,且不能使p % e == 1 或 q % e == 1)。
5.程序尝试使用用户提供的p和q值构造一个RSA密钥对。如果构造成功,程序将输出"This is not a bad RSA keypair.“。如果在尝试构造密钥对时引发了ValueError异常(即密钥对不满足RSA算法的基本属性),程序将输出"How could this happen?”,并显示秘密标志(flag)。如果程序被中断(例如,由于10秒定时器到期),程序将输出"Hacker detected."
 

 首先是proof,我觉得找到长度怕是够呛,我估摸着肯定要爆破,但由于自己水平有限,不会写脚本,所以找了一个大佬的wp,浅浅借鉴了一下

import hashlib
import itertools
import stringdef find_proof(prefix, target_hash):for combination in itertools.product(string.ascii_letters + string.digits, repeat=4):test_str = ''.join(combination)test_hash = hashlib.sha256((test_str + prefix).encode()).hexdigest()if test_hash == target_hash:return test_strreturn Noneproof_prefix = find_proof(proof_suffix, target_hash)

这串代码的意义就是

传入服务器发来的proof, target_hash

爆破sha256

接着构造d=k*q使得不满足RSA生成密钥的条件

from Crypto.Util.number import 
while True:
p = getPrime(512)
e = 65537
k = inverse(e, p - 1)
t = (e * k * p - 1) // (p - 1)
for j in range(1, e+1):if t % j == 0:q = t // j + 1if isPrime(q) and q.bit_length() == 512:print(p)print(q)break

完成这两个条件即可得到flag

完整脚本如下

import hashlib
import itertools
from Crypto.Util.number import getPrime,inverse
from pwn import *
from Crypto.PublicKey import RSAp = remote('39.105.26.155',29558)t = p.recv()
hexdigest = t.decode('utf-8')[33:97]
proof = t.decode('utf-8')[12:28]def find_proof(prefix, target_hash):
for combination in itertools.product(string.ascii_letters + string.digits, repeat=4):
test_str = ''.join(combination)
test_hash = hashlib.sha256((test_str + prefix).encode()).hexdigest()
if test_hash == target_hash:
return test_str
return Noneresult = find_proof(proof, hexdigest)
p.sendline(result)
t = p.recv()
print(t.decode('utf-8'))# p.interactive()
weak_p = 10531798713566879985296310428910390829209559732187698122767912917088107059584145754739337891177477443973692234213380752118071230162618029537072442550315509
weak_q = 10354167589067169202907092046919351418658108936732776652403348338383910730719553355212239030073966381178568000602060877173120275918735882350052550806863399
p.sendline(str(weak_p).encode())
p.sendline(str(weak_q).encode())
t = p.recv()
print(t.decode('utf-8'))


http://www.ppmy.cn/news/404568.html

相关文章

进程的描述与控制

文章目录 前趋图和程序执行前趋图程序顺序执行程序并发执行 进程引入目的进程的描述进程的定义进程的特征进程的基本状态与转换挂起操作和进程状态的转换挂起操作引入引入挂起操作后进程3个基本状态间的转换引入挂起操作后进程5个基本状态间的转换进程管理中的数据结构OS中用于…

【ROS】ROS1导航(了解)

1、简述 ROS1导航模块navigation,它从里程计、传感器流和目标姿势中获取信息,并将速度、角速度控制命令发送至差速控制单元。 因为是ROS1,所以下面的内容只是一带而过,没有深入学习总结。详细内容可参考官网:http://…

Linux服务器查看当前占用CPU和内存最多的进程

1、使用Top命令查询进程 输入 top 命令,然后按下大写M按照内存MEM排序,按下大写P按照CPU排序。 top 2、查询占用CPU最高的前10个进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head 3、查询占用内存最大的前10个进程 ps aux|head -1;ps aux|…

AX9000利用docker实现迅雷远程下载

1.添加阿里云加速源 Registry URL registry.cn-hangzhou.aliyuncs.com 添加完成后,选择容器添加 使用本人改做的镜像 wojuzi/bxunlei 挂载硬盘,我是把硬盘分区了,可以自行选择下载区域 #v3.0.2 /迅雷下载 /extdisks/sda2/xunlei-downloa…

迅雷下载的种子文件后坠总是php,我的迅雷怎么不能下载呀,总是显示在连接种子文件...

答:可能是没有资源吧 有些种子文件早就过期了 答:迅雷下载时总是显示连接资源的解决方案如下: 1、在迅雷“正在下载”任务列表中,找到一直处于连接资源或下载速度为0的任务并右击,从其右键菜单中选择“种子文件另存为”…

为什么相同资源 IDM 感觉比迅雷快好多?

IDM只在一种情况下会比迅雷下载的更快。那就是“原始地址可连接,速度快,且不限制多线程。” 迅雷由于要消耗额外的带宽用于连接“候选资源”,同时会产生更复杂的任务调度。因此在这种情况下,不如IDM快。 不过这种情况下&#xff0…

迅雷种子为什么php文件后缀,迅雷BT文件后缀是什么?

你是否正在寻找关于文件后缀的内容?让我把最实时的东西奉献给你: 迅雷BT文件后缀是什么?BT是一个后缀名为.torrent的小文件,它里面保存了服务器地址、要下载的文件的大孝分成的块数以及各种下载参数设置,这个文件一般在20k-100k大小,可以把*.…

实战:私有化部署ngin+文件步骤记录

这里写目录标题 背景准备总结 背景 出差到某国企进行私有化部署,一波三折。没想到是那种最麻烦的部署,导入文件需要刻光盘,进入电脑房需要上交手机,不允许有人以及拍摄设备,内部有监控摄像头。 有问题怎么办&#xf…