HTB_Weak RSA

news2024/12/28 23:01:45

文章目录

    • 信息收集
    • RSA 算法
    • 题目解密

信息收集

下载,解压 (密码都是hackthebox)

在这里插入图片描述

enc后缀的文件是一种加密文件,打开为乱码,key.pub内容如下,是 RSA 加密算法的公钥

-----BEGIN PUBLIC KEY-----
MIIBHzANBgkqhkiG9w0BAQEFAAOCAQwAMIIBBwKBgQMwO3kPsUnaNAbUlaubn7ip
4pNEXjvUOxjvLwUhtybr6Ng4undLtSQPCPf7ygoUKh1KYeqXMpTmhKjRos3xioTy
23CZuOl3WIsLiRKSVYyqBc9d8rxjNMXuUIOiNO38ealcR4p44zfHI66INPuKmTG3
RQP/6p5hv1PYcWmErEeDewKBgGEXxgRIsTlFGrW2C2JXoSvakMCWD60eAH0W2PpD
qlqqOFD8JA5UFK0roQkOjhLWSVu8c6DLpWJQQlXHPqP702qIg/gx2o0bm4EzrCEJ
4gYo6Ax+U7q6TOWhQpiBHnC0ojE8kUoqMhfALpUaruTJ6zmj8IA1e1M6bMqVF8sr
lb/N
-----END PUBLIC KEY-----

RSA 算法

计算机的数据都是以 01 形式存储的,一个字节 8 位可以用两位 16 进制数表示,如 1111 1111 = FF,很多算法都是对数字进行运算与求逆的过程

RSA 算法的步骤:

选择一对不相等的大质数 p、q

  • 质数要足够大,不容易破解,举例使用小数字

  • 质数:除了 1 和它本身无法被其他自然数整除,例如:3 的因数是 1和3,11 的因数是 1和11
    p = 3 , q = 11 p=3,q=11 p=3,q=11

计算 p、q 的乘积 n

n = p × q = 3 × 11 = 33 n=p×q=3×11=33 n=p×q=3×11=33

计算 n 的欧拉函数 φ(n)

  • 欧拉函数:小于或等于n 的正整数中与 n 互质的数的数目,例如 φ(3)={1,2} = 2;φ(11)={1,2,3,4,5,6,7,8,9,10}=10,即质数除了它本身都与其互质,所以 φ(n) = n-1

  • 互质:两个数的公因数只有1 时称为互质数,例如 5和6互质,5和9互质,6和9不互质,因为 3 也是它们的公因数

φ ( n ) = ( p − 1 ) ( q − 1 ) = ( 3 − 1 ) ( 11 − 1 ) = 2 × 10 = 20 φ(n)=(p-1)(q-1)=(3-1)(11-1)=2×10=20 φ(n)=(p1)(q1)=(31)(111)=2×10=20

选择一个与 φ(n)互质的整数 e,随便选一个 3 吧,方便计算

1 < e < φ ( n ) , e ∈ { 3 , 7 , 9 , 11 , 13 , 17 , 19 } 1<e<φ(n)\quad,\quad e∈\{3,7,9,11,13,17,19\} 1<e<φ(n),e{3,7,9,11,13,17,19}

计算 e对于φ(n)的模反元素 d

  • 模反元素:正整数 a、n互质,可以找到整数 b,满足: a·b mod n=1

  • mod:取余,a mod b即 a除b的余数,例如:10 mod 3 =1,19 mod 4 = 3,3 mod 5 = 5,36 mod -10 = - 4
    d ⋅ e     m o d     φ ( n ) = 1 d·e \,\,\, mod \,\,\, φ(n) = 1 demodφ(n)=1

  • k 的取值为整数集
    d = [ k φ ( n ) + 1 ] / e , k ∈ Z d=[kφ(n)+1]/e,k∈\Z d=[kφ(n)+1]/e,kZ

  • 还是取最简单的 k=1,d=7
    d = [ 1 × 20 + 1 ] / 3 = 7 d=[1×20+1]/3=7 d=[1×20+1]/3=7

计算公钥 KU

K U = ( e , n ) = ( 3 , 33 ) KU=(e,n)=(3,33) KU=(e,n)=(3,33)

计算私钥 KR

K R = ( d , n ) = ( 7 , 33 ) KR=(d,n)=(7,33) KR=(d,n)=(7,33)

加密:M 是明文,C是密文,例如 M = 20

