2.19学习(php文件后缀)

misc

buu-后门查杀

下载附件,我们用火绒安全扫一下然后点击详情进入该文件所在文件夹,再用记事本打开该文件,搜索flag无果,再试试pass(由题目中的密码联系到pass,password,key等),然后看到了一个将这个内容提交试试,成功

crypto

buu-rsa2

打开文件,看到e的值很大,那么这是低解密指数,找到模板,求d(因为在文件中有一个未定义的变量d)

import gmpy2
def transform(x,y):       #使用辗转相处将分数 x/y 转为连分数的形式res=[]while y:res.append(x//y)x,y=y,x%yreturn resdef continued_fraction(sub_res):numerator,denominator=1,0for i in sub_res[::-1]:      #从sublist的后面往前循环denominator,numerator=numerator,i*numerator+denominatorreturn denominator,numerator   #得到渐进分数的分母和分子,并返回#求解每个渐进分数
def sub_fraction(x,y):res=transform(x,y)res=list(map(continued_fraction,(res[0:i] for i in range(1,len(res)))))  #将连分数的结果逐一截取以求渐进分数return resdef get_pq(a,b,c):      #由p+q和pq的值通过维达定理来求解p和qpar=gmpy2.isqrt(b*b-4*a*c)   #由上述可得,开根号一定是整数,因为有解x1,x2=(-b+par)//(2*a),(-b-par)//(2*a)return x1,x2def wienerAttack(e,n):for (d,k) in sub_fraction(e,n):  #用一个for循环来注意试探e/n的连续函数的渐进分数,直到找到一个满足条件的渐进分数if k==0:                     #可能会出现连分数的第一个为0的情况,排除continueif (e*d-1)%k!=0:             #ed=1 (mod φ(n)) 因此如果找到了d的话,(ed-1)会整除φ(n),也就是存在k使得(e*d-1)//k=φ(n)continuephi=(e*d-1)//k               #这个结果就是 φ(n)px,qy=get_pq(1,n-phi+1,n)if px*qy==n:p,q=abs(int(px)),abs(int(qy))     #可能会得到两个负数,负负得正未尝不会出现d=gmpy2.invert(e,(p-1)*(q-1))     #求ed=1 (mod  φ(n))的结果,也就是e关于 φ(n)的乘法逆元dreturn dprint("该方法不适用")n= 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170646906557242832893914902053581087502512787303322747780420210884852166586717636559058152544979471
e = 46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085d=wienerAttack(e,n)
print("d=",d)d=8920758995414587152829426558580025657357328745839747693739591820283538307445

求出d后直接加入原代码中,发现有漏洞 所以不能直接加入,需要优化,在flag那一行的hex(d)改为hex(d).encode()

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

 运行后得到#flag{8159e6c4abdd3b94ce461ed9a1a24017},但是是错的,看别人的wp,需要用python2运行,得到flag

buu-RSA2

 下载附件,得到题目可以看到是e,n,dp,c

在网上找模板

import gmpy2 as gpe = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751 
for x in range(1, e):if(e*dp%x==1):p=(e*dp-1)//x+1if(n%p!=0):continueq=n//pphin=(p-1)*(q-1)d=gp.invert(e, phin)m=gp.powmod(c, d, n)if(len(hex(m)[2:])%2==1):continueprint('--------------')print(m)print(hex(m)[2:])print(bytes.fromhex(hex(m)[2:]))

 

buu-[AFCTF2018]Morse

点击

附件,如题是摩斯密码,我们用在线工具解密摩斯密码转换器 - 孟坤工具箱网页版就这么简单的提交发现错误,再仔细看看此时的明文,是数字与字母,字母不超f组成,想到了hex的特征,将这个明文转为字符得到了真正的flag字符串HEX转换

花指令

是什么

花指令实质就是一串垃圾指令,主要用于干扰静态分析的难度防止反编译器进行反编译,并不影响程序的正常逻辑,在CTF中花指令的作用主要用于防止静态分析程序,花指令也可以被用在病毒或木马上,通过加入花指令来改变程序的特征码从而躲避杀软的扫描达到免杀的目的,花指令一般被分为两类,可执行花指令与不可执行花指令,不管执不执行都不会影响程序正常运行。

re

nssctf-[GFCTF 2021]wordy【涉及花指令】

