【2024HNCTF】密码组部分出题记录

2024H&NCTF 密码组部分出题记录

题目:BabyPQ、HappyDance

文章目录

  • 2024H&NCTF 密码组部分出题记录
    • BabyPQ | 签到
    • HappyDance

BabyPQ | 签到

本题为nc交互题,之所以采用这种形式,是因为可能有很多密码新师傅们不了解这种赛题形式,但在国赛中这种形式采用的比较频繁,在2023年的国赛中两道密码都是nc题,所以在这里为密码新师傅们记录一下nc的使用方式

nc ip 端口

image-20240514095401876

image-20240514095448108

那么针对该题目,主要考查的是师傅们对欧拉函数的理解,以及解方程的能力

相当于去利用并构造韦达定理,得到的解中
x 1 ∗ x 2 = c a x 1 + x 2 = − b a x_1*x_2 = \frac c a \\ x_1 + x_2 = - \frac b a x1x2=acx1+x2=ab
其中x1和x2就是对应的p和q

exp:

from sympy import symbols, solven= 80775397981216739537937013140335212564179336161039465593344766173631256110488228325487563463294794963374779976831086300486337286970246697848047792010731877541279819395960988048577550565927738392401730097774622194491797027279131382261701828206975149412522479597626213186391007855189654805110759477917127546597
phin= 80775397981216739537937013140335212564179336161039465593344766173631256110488228325487563463294794963374779976831086300486337286970246697848047792010731859489034712266817839739752550468696547302928830348317740718020226750115933170808890435181672724707888679013080731047467878099779880689498143333491504209036# 定义符号变量
x = symbols('x')# 定义方程
equation = x**2 - (n+1-phin)*x + n# 解方程
solutions = solve(equation, x)# 输出解
print("方程的解为:", solutions)

解有两个,有两次机会,都试一下就知道哪个是p咯

image-20240514123751209

HappyDance

题目:

#!/usr/local/bin/python
from chacha20 import *
from Crypto.Util.number import long_to_bytes, bytes_to_long
from secret import flag, mykey, mynoncedef chacha_init(key, nonce, counter):assert len(key) == 32assert len(nonce) == 8state = [0 for _ in range(16)]state[0] = bytes_to_long(b"expa"[::-1])state[1] = bytes_to_long(b"nd 3"[::-1])state[2] = bytes_to_long(b"2-by"[::-1])state[3] = bytes_to_long(b"te k"[::-1])key = bytes_to_long(key)nonce = bytes_to_long(nonce)for i in range(8):  state[i+4] = key & 0xffffffffkey >>= 32state[12] = (counter >> 32) & 0xffffffffstate[13] = counter & 0xffffffffstate[14] = (nonce >> 32) & 0xffffffffstate[15] = nonce & 0xffffffffreturn statedef encrypt(data):global statestate = chacha_block(state)buffer = b"".join(long_to_bytes(x).rjust(4, b"\x00") for x in state)output = []for b in data:output.append(b ^ buffer[0])buffer = buffer[1:]return bytes(output)FLAG = b"H&NCTF{****FAKE****}"
MYNONCE =b"s*f*h*o*"
assert len(flag) == 64
assert len(mynonce) == 8if __name__ == "__main__":while True:print("""================================
Enjoy the happiness of dancing
1. Dance on My Stage
2. Dance on Your Stage
3. Encrypt flag
""")choice = input("> ")if choice == '1':state = chacha_init(mykey, mynonce, 0)print(encrypt(input("input what you want to dance on my stage > ").encode()).hex()) elif choice == '2':yournonce = input("build your own stage > ")assert len(yournonce) == 8state = chacha_init(mykey, yournonce.encode(), 0)yourIn = bytes.fromhex(input("then, have a hex dance > "))print(encrypt(yourIn).hex())elif choice == '3':state = chacha_init(mykey, mynonce[::-1], 0)  print(encrypt(flag).hex())else:print("Let's dance together next time~")exit()

这个题目的设计,其实本身没有想考师傅们对于chacha20具体实现,因为题目中对于chacha20的部分代码选择了隐藏,就是在from chacha20 import * 这一块中,也是侧面想提醒师傅们,不需要深究其变换过程。

那么通过一张图展示chacha20的结果性质

image-20240514120754767

非常清晰的可以看到状态转化后生成的key和明文最后只进行了一步异或操作就得到密文了

同时初始化生成的内容又是固定的,在咱们这个题目中,未知的也可以说是可控的只有nonce咯

image-20240514121010987

