Python 原型链污染
1. Python原型链污染Python原型链污染是一种通过修改对象原型链中的属性,导致程序行为偏离预期的攻击技术。其核心原理与JavaScript原型链污染类似,但实现方式因语言特性而有所差异。 原型继承特性:Python中每个对象通过__class__属性指向其所属类,类通过__base__属性指向父类。当访问对象属性时,若当前对象/类中未定义,会沿原型链向上查找。 污染条件:需要存在递归合并函数(如merge)且未对特殊属性过滤 在 Python 中,每个对象都有一个原型链。当访问属性时,程序会先在对象本身查找,若找不到则沿着原型链向上查找。通过污染类的属性,可以影响所有实例的行为。 2. 污染条件与污染分析原型链污染需要merge合并函数 例1:一个最简单的原型链污染: 1234567891011class Config: is_admin = False def set_config(cls, key, value): setattr(cls, key, value) def get_config(cls, key): ...
Python yaml 反序列化
Python YAML 反序列化 = 用 PyYAML 等库把一串 YAML 文本还原成 Python 对象。 如果这个 YAML 来自用户 / 外部输入,并且用的是“危险的 loader”,就很容易变成 RCE(任意代码执行)等严重漏洞 1. 什么是YAML 反序列化序列化 / 反序列化: 序列化:把对象 → 文本 / 字节串(方便存储 / 传输),比如 JSON、YAML、pickle。 反序列化:把文本 / 字节 → 对象。 YAML 在 Python 里最常用的就是 PyYAML: 12345678910import yamls = """name: Echoinage: 18"""data = yaml.safe_load(s)print(data)# data = {'name': 'Echoin', 'age': 18} 这一步 safe_load 就是「YAML...
Python pickle 反序列化
Pickle 是 Python 提供的序列化与反序列化模块,用于将 Python 对象转换为字节流或从字节流还原对象。然而,Pickle 的反序列化存在安全隐患,尤其是在处理不可信数据时,可能导致 远程代码执行(RCE) 等严重问题。 pickle 反序列化 == 在执行一段“可以随便跑 Python 代码的脚本” 只要让后台对“你可控的数据”做 pickle.loads(),你就基本可以 RCE(远程执行命令)。 一、什么是(反)序列化 序列化(serialize): 把内存里的对象(list、dict、类实例等)→ 变成一串字节 / 字符串,方便: 写进文件 通过网络传输 存到缓存 / 数据库 反序列化(deserialize): 把这串字节 / 字符串 → 还原成原来的对象。 类比一下: 序列化 = 把一个乐高模型拆成零件,打包装箱。 反序列化 = 根据说明书把乐高重新拼回来。 在 Python 里: 12345678import pickledata = {"user&qu...
phar 反序列化
PHP Phar反序列化总结_ctf phpphar反序列化-CSDN博客 利用 phar 拓展 php 反序列化漏洞攻击面 浅析Phar反序列化 - FreeBuf网络安全行业门户 php(phar)反序列化漏洞及各种绕过姿势_throw new 绕过php-CSDN博客 Phar反序列化Phar文件结构phar文件是php里类似于JAR的一种打包文件本质上是一种压缩文件,在PHP 5.3 或更高版本中默认开启,一个phar文件一个分为四部分。 1[Stub] + [Manifest] + [File Contents] + [Signature] 1.a stub 可以理解为一个标志,格式为xxx<?php xxx; __HALT_COMPILER();?>,前面内容不限,但必须以__HALT_COMPILER();来结尾,否则phar扩展将无法识别这个文件为phar文件**(注意绕过)**2.a manifest describing the contents Manifest 是 Phar 文件格式中的一个核心部分,它相当于 Phar 文件的”目录”...
PHP 反序列化学习
1.什么是序列化和反序列化序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串转换为对象供程序使用。在PHP中序列化和反序列化对应的函数分别为serialize()和unserialize()。 2.什么是反序列化漏洞当程序在进行反序列化时,会自动调用一些函数,例如__wakeup(),__destruct()等函数,但是如果传入函数的参数可以被用户控制的话,用户可以输入一些恶意代码到函数中,从而导致反序列化漏洞。 3.序列化函数(serialize)当我们在php中创建了一个对象后,可以通过serialize()把这个对象转变成一个字符串,用于保存对象的值方便之后的传递与使用 例如 查看结果 4反序列化(unserialize) unserialize()可以从序列化后的结果中恢复对象(object)为了使用这个对象,在下列代码中用unserialize重建对象. 测试代码: 查看结果 5.什么是PHP魔术方法魔术方法是PHP面向对象中特有的特性。它们在特定的情况下被触发,都是以双下划线开头,利用魔术方法可以轻松实...
Node.js 相关漏洞 + EJS 模板注入
Node.js 的 5 个常见服务器漏洞 - 知乎 Node.js 常见漏洞学习与总结-先知社区 nodejs相关漏洞Node.js 是一个开源、跨平台的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。它基于 Google 的 V8 JavaScript 引擎(Chrome 浏览器使用的引擎),以高效、事件驱动和非阻塞 I/O 的特性闻名。以下是对 Node.js 的详细介绍,涵盖其定义、核心特性、架构、工作原理、应用场景以及优缺点。 在Node.js应用中,漏洞可能导致远程代码执行、拒绝服务甚至数据泄露。攻击者可通过构造恶意输入触发异步加密操作错误,从而远程崩溃Node.js进程,造成拒绝服务。 示例: 123// 危险示例:未验证的用户输入进入加密操作crypto.subtle.deriveBits(algorithm, userProvidedKey, length).then(bits => { /* ... */ }); 若userProvidedKey可控且触发底层ThrowExcepti...
91星人 - 存储型XSS + AdminBot 复盘
考点:base91 编码 + 存储型 XSS + Admin Bot 外带日期:2026-08-02 一、攻击链总览(一句话)123注册 username 注入 <script> → 创建笔记 → 把 sid 提交给 /patrol→ bot 以 admin 登录访问 → XSS 在 admin 会话执行→ 读 admin 的 flag → 外带到攻击者服务器 → 解码得 flag 二、考点拆解考点 1:base91 编码(题目名来源) flag 在数据库里不是明文,是 based91.encode(flag) 的密文 base91 字符集特殊:含 € ° 等非 ASCII 字符,必须用题目自带的 based91.py(标准库字母表不同会不匹配) 出题人预期解法:逆向 base91,构造输入字节使编码输出含 <script> 用 /beam 的 hex 输入特性(unpack_transmission 会自动 hex 解码) 我写过一个 preimage 搜索脚本(BFS 匹配前缀),7 字节输入就能让输出以 <script> 开头 ...
XXE ctfshow Writeup
XXE:XML外部实体注入 ctfshowweb373代码漏洞点 libxml_disable_entity_loader(false); - 启用了外部实体加载(默认是禁用的,这里特意开启了) $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 两个关键参数: LIBXML_NOENT:允许替换实体(将实体引用替换为实体内容) LIBXML_DTDLOAD:允许加载外部 DTD(文档类型定义) 接收用户可控的 XML 输入(php://input)并直接解析 1234567<?xml version="1.0" encoding="utf-8"?><!DOCTYPE payload [<!ENTITY payload SYSTEM "file:///flag">]><web373><ctfshow>&payload;</ctfshow></web373> ...
NSS 2025.7 Writeup
1.[SWPUCTF 2021 新生赛]gift_F12、[ LitCTF 2023]我Flag呢?查看源代码,找flag 2.[SWPUCTF 2021 新生赛]easy_md5PHP代码基本信息: 包含了flag2.php文件 判断是否有用户通过GET方法传递了name参数,以及通过POST方法传递了password参数 如果没有,就直接输出wrong!。 如果有,它就将这两个参数分别赋值给name和password变量,并进行以下判断: 如果name和password不相等,并且它们的MD5哈希值相等,就输出flag2.php文件中的内容。 这是一个逻辑漏洞,因为MD5哈希函数是不可逆的,但是存在碰撞的可能性,也就是说,不同的输入可能产生相同的输出。所以,如果用户能够找到两个不同的字符串,但是它们的MD5值相同,就可以通过这个判断。 否则,就输出wrong!。 关键漏洞点:MD5 弱比较 PHP 中的==是弱类型比较,不会严格校验数据类型。当比较两个字符串的 MD5 值时,如果 MD5 值以0e开头,PHP 会将其解释为科学计数法的 0,导致所有以0e开头...
CTFhub HTTP Writeup
CTFHUB-CTF-Web-Web前置技能-HTTP协议一、请求方式1.打开Burp的代理服务(默认:127.0.0.1:8080)2.打开所给网站,根据提示,Method应该为CTF**B的形式 3.修改Method为”CTFHUB” 4.发送(Forward)修改后的请求5.看Response(响应),找flag{XXXXX}6.如果没有找到,根据提示,应在URL为”index.php”的相应里找,所以需要多次进行尝试,一直到找到flag HTTP/1.1协议定义的8种请求方法: GET(直接获取),POST(发送数据),PUT(新增数据记录),DELETE(删除),HEAD(判断是否存在/获取响应头),OPTIONS(获取支持的请求方式),TRACE(修改),CONNECT(建立与代理服务器的隧道连接). 二、Cookie1.代理,拦截,请求后,在响应中找到Cookie相关信息admin:=0 2.将响应中的内容放入“重发器”(Repeater)中,在左侧写上“Cookie: admin=0”,通过“Upgrade-Ins...