C = M e    m o d    n = 2 0 3    m o d    33 = 8000    m o d    33 = 14 C=M^e \,\, mod \,\,n=20^3\,\,mod\,\,33=8000\,\,mod\,\,33=14 C=Memodn=203mod33=8000mod33=14

解密

M = C d    m o d    n = 1 4 7    m o d    33 = 105413504    m o d    33 = 20 M=C^d\,\,mod\,\,n=14^7\,\,mod\,\,33=105413504\,\,mod\,\,33=20 M=Cdmodn=147mod33=105413504mod33=20

题目解密

openssl:一个常用的加解密的库,执行如下命令

openssl rsa -pubin -text -modulus -in warmup -in key.pub

Modulus:代表 n ;Exponent:代表 e ;

上面是 16 进制,下面是去除冒号的,在线工具获取e和n:http://www.hiencode.com/pub_asys.html

在这里插入图片描述

拿到了 n 首先要转换为 10进制再计算,使用 python 转换,在线转换工具:https://c.runoob.com/unit-conversion/7999/

# 16进制转10进制
>>> s='3303B790FB149DA3406D495AB9B9FB8A9E293445E3BD43B18EF2F0521B726EBE8D838BA774BB5240F08F7FBCA0A142A1D4A61EA973294E684A8D1A2CDF18A84F2DB7099B8E977588B0B891292558CAA05CF5DF2BC6334C5EE5083A234EDFC79A95C478A78E337C723AE8834FB8A9931B74503FFEA9E61BF53D8716984AC47837B'
>>> int(s,16)
573177824579630911668469272712547865443556654086190104722795509756891670023259031275433509121481030331598569379383505928315495462888788593695945321417676298471525243254143375622365552296949413920679290535717172319562064308937342567483690486592868352763021360051776130919666984258847567032959931761686072492923

分解为 p 和 q,使用在线工具分解:http://www.factordb.com/

p=20423438101489158688419303567277343858734758547418158024698288475832952556286241362315755217906372987360487170945062468605428809604025093949866146482515539

q=28064707897434668850640509471577294090270496538072109622258544167653888581330848582140666982973481448008792075646342219560082338772652988896389532152684857

e的处理,去除冒号,转为10 进制

echo '61:17:c6:04:48:b1:39:45:1a:b5:b6:0b:62:57:a1:
    2b:da:90:c0:96:0f:ad:1e:00:7d:16:d8:fa:43:aa:
    5a:aa:38:50:fc:24:0e:54:14:ad:2b:a1:09:0e:8e:
    12:d6:49:5b:bc:73:a0:cb:a5:62:50:42:55:c7:3e:
    a3:fb:d3:6a:88:83:f8:31:da:8d:1b:9b:81:33:ac:
    21:09:e2:06:28:e8:0c:7e:53:ba:ba:4c:e5:a1:42:
    98:81:1e:70:b4:a2:31:3c:91:4a:2a:32:17:c0:2e:
    95:1a:ae:e4:c9:eb:39:a3:f0:80:35:7b:53:3a:6c:
    ca:95:17:cb:2b:95:bf:cd'|tr -d ':'
e=68180928631284147212820507192605734632035524131139938618069575375591806315288775310503696874509130847529572462608728019290710149661300246138036579342079580434777344111245495187927881132138357958744974243365962204835089753987667395511682829391276714359582055290140617797814443530797154040685978229936907206605

求出 d

import gmpy2
p=20423438101489158688419303567277343858734758547418158024698288475832952556286241362315755217906372987360487170945062468605428809604025093949866146482515539
q=28064707897434668850640509471577294090270496538072109622258544167653888581330848582140666982973481448008792075646342219560082338772652988896389532152684857
e=68180928631284147212820507192605734632035524131139938618069575375591806315288775310503696874509130847529572462608728019290710149661300246138036579342079580434777344111245495187927881132138357958744974243365962204835089753987667395511682829391276714359582055290140617797814443530797154040685978229936907206605
phi = (p-1) * (q-1)
d = gmpy2.invert(e, phi)
print(d)
d=44217944188473654528518593968293401521897205851340809945591908757815783834933

python2脚本生成私钥文件private.pem

