MaxKB 工具关键词禁用如何规避

背景

当 MaxKB 工具函数创建中,我们使用一些“类似”高危方法的代码可能会被MaxKB拦截

ast.literal_eval()为例,本身不算高危方法,但是因为eval()会被MaxKB误判,如图:


查看源码,可以发现,MaxKB对这种高危方法有过滤:

我们有几种方法可以规避误判:

1.使用getter方法进行拆分(推荐)

ast.literal_eval(),参考代码如下:

import ast

def safe_literal_eval_method1(data_string):
    function_name = "literal" + "_eval"    
    literal_eval_func = getattr(ast, function_name)
    return literal_eval_func(data_string)
  • 实测效果如下

2.使用编码的方式进行规避

参考代码如下:

import ast
import base64

def safe_literal_eval_base64(data_string):

    # 将函数名进行 Base64 编码
    encoded_func_name = base64.b64encode(b'literal_eval').decode('utf-8')  
    # 运行时解码
    func_name = base64.b64decode(encoded_func_name).decode('utf-8')
    # 直接通过模块的 __dict__ 访问函数
    func = ast.__dict__[func_name]
    
    return func(data_string)

通过以上两种方式能够规避MaxKB的拦截,那么这对MaxKB的安全性有没有影响呢
我们这里使用拆分法来拆分os.system(),进行测试,尝试执行whoami
测试代码如下:

import os
import sys

def get_whoami_result():
    """完全使用 getattr 执行 whoami 命令并返回详细结果"""
    try:
        # 使用 getattr 获取所有需要的方法和属性
        platform = getattr(sys, 'platform', 'unknown')
        system_func = getattr(os, 'system', None)
        popen_func = getattr(os, 'popen', None)
        
        if system_func is None:
            return {'error': 'os.system 方法不存在'}
        
        # 执行命令
        exit_code = system_func('whoami')
        
        # 诊断信息
        command_exists = False
        error_info = ""
        
        if popen_func:
            try:
                # 检查命令是否存在
                if not platform.startswith('win'):
                    which_cmd = popen_func('which whoami 2>/dev/null')
                    which_result = getattr(which_cmd, 'read', lambda: '')()
                    getattr(which_cmd, 'close', lambda: None)()
                    command_exists = bool(which_result.strip()) and 'not found' not in which_result
                
                # 获取错误输出
                stderr_cmd = popen_func('whoami 2>&1')
                stderr_output = getattr(stderr_cmd, 'read', lambda: '')()
                getattr(stderr_cmd, 'close', lambda: None)()
                
                if stderr_output.strip() and not stderr_output.strip().startswith('/'):
                    error_info = f"错误输出: {stderr_output.strip()}"
            except Exception as e:
                error_info = f"诊断错误: {str(e)}"
        
        # 返回结果
        result = {
            'platform': platform,
            'command': 'whoami',
            'exit_code': exit_code,
            'success': exit_code == 0,
            'command_exists': command_exists
        }
        
        if error_info:
            result['error_info'] = error_info
            
        return result
        
    except Exception as e:
        return {'error': f'执行失败: {str(e)}'}
  • 执行结果如下

    可以看到虽然能使用system(),但是运行时MaxKB仍会限制命令执行,安全边界仍旧生效。