附件下载后查得无壳,用ida打开,然后没有在函数窗口并未看到main,所以查看一下其他的。main函数实际上是被调用的,通过查看start函数可以发现start函数调用了_libc_start_main函数,_libc_start_main里面调用了main函数。其余部分本题无需考虑。双击后进入main函数,便看到了一个红色的代码,有个jmp,是花指令,我们需要将花指令剔除,需要用到Pacth功能。可以选择手动更改,先看jmp先前的代码的值patch

改前:改后:对比即可知道花指令jmp的值是EB,手动更改即是将花指令jmp的每一个的values第一个值改为90

也可以使用IDA python跑脚本

start = 0x1144
end = 0x3100for i in range(start, end):if get_wide_byte(i) == 0xEB and get_wide_byte(i + 1) == 0xFF and get_wide_byte(i + 2) == 0xC0:patch_byte(i, 0x90)

start即是jmp开始的位置 end要找到这jmp的结尾的位置

在脚本无脑 patch 后,发现部分 call 指令出现问题。也就是说有部分 0xeb 是不能被 patch 的。也就是 0xe8 之后四字节内的 0xeb 不能patch。所以我们需要找一下不同,从而限制patch操作,即需要代码中的if条件进行判断。跑成功后看了一大堆的安慰词,终于在最后面看到了flag,改格式:NSSCTF{u_are2wordy}

web

buu-[ACTF2020 新生赛]Upload

看到了没有任何上传的页面,四处划动鼠标,成功点亮灯泡,得以上传的位置然后我们看一下源代码,用ctrl+U进入,再双击此处可以得知这个对文件名有限制,所以我们上传后缀为jpg的一句话木马,抓包后改为php,但是不成功改为html,上传成功,再测试蚁剑,显示返回数据为空

在Apache中,以下后缀名都会被服务器解析为PHP文件:

phtml
php
php3
php4
php5
inc
//下面是对上面的大小写混写绕过
pHtml
pHp
pHp3
pHp4
pHp5
iNc

再改为phtml,上传成功再蚁剑测试连接,成功。然后保存后点击进去在根目录查看到了flag文件找到了flag

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

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

相关文章

PMBOK第7版整体架构全面详解

1. 引言 7月1日对于项目管理从业者和研究者而言,是个非凡意义的一个时间,这一天,翘首以待的《 项 目管理知识体系指南 》(PMBOK)第七版终于发布了。 总体而言,PMBOK第七版集百家之所长,成一…

C++:类与对象,定义类和构造函数

#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //如何让定义一个类 // 封装 // 1、将数据和方法定义到一起。 // 2、把想给你看的数据给你看&#xff0c;不想给你看的封装起来。 通过访问限定符来实现 class Stack { public: //1.成…

nginx 部署前端vue项目

?? 主页&#xff1a; ?? 感谢各位大佬 点赞?? 收藏 留言?? 加关注! ?? 收录于专栏&#xff1a;前端工程师 文章目录 一、??什么是nginx&#xff1f;二、??nginx 部署前端vue项目步骤 2.1 ??安装nginx 2.1.1 ??windows环境安装2.1.2 ??linux环境安装 2.2 …

蓝桥杯备考策略

备赛策略 (1-2周):基础算法数据结构 (3-5周):动态规划/贪心图论 (6-8周):全真模拟查漏补缺 阶段1:基础巩固(第1-2周) **目标:**掌握基础数据结构和必考算法&#xff0c;熟悉蓝桥杯题型。 学习内容: 数据结构:数组、字符串、栈、队列、哈希表、二叉树(遍历与基本操作)。 基础…

tmux和vim的基本操作

Tmux Tmux 的核心功能 多窗口和多面板&#xff1a; 在一个终端中创建多个窗口&#xff08;Windows&#xff09;&#xff0c;每个窗口可以运行不同的任务。 在每个窗口中&#xff0c;可以进一步分割成多个面板&#xff08;Panes&#xff09;&#xff0c;实现分屏操作。 会话…

Lineageos 22.1(Android 15) 开机向导制作

一、前言 开机向导原理其实就是将特定的category的Activity加入ComponentResolver&#xff0c;如下 <category android:name"android.intent.category.SETUP_WIZARD"/>然后我们开机启动的时候&#xff0c;FallbackHome结束&#xff0c;然后启动Launcher的时候…

【二分搜索 C/C++】洛谷 P1873 EKO / 砍树

2025 - 02 - 19 - 第 55 篇 Author: 郑龙浩 / 仟濹(CSND) 【二分搜索】 文章目录 洛谷 P1873 EKO / 砍树题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 说明/提示题目中的部分变量思路代码 洛谷 P1873 EKO / 砍树 题目描述 伐木工人…