只要初始化相同,后面经过相同轮次的状态转换生成的key是完全一致的

以上就是本地的核心考点,希望能通过本地让师傅们了解一下chacha20算法,一些具体的过程可以参考之前写的一篇wp:记录一道关于chacha20算法的密码题


针对本题的解法就是,首先利用选项1和2去恢复我们nonce的隐藏位,然后利用3获取flag的密文,同时我们也知道flag密文的生成是利用了nonce的逆序,所以最后一步是直接使用2,构建nonce逆序的初始化,然后直接把密文输进去就好,因为题目本身也是对flag的长度进行了限制。

步骤一:恢复MYNONCE

from pwn import *
context(log_level='debug')
#启动debug模式,可以看到交互时候的传输信息,怕有些信息收不到debug就开一下io = remote('hnctf.imxbt.cn',30295) #表示交互的目标import string
MYNONCE = b"sdf*h*o*"
for x1 in string.ascii_lowercase:for x2 in string.ascii_lowercase:for x3 in string.ascii_lowercase:io.recvuntil(b'> ')#接受到某个字符停下io.sendline(b'2')#发送某些字符并按下回车mynonce = MYNONCE.decode().replace('*', x1, 1).replace('*', x2, 1).replace('*', x3, 1)io.recvuntil(b'> ')#接受到某个字符停下io.sendline(mynonce.encode())io.recvuntil(b'> ')#接受到某个字符停下io.sendline(b'61736466')tmp = io.recvline()if tmp == b'b76d59fb\n':print("!!!", mynonce)exit()

一开始本来隐藏了四位,但是进入交互去爆破时间要1个小时,听了鸡块师傅的建议没必要这么久,就改成三位了,这个也就10分钟左右,此外在爆破的师傅注意一个点,就是首先通过选项1,用正确的MYNONCE生成一组数据,在利用选项2构造自己的nonce去和题目的MYNONCE做比较,但是生成数据的时候,尽量长一点,如果一个字符的话,非常有可能出现nonce不同,但是结果相同的情况

我这上面是用了四个字符asdf 传入到1 注意转成16进制传 然后返回的结果是b76d59fb

就利用这一组在选项2中爆破 即可恢复MYNONCE

image-20240514123507114

步骤2:拿flag

首先利用选项3 拿到flag的密文

然后利用选项2 构建MYNONCE逆序的“舞台”

直接传入flag的密文,返回hex数据,转一下就拿到flag啦

image-20240514123344627

image-20240514123358667

后面这部分没有构建自动化脚本,为了更清楚的让师傅们看到这个题目的流程,后面会补充一下全自动化的脚本的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI机器人火了,探讨早就可以帮我们开拓市场的中关村科金语音机器人

近期AI机器人给我们带来了不少惊喜,比如国外 Figuer 联合 OpenAI 做了 Chatgpt 机器人,可以通过对话后推理干活,国内仿生机器人员工也开始量产,看到AI机器人不禁想到会不会替代我们的工作?我们了解到很多机器人厂家的…

#初阶模板

目录 1.泛型编程 2.模板 (1)函数模板 (2)举个栗子(模板的使用) 1.模板的声明有两种形式 2.函数模板的原理 (3)模板参数的匹配原则 (4)类模板 类模板…

AI图像生成-原理

一、图像生成流程总结 【AI绘画】深入理解Stable Diffusion!站内首个深入教程,30分钟从原理到模型训练 买不到的课程_哔哩哔哩_bilibili 二、如果只是用comfy UI生成图片 1、找到下面几个文件,把对应模型移动到对应文件夹即可使用 2、选择对…

大学c语言基础很差,能不能学51单片机?会不会很困难?

开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些51单片机学习方法和资料,让我不断提升自己,感谢帮助过我的人, 如大家和我一样…

python turtle 升国旗

​一、导语 大家好,前段时间,我们画出了五星红旗,今天我们要用Python的Turtle库来绘制一个五星红旗,并让国旗上升,让我们一起来感受编程与艺术的完美结合吧!领略国家的强大!爱祖国,做一个遵纪守法的好公民。 二、效果展示 升国旗 三、开发过程 一、准备工作 首先我们…

OpenAI深夜震撼发布最新模型GPT-4o,送上最快速便捷教程

北京时间5月14日凌晨,有人说OpenAI一夜改变了历史。 在我们的深夜、太平洋时间的上午 10 点,OpenAI 召开春季发布会,公布了最新的GPT-4o模型,o代表Omnimodel(全能模型)。20多分钟的演示直播,展…