#coding=utf-8
import math
import sys
from Crypto.PublicKey import RSA
arsa=RSA.generate(1024)
arsa.p=20423438101489158688419303567277343858734758547418158024698288475832952556286241362315755217906372987360487170945062468605428809604025093949866146482515539
arsa.q=28064707897434668850640509471577294090270496538072109622258544167653888581330848582140666982973481448008792075646342219560082338772652988896389532152684857
arsa.e=68180928631284147212820507192605734632035524131139938618069575375591806315288775310503696874509130847529572462608728019290710149661300246138036579342079580434777344111245495187927881132138357958744974243365962204835089753987667395511682829391276714359582055290140617797814443530797154040685978229936907206605
arsa.n=arsa.p*arsa.q
arsa.d=44217944188473654528518593968293401521897205851340809945591908757815783834933
Fn=long((arsa.p-1)*(arsa.q-1))
private=open('private.pem','w')
private.write(arsa.exportKey())
private.close()

ps:kali 安装crypto报错

apt-get install python2-dev
pip install pycrypto

最后使用 openssl解密

OpenSSL> rsautl -decrypt -in flag.enc -inkey private.pem

在这里插入图片描述

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

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

相关文章

CISP信息安全认证考试都考什么?

CISP考试是目前热门的信息安全认证考试&#xff0c;很多刚刚开始了解CISP的朋友&#xff0c;比较关心关于CISP考试内容的相关问题&#xff0c;今天就由中培小编带大家一起去看看CISP认证考试究竟都考哪些内容&#xff1f;首先来看一下试卷结构考试时间&#xff1a;120分钟考试题…

CSS图标与链接

目录 如何添加图标 Font Awesome 图标 实例 Bootstrap 图标 实例 Google 图标 实例 为图标添加样式或颜色 设置链接样式 实例 实例 文本装饰 实例 背景色 实例 链接按钮 实例 更多实例 如何添加图标 向 HTML 页面添加图标的最简单方法是使用图标库&#xff0…

【Less】全局样式重复注入问题

// package.json {"less": "^4.1.3","vite": "^3.1.0", }参考&#xff1a; [less/sass]如何避免因公共模块导致生成重复css代码解决 Vue CSS 样式重复载入&#xff0c;为 Vue 添加全局 less 或 sass 基础样式库【不是本篇解决方法&am…

vue3学习笔记之router(router4 + ts)

文章目录Vue Router1. 基本使用router-view2. 路由跳转2.1 router-link2.2 编程式导航2.3 replace3. 路由传参4. 嵌套路由5. 命令视图6. 重定向和别名6.1 重定向6.2 别名7. 路由守卫7.1 全局前置守卫7.2 全局后置守卫案例&#xff1a;加载滚动条8. 路由元信息9. 路由过渡动效10…

瞧不上alert 老古董?使用alert实现一个精美的弹窗

曾几何时alert陪伴了我很多歌日日夜夜&#xff0c;但现在人们越来越追求高端的技术&#xff0c;其实慢慢的我也都快淡忘了前端的世界里还有alert这么一个伟大的成员。 目录 一、为什么抛弃了alert? 1. 不同浏览器的表现 2. 第三方组件的使用 3. 代码意识的控制 二、用al…

2023年浏览器哪个好用速度快,看这一篇就够了

在网络覆盖的社会&#xff0c;不管走到哪里&#xff0c;都能上网浏览新闻、看热点资讯。浏览器是用户上网浏览的必要软件之一&#xff0c;它决定这用户浏览网页的速度和习惯。那么&#xff0c;2023年什么浏览器好用稳定速度快&#xff1f;目前优秀的浏览器有很多&#xff0c;但…

HDFS常用命令汇总

HDFS常用命令汇总一、前言信息二、帮助信息查看1、查看帮助信息2、帮助文档&#xff08;附带命令的详细说明&#xff09;三、常用命令1、创建目录2、查看目录下的内容3、上传文件4、上传并删除源文件5、查看文件内容6、查看文件开头内容7、查看文件末尾内容8、下载文件9、合并下…

ceph中报错“ clock skew detected on mon.ceph2, mon.ceph3”

自己搭建的ceph集群&#xff0c;显示时间不同步:clock skew detected on mon.ceph2, mon.ceph3但是查看chrony进程已经启动&#xff0c;ceph配置文件中,如下参数也已经配置&#xff0c;查看chrony.conf配置文件发现&#xff0c;同步源没有修改过&#xff0c;默认的于是修改ceph…

面试官的几句话,差点让我挂在HTTPS上

面试官的几句话&#xff0c;差点让我挂在HTTPS上 目录&#xff1a;导读 一、HTTP 协议 二、HTTPS 协议 三、使用 HTTP 协议还是 HTTPS 协议呢&#xff1f; 四、HTTP 协议和 HTTPS 协议的区别 作为软件测试&#xff0c;大家都知道一些常用的网络协议是我们必须要了解和掌握…

