当前位置: 首页 > news >正文

寒假1.23

题解

web:[极客大挑战 2019]Secret File(文件包含漏洞)

打开链接是一个普通的文字界面

查看一下源代码

 发现一个链接,点进去看看

再点一次看看,没什么用

仔细看,有一个问题,当点击./action.php时,跳转到了./end.php界面

我们直接把end换成action试试,可是每一次访问又自动跳转到end.php了,在原界面查看也是一样,老是跳转

中间肯定有一个界面,只是我们无权访问,使用bp抓包试试

访问一下这个文件试试

访问一下flag.php ,被隐藏了,但是看源代码也是什么都没有

再返回上一个界面看看,在url中得到一个变量file,如果file中含有../、tp、input、data等字符串,则输出out,否则执行file所指的文件发现过滤了部分关键字,但是并未过滤filter,那么可以尝试用php://filter来获取flag.php的内容

构造payload:将源代码转换为base64编码

secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php

 base64解码

misc:buuctf另一个世界

附件下载,是一张图片

结合题目所说的另一个世界,考虑是图片隐写,使用010打开,拉到最后有一串稀奇古怪的二进制

转成字符串试试

提交一下试试,居然真的就是flag

crypto:

昨天的RSA没整完,接着搞,搞完了就不兑换reverse和pwn了

BUUCTF-RSA2(低解密指数攻击)

下载附件在记事本中打开,得到两个巨大的n和e

用rsa-wiener-attack得出d

脚本

N = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170646906557242832893914902053581087502512787303322747780420210884852166586717636559058152544979471
e = 46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085d = 8920758995414587152829426558580025657357328745839747693739591820283538307445
dd = hex(d)
dd = dd+"L"
print(dd)
import hashlib
flag = "flag{" + hashlib.md5(dd.encode("utf-8")).hexdigest() + "}"
print(flag)

 BUUCTF [BJDCTF2020]rsa_output

一开始没看懂这是个啥,看了大佬的wp才知道{}中的是两个n和e,massage是两个c,仔细看,两个n还是相同的

既然是知道了c1,c2和e1,e2以及一个共同的n,那么尝试共模攻击

脚本:

import gmpy2
from Crypto.Util.number import getPrime,long_to_bytese1 = 2767
e2 = 3659
n = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111c1 = 20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599
c2 = 11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227_,s1, s2 = gmpy2.gcdext(e1, e2)
m = pow(c1, s1, n) * pow(c2, s2, n) % n
print(long_to_bytes(m))

 BUUCTF RSA2(dp泄露)

 下载附件,题目给出了e,n,dp,c

常规思路是将n分解为p和q,但是这里的n太大,不好分解,而这里给出了dp,可以利用bp写脚本(公式代换在后面)