美国加州正测试ChatGPT等生成式AI,在4大部门应用

5月11日,美联社消息,美国加州政府正在测试ChatGPT等生成式AI,应用在税收和收费管理部、交通部、公共卫生部以及卫生与公众服务部4大部门。 测试时间6个月,为其提供技术支持的一共有5家公司,分别是OpenAI、Anthropic、…

成都新增数字产业园,打造生态经济新引擎

成都产业园运营方树莓集团——数字产业生态链建设者。秉持高效、友善、敢为的集团核心文化,有效链接政、产、企、校四个板块,构建了产业生态闭环系统。在成都市区内,已布局了多家数字文创产业园,其中具有代表性的参考国际数字影像…

Linux 第三十一章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

GRFB-UNet:一种新的多尺度注意力网络,用于铺路分割

不同场景下的带注释的触觉铺装示例: GRFB-UNet网络结构: GRFB模块的结构: 铺路在视障人士的旅行中起着至关重要的作用。因此,识别铺装的形状和位置以支持视障人士的移动性是相当有意义的,而视觉分割技术就适合这项任务。为了有效提高触觉铺装分割的精度和鲁棒性,…

httpsok-v1.11.0支持CDN证书自动部署

🔥httpsok-v1.11.0支持CDN证书自动部署 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业,稳定、安全、可靠。 一行命令,一分钟轻松搞定SSL证书自动续期 v1.11.0 版…

从“山寨的”MTK芯片发展历程 同类芯片比较基础常识 如何简单识别mtk机型

联发科技(MediaTek Inc.简称“联发科” ,联发科起家于CD-ROM芯片,直接将DVD内分别承担视频和数字解码功能的两颗芯片整合到了一颗芯片上,并提供相应的软件方案。并一度占据大陆DVD市场60%的芯片供应量!他将图像处理、M…

证卡打印机打印头故障的主要原因以及如何预防

爱立识打印头故障的主要原因主要包括以下几点: Evolis 打印机清洁卡 灰尘或碎屑堆积:长时间不清洁打印机导致灰尘或碎屑在机器内积累,可能会导致打印头划伤或堵塞。 使用不洁的卡片:使用不洁的卡片可能会导致灰尘或污垢进入打印机…

气膜建筑为何能够建在楼顶—轻空间

近年来,随着体育设施建设的推进和政策支持,越来越多的体育从业者将目光聚焦到了楼顶,希望通过在楼顶加盖气膜馆来充分利用有限的土地资源。那么,为什么气膜建筑能够建在楼顶呢?轻空间将从气膜建筑的结构特点、安全性、…

Java的VO,BO,PO,DO,DTO

写在前面 本文看下VO,BO,PO,DO,DTO,都是啥! 1:正文 先看一张图,看了图就能知道个大概了: 1.1:PO 全称是persistent object,对应数据的表&am…

Linux - make与makefile

文章目录 什么是make和makefile如何使用依赖关系 和 依赖方法伪目标 写个程序-进度条换行和回车的区别 什么是make和makefile make是一个命令 makefile是一个文件 这就是make和makefile的本质 make和 ll , pwd ,su 一样都是命令 makefile和 test , test.c 一样都是…

REACT 在组件之间共享状态

有时,您希望两个组件的状态始终一起变化。要做到这一点,请从他们俩身上删除状态,将其移动到他们最近的共同父级,然后通过道具将其传递给他们。这被称为提升状态,这是编写 React 代码时最常见的事情之一。 举例提升状态…

正念冥想训练内容有哪些?流静冥想

正念冥想训练内容有哪些? “我做不到感恩,总觉得满世界都是欠我的。”同学A这样说。看得出来她的无奈、无力以及无头绪感。 “我无法对父母做出感恩的祝福,从他们那里我感受不到爱,感受不到关怀,体验不到感恩。”同学…

校园电话机对于校园信息化管理非常重要

任何一部校园电话机都有信息办理渠道,并且发挥着重要的效果,能够满意整个机器的更快速运作。然后使学生能够取得一个更好的运用条件,学生在运用产品的过程中,要经过正确的操作环节才能够发挥产品的优胜功能,然后到达一…

TCP连接建立与释放连接——>三次握手和四次挥手

1.三次握手的概述 我们在学网络的概念时,每当讲到TCP都会听到三次握手和四次挥手,一直以来可能都对这个概念模糊不清,那么什么是三次握手和四次挥手呢?简单的举一个例子,如果我们和朋友打游戏,我们要和朋友…