MySQL jdbc 反序列化分析

0x01 前言听师傅们说这条链子用的比较广泛&#xff0c;所以最近学一学&#xff0c;本来是想配合着 tabby 或是 codeql 一起看的&#xff0c;但是 tabby 的环境搭建一直有问题&#xff0c;耽误了很久时间&#xff0c;所以就直接看了0x02 JDBC 的基础• 本来不太想写这点基础的&a…

敏捷与DevOps的区别,知异同,发准力

​图片来自Robert Martin《敏捷整洁之道》。敏捷DevOps生命之环&#xff0c;由内到外&#xff0c;第一圈&#xff1a;Kent Beck&#xff0c;第二圈&#xff1a;Uncle Bob&#xff0c;第三圈&#xff1a;Mike Cohn。三圈由内到外分别是&#xff1a;编程、工程&#xff08;大致对…

STM32读取24位模数转换(24bit ADC)芯片TM7711数据

STM32读取24位模数转换&#xff08;24bit ADC&#xff09;芯片TM7711数据 TM7711是一款国产低成本24位ADC芯片&#xff0c;常用于与称重传感器配合实现体重计的应用。这里介绍STM32读取TM7711的电路和代码实现。TM7711与HX710A是兼容的芯片&#xff0c;而与HX711在功能上有所不…

B+树的概念

与分块查找和B树类似。 一棵m阶的B树需满足如下条件: 每个分支结点最多有m棵子树非叶子结点的根结点至少有两棵子树&#xff0c;其他结点至少有⌈m/2⌉\lceil m/2\rceil⌈m/2⌉棵子树结点的子树个数与关键字个数相等关键字全部存储在叶子结点中。所有指向对应记录的指针也存储…

LeetCode刷题---链表经典问题(双指针)

文章目录一、编程题&#xff1a;206. 反转链表&#xff08;双指针-头插法&#xff09;解题思路1.思路2.复杂度分析&#xff1a;3.算法图解代码实现二、编程题&#xff1a;203. 移除链表元素解题思路1.思路2.复杂度分析&#xff1a;3.算法图解代码实现三、编程题&#xff1a;328…

嵌入式开发:为什么物联网正在吞噬嵌入式操作系统?

在过去几年的嵌入式开发中&#xff0c;独立嵌入式软件市场的两大基石已被物联网公司完全吞噬。第一个FreeRTOS被亚马逊吞并&#xff0c;以支持其亚马逊Web服务(AWS)云平台的物联网开发&#xff0c;Express Logic被微软吞并&#xff0c;用于其竞争对手Azure云服务。许多分析师对…

【图像处理OpenCV(C++版)】——4.4 对比度增强之伽马变换

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

解析某音X-Bogus参数

文章目录写在前面目标正向梳理主要加密函数主要算法解析逆向梳理结论测试进阶写在后面写在前面 本文主要介绍从X-Bogus还原19位数组的过程&#xff0c;方便理解算法。 目标 // 从 var x_bogus DFSzswVVUyXANrqJSkdAml9WX7jG; // 还原出 var x_array [64, 0.00390625, 1, 2…

Dubbo 入门系列之快速部署一个微服务应用

本文将基于 Dubbo Samples 示例演示如何快速搭建并部署一个微服务应用。 背景 Dubbo 作为一款微服务框架&#xff0c;最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示&#xff0c;Dubbo 的服务消费者&#xff08;Consumer&#xff09;通过一系列的工作将请求发送给…

FatFs文件系统(只针对SPI-Flash)总结

作用 当我们利用SPI操作Flash时往往读写的都是一段连续的扇区&#xff0c;而FatFs文件系统可以将我们要写入的数据拆分成不连续的扇区见缝插针写入&#xff0c;类似与链表一块扇区指向下一块扇区&#xff0c;不需要物理逻辑地址连续也可以读取整个文件。 这是为啥嘞&#xff…

从零开始部署“生产级别”的主从模式Mysql

从零开始部署“生产级别”的主从模式Mysql 1. 撰写的缘由 Mysql 在日常应用中使用范围非常广泛&#xff0c;它的部署&#xff0c;其实一个docker run 就可以搞定了&#xff0c;但是这种单个standalone模式下&#xff0c;非常不具备高可用性。 测试环境和开发可以随便用&…