import gmpy2
from Crypto.Util.number import long_to_bytese = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751for i in range(1, e):if (dp * e - 1) % i == 0:if n % (((dp * e - 1) // i) + 1) == 0:p = ((dp * e - 1) // i) + 1q = n // (((dp * e - 1) // i) + 1)d = gmpy2.invert(e, (p-1)*(q-1))m = pow(c, d, n)print(m)
print(long_to_bytes(m))

 BUUCTF RSA1

题目给出p,q,dp,dq,c,没有e

 脚本:

import gmpy2
from Crypto.Util.number import long_to_bytes
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
I = gmpy2.invert(q,p)
m1 = pow(c,dp,p)
m2 = pow(c,dq,q)
m = (((m1-m2)*I)%p)*q+m2
print(long_to_bytes(m))

 BUUCTF rabbit

下载附件,得到密文

直接在线解密得到flag

知识点

web

php filter协议:一种过滤器,可以作为一个中间流来过滤其他的数据流

作用:读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码,rot13处理等

使用方法:一般语法为

php://filter/过滤器|过滤器/resource=待过滤的数据流

其中过滤器可以设置多个,按照链式的方式依次对数据进行过滤处理

e.g.对<?php phpinfo();?>这个字符串进行了两次base64编码处理

echo file_get_contents("php://filter/read=convert.base64-encode|convert.base64-encode/resource=data://text/plain,<?php phpinfo();?>");

 crypto

5.低解密指数攻击(维纳攻击)

适用情况:e很大,解密指数d较小,公钥e和模数n是公开的

原理:

ed ≡ 1 (mod φ(n)),其中e是公钥的加密指数,d是私钥的解密指数,φ(n)是n的欧拉函数值(即(p-1)(q-1))。当d较小时,攻击者可以通过对e/N(N=pq)进行连分数展开,找到一串数的分母,这个分母很有可能就是d。

工具:rsa-wiener-attack

下载工具后使用wiener攻击脚本得出d的值(注意要将脚本和rsa-wiener-attack的py文件放在同一个目录下)

import  RSAwienerHacker
n = 
e = 
d =  RSAwienerHacker.hack_RSA(e,n)
if d:print(d)

脚本:

N = 
e = d = 
dd = hex(d)
dd = dd+"L"
print(dd)
import hashlib
flag = "flag{" + hashlib.md5(dd.encode("utf-8")).hexdigest() + "}"
print(flag)

具体原理参考:RSA加密与解密(一)_rsa解密-CSDN博客

6.共模攻击

适用情况:多组c,e但模数n相同,且e之间最好互质

原理:当多个密文使用相同的n进行加密时,可能通过密文之间的关系来获取明文信息,而无需知道私钥

c1 = m^e1 mod n    =>c1^s1 = m^(e1*s1) mod n

c2 = m^e2 mod n    =>c2^s2 = m^(e2*s2) mod n

两者相乘,通过扩展欧几里得定理,我们可知e1与e2互质,必存在s1和s2使e1*s1+e2*s2=1

由此可求出相对应的s1和s2.

m=(c1*s1+c2*s2)%n

 脚本:

import gmpy2
from Crypto.Util.number import getPrime,long_to_bytese1 = 
e2 = 
n = c1 = 
c2 = _,s1, s2 = gmpy2.gcdext(e1, e2)
m = pow(c1, s1, n) * pow(c2, s2, n) % n
print(long_to_bytes(m))

7.dp泄露

适用情况:题目提供dp或dq

原理:

dp=d%(p-1)

d = dp + k1 * (p-1)

d * e = 1 + k2(p-1)(q-1)

把第二个式子的d代换掉:

e * (dp + k1(p-1)) = 1 + k2(p-1)(q-1)

两边同时对(p-1)取模,消去k

e * dp % (p - 1) = 1

e * dp = 1 + k(p - 1)

再通过爆破k的方式求出p,进而求出d

 脚本:

import gmpy2
from Crypto.Util.number import long_to_bytese =
n = 
dp = c = for i in range(1, e):if (dp * e - 1) % i == 0:if n % (((dp * e - 1) // i) + 1) == 0:p = ((dp * e - 1) // i) + 1q = n // (((dp * e - 1) // i) + 1)d = gmpy2.invert(e, (p-1)*(q-1))m = pow(c, d, n)print(m)
print(long_to_bytes(m))

8.dp,dq同时泄露

原理:

m1 = c^dpmodp

m2 = c^dqmodq

m = (((m1-m2)*I)%p)*q+m2

其中I为对pq求逆元

脚本:

import gmpy2
from Crypto.Util.number import long_to_bytes
p = 
q = 
dp = 
dq = 
c = 
I = gmpy2.invert(q,p)
m1 = pow(c,dp,p)
m2 = pow(c,dq,q)
m = (((m1-m2)*I)%p)*q+m2
print(long_to_bytes(m))

相关文章:

寒假1.23

题解 web&#xff1a;[极客大挑战 2019]Secret File&#xff08;文件包含漏洞&#xff09; 打开链接是一个普通的文字界面 查看一下源代码 发现一个链接&#xff0c;点进去看看 再点一次看看&#xff0c;没什么用 仔细看&#xff0c;有一个问题&#xff0c;当点击./action.ph…...

unity 粒子系统设置触发

1、勾选Triggers选项 2、将作为触发器的物体拉入队列当中&#xff0c;物体上必须挂载collider 3、将想要触发的方式&#xff08;Inide、Outside、Enter和Exit&#xff09;选择为”Callback“&#xff0c;其他默认为”Ignore“ 4、Collider Query Mode 设置为All&#xff1a…...

【C++】类和对象(五)

1、初始化列表 作用&#xff1a;C提供了初始化列表语法&#xff0c;用来初始化属性。 语法&#xff1a; 构造函数&#xff08;&#xff09;&#xff1a;属性1&#xff08;值1&#xff09;&#xff0c;属性2&#xff08;值2&#xff09;...{}示例&#xff1a; #include<i…...

超分辨率体积重建实现术前前列腺MRI和大病理切片组织病理学图像的3D配准

摘要: 磁共振成像(MRI)在前列腺癌诊断和治疗中的应用正在迅速增加。然而,在MRI上识别癌症的存在和范围仍然具有挑战性,导致即使是专家放射科医生在检测结果上也存在高度变异性。提高MRI上的癌症检测能力对于减少这种变异性并最大化MRI的临床效用至关重要。迄今为止,这种改…...

第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)

1.并发编程的三个重要特性 并发编程有三个至关重要的特性&#xff0c;分别是原子性、有序性和可见性 1.1 原子性 所谓原子性是指在一次的操作或者多次操作中&#xff0c;要么所有的操作全部都得到了执行并 且不会受到任何因素的干扰而中断&#xff0c;要么所有的操作都不执行…...

[STM32 标准库]定时器输出PWM配置流程 PWM模式解析

前言&#xff1a; 本文内容基本来自江协&#xff0c;整理起来方便日后开发使用。MCU&#xff1a;STM32F103C8T6。 一、配置流程 1、开启GPIO&#xff0c;TIM的时钟 /*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockC…...

web3py+flask+ganache的智能合约教育平台

最近在学习web3的接口文档&#xff0c;使用web3pyflaskganache写了一个简易的智能合约教育平台&#xff0c;语言用的是python&#xff0c;ganche直接使用的本地区块链网络&#xff0c;用web3py进行交互。 代码逻辑不难&#xff0c;可以私信或者到我的闲鱼号夏沫mds获取我的代码…...

< OS 有关 > 阿里云:轻量应用服务器 的使用 :轻量化 阿里云 vpm 主机

原因&#xff1a; &#xff1c; OS 有关 &#xff1e; 阿里云&#xff1a;轻量应用服务器 的使用 &#xff1a;从新开始 配置 SSH 主机名 DNS Tailscale 更新OS安装包 最主要是 清除阿里云客户端这个性能杀手-CSDN博客 防止 I/O 祸害系统 操作&#xff1a; 查看进程&#x…...

【技术】TensorRT 10.7 安装指南(Ubuntu22.04)

原文链接&#xff1a;https://mengwoods.github.io/post/tech/008-tensorrt-installation/ 本文安装的版本如下&#xff1a; Ubuntu 22.04 Nvidia Driver 538.78 CUDA 12.2 cuDNN 8.9.7 TensorRT 10.7 安装前的准备&#xff08;可选&#xff09; 在安装新版本之前&#xf…...

Linux 权限管理

hello&#xff01;这里是敲代码的小董&#xff0c;很荣幸您阅读此文&#xff0c;本文只是自己在学习Linux过程中的笔记&#xff0c;如有不足&#xff0c;期待您的评论指点和关注&#xff0c;欢迎欢迎~~ ✨✨个人主页&#xff1a;敲代码的小董 &#x1f497;&#x1f497;系列专…...

8.2 从看图识字到智能解读:GPT-4 with Vision 开启多模态 AI 新纪元

从看图识字到智能解读:GPT-4 with Vision 开启多模态 AI 新纪元 引言:AI 的多模态跃迁 随着人工智能技术的快速发展,我们正迈入一个新的智能交互时代。传统的 AI 模型主要聚焦于文本处理,而多模态 AI 模型如 GPT-4 with Vision(GPT-4V) 则能够同时处理图像和文本。GPT-4…...

差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法

四轮驱小车的话&#xff1a; 转向角度计算方法&#xff1a;float turning_angle z_angular / x_linear; // 转向角度&#xff0c;单位为弧度 速度的话直接用线速度 两轮驱动小车&#xff1a; 计算公式&#xff1a; leftSpeed x_linear - z_angular * ORIGINBOT_WHEEL_TRACK /…...

使用.NET 8构建高效的时间日期帮助类

使用.NET 8构建高效的时间日期帮助类 在现代Web应用程序中&#xff0c;处理日期和时间是一个常见的需求。无论是记录日志、生成报告还是进行数据分析&#xff0c;正确处理日期和时间对于确保数据的准确性和一致性至关重要。本文将详细介绍如何使用ASP.NET Core和C#构建一个高效…...

学习std::is_base_of笔记

1、std::is_base_of简介 在现代 C 中&#xff0c;模板元编程&#xff08;Template Metaprogramming&#xff09;是一种非常强大的编程技巧&#xff0c;它让我们能够在编译期进行类型推导和约束。而 std::is_base_of 是一个重要的工具&#xff0c;可以用来检查一个类型是否是另…...

第 25 场 蓝桥月赛

3.过年【算法赛】 - 蓝桥云课 问题描述 蓝桥村的村民们正准备迎接新年。他们计划宰杀 N 头猪&#xff0c;以庆祝一整年的辛勤劳作和丰收。每头猪的初始位置位于下标 xi​&#xff0c;所有 xi​ 均为偶数&#xff0c;保证没有两头猪初始位置相同。 当猪意识到人类打算宰杀它们…...

【设计模式-行为型】访问者模式

一、什么是访问者模式 说起来访问者模式&#xff0c;其实很少用。我一直在思考该用什么样的例子把这个设计模式表述清晰&#xff0c;最近突然想到一个例子也许他就是访问者。港片有过很辉煌的年代&#xff0c;小的时候一直在看港片觉得拍的非常好&#xff0c;而且演员的演技也在…...

无人机微波图像传输数据链技术详解

无人机微波图像传输数据链技术是无人机通信系统中的关键组成部分&#xff0c;它确保了无人机与地面站之间高效、可靠的图像数据传输。以下是对该技术的详细解析&#xff1a; 一、技术原理 无人机微波图像传输数据链主要基于微波通信技术实现。在数据链路中&#xff0c;图像数…...

SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由

前言 在微服务架构中&#xff0c;API 网关是各个服务之间的入口点&#xff0c;承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理&#xff0c;通常需要通过中心化的配置管理系统来实现灵活的路由更新&#xff0c;而无需重启网关服务。Nacos 作为一个开源…...

【QT】 控件 -- 显示类

&#x1f525; 目录 [TOC]( &#x1f525; 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 &#x1f525; 1. 前言 之前我在上一篇文章【QT】…...

反馈驱动、上下文学习、多语言检索增强等 | Big Model Weekly 第55期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 A Bayesian Approach to Harnessing the Power of LLMs in Authorship Attribution 传统方法严重依赖手动特征&#xff0c;无法捕捉长距离相关性&#xff0c;限制了其有效性。最近的研究利用预训练语言模型的…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...