DeepSeek系列模型发展:从LLM到V3、R1的技术突破与优化各阶段的重要论文汇总(附下载地址)

DeepSeek 系列模型从最初的 LLM 版本发展到最新的 V3 和 R1 版本&#xff0c;在架构设计、训练效率和推理能力方面不断取得进步。以下是各版本按时间倒序的详细信息&#xff1a; 1. DeepSeek-R1 发布时间&#xff1a;2025年1月 论文标题&#xff1a;DeepSeek-R1: Incentivizi…

HTTP SSE 实现

参考&#xff1a; SSE协议 SSE技术详解&#xff1a;使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为&#xff1a;服务端和客户端建立连接之后双方均保持连接&#xff0c;但仅支持服务端向客户端推送数据。推送完毕之后关闭连接&#xff0c;无状态行。 下面是基于…

推荐一款AI大模型托管平台-OpenWebUI

推荐一款AI大模型托管平台-OpenWebUI 1. OpenWebUI 1. OpenWebUI什么? 官网地址&#xff1a;https://openwebui.com/ GitHub地址&#xff1a; https://github.com/open-webui/open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离…

js中常用方法整理

数据类型 typeOf()Number&#xff08;&#xff09;parseInt()parseFloat()- * / %检测数据类型转换为数字转换为整数类型转换为浮点类型非加法的数字运算toString()Boolean()String()转换为字符串&#xff0c;不能转换undefined/null字符串拼接转换为布尔类型转换为字符串、所有…

java练习(33)

ps:题目来自力扣 最强回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文 子串。 class Solution {public String longestPalindrome(String s) {if (s null || s.length() < 1) {return "";}int start 0, end 0;for (int i 0; i < s.length();…

本地部署DeepSeek大模型

环境&#xff1a;nuc工控机器 x86架构 ubuntu20.04 1、浏览器打开Download Ollama on Linux&#xff0c;复制命令。 2.打开终端&#xff0c;输入命令。 curl -fsSL https://ollama.com/install.sh | sh 等待安装&#xff0c;安装完成后&#xff0c;终端输入 ollama&#xff…

Nginx 常用命令和部署详解及案例示范

一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…

2025鸿蒙开发面试题汇总——通俗易懂

问题和通俗易懂的答案&#xff0c;覆盖鸿蒙开发的核心知识点和实际场景&#xff0c;方便面试时快速评估候选人能力&#xff1a; 一、基础概念&#xff08;必问&#xff09; 鸿蒙和安卓最大的区别是什么&#xff1f;举个实际例子。 答案&#xff1a;鸿蒙是“分布式操作系统”&am…

Kotlin 优雅的接口实现

1. 日常遇到的冗余的接口方法实现 日常开发中&#xff0c;经常会要实现接口&#xff0c;但是很多场景中&#xff0c;只需要用到其中一两个方法&#xff0c;例如 ActivityLifecycleCallbacks&#xff0c;它有很多个接口需要实现&#xff0c;但是很多时候我们只需要用到其中的一…

Java List 自定义对象排序 Java 8 及以上版本使用 Stream API

从 Java 8 开始&#xff0c;你可以使用 Stream API 对 List 进行排序&#xff0c;这种方式更加简洁和灵活。 以下是一个示例代码&#xff1a; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;// 自定…

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构&#xff0c;包含一系列功能要素&#xff0c;被分为大约20个模块 Spring核心容器&#xff1a;包含Core、Bean、Context、Expression Language模块 Core &#xff1a;其他组件的基本核心&#xff…

Linux内核读写锁与读写信号量的区别及选用

在Linux内核中&#xff0c;读写锁&#xff08;rwlock_t&#xff09;和读写信号量&#xff08;struct rw_semaphore&#xff09;是两种不同的同步机制&#xff0c;适用于不同的场景。以下是它们的区别和选用建议&#xff1a; 核心区别 特性读写锁 (rwlock_t)读写信号量 (struct…

用openresty和lua实现壁纸投票功能

背景 之前做了一个随机壁纸接口&#xff0c;但是不知道大家喜欢对壁纸的喜好&#xff0c;所以干脆在实现一个投票功能&#xff0c;让用户给自己喜欢的壁纸进行投票。 原理说明 1.当访问http://demo.com/vote/时&#xff0c;会从/home/jobs/webs/imgs及子目录下获取图片列表&…