Python 沙箱逃逸技术全解——从关键字绕过到栈帧劫持
前言Python 沙箱逃逸是 CTF 和真实渗透中的经典考点。题目通常提供一个受限的 Python 执行环境——禁用了 os、system、import 等危险功能,或通过 proot/chroot 隔离文件系统。攻击者需要利用 Python 语言特性绕过这些限制,读取 flag 或执行命令。 本文从最基础的字符串绕过到生成器栈帧逃逸再到 pth 文件劫持,系统地覆盖 Python 沙箱逃逸的完整知识体系。 一、传统逃逸——字符串与关键字绕过1.1 os 关键字被 ban如果黑名单禁止了字符串 os,核心思路是**让 os 这个字符串”变形”,执行时再”还原”**。 方法一:字符串反转123__import__('so'[::-1]).system('ls')eval(')"imaohw"(metsys.)"so"(__tropmi__'[::-1])exec(')"imaohw"(metsys.)"so"(__trop...
Flask 内存马技术全解——SSTI 注入后门的七种写入方式
前言内存马(Memory Shell)是一种无文件后门技术。传统 webshell 需要落地一个 .php / .jsp / .py 文件到服务器磁盘,容易被杀软和日志发现。而内存马只存在于进程内存中——注入到框架的路由表、中间件链、错误处理器等位置,不留文件痕迹。 Flask 的内存马尤其适合在 SSTI(Server-Side Template Injection) 场景下使用。一旦拿到 SSTI,不再需要逐条执行命令——只需把后门注入到 Flask 的运行时结构中,后续任何 HTTP 请求都可以触发。 本文覆盖 Flask 内存马的 七种写入方式,附带完整 payload 和绕过黑名单的实战案例。 一、前置知识1.1 add_url_rule —— Flask 动态路由注册Flask 的路由注册本质上是调用 add_url_rule。@app.route('/path') 只是语法糖。 12345678910111213141516from flask import Flaskapp = Flask(__name__)# 装饰器写法(语...
Flask Debugger PIN 计算与 Session 伪造完全攻略
前言Flask 的 debug 模式会启动 Werkzeug 交互式调试控制台(/console)。这个控制台受一个 PIN 码保护——而这个 PIN 码是由机器的稳定特征信息计算出来的,一旦攻击者通过文件读取或 SSTI 获取到这些特征值,就能在本地复算出 PIN 码,进而在目标服务器上执行任意 Python 代码。 此外,Flask 的 session 存储在客户端 Cookie 中,只靠 secret_key 签名防篡改。如果 secret_key 泄露(通常也在环境变量 /proc/self/environ 中),攻击者即可伪造任意 session。 本文系统梳理:PIN 码如何计算 → 各部分如何获取 → 手算 PIN 码 → Session 伪造 → 完整攻击链。 一、Werkzeug Debugger 与 PIN 机制1.1 什么是 WerkzeugWerkzeug 是 Flask 底层用的 WSGI 工具库。当 Flask 以 debug=True 启动时,Werkzeug 会在以下路由提供调试功能: 路由 功能 /console 交互式 Pytho...
软链接攻击专题——从ZIP软链接到Docker环境变量泄露
前言软链接(Symbolic Link)在 Linux 中是一种”快捷方式”——它本身是一个特殊文件,内容是目标文件的路径字符串。当程序打开软链接时,内核会自动跟随到目标文件。这个特性在 CTF 中经常被利用:ZIP 压缩包可以保留软链接属性,解压后软链接指向敏感文件(如 /proc/self/environ、/flag),下载即可读取。 本文从硬/软链接的基础区别讲起,结合两道真实 CTF 题目,完整拆解软链接攻击的原理与利用链。 一、硬链接与软链接基础1.1 什么是 inodeLinux 文件系统中,每个文件对应一个 inode(索引节点),存储文件的元数据(大小、权限、数据块位置等)。文件名和 inode 是分离的——文件名只是一个指向 inode 的标签。 12文件名 "a.txt" → inode #12345 → 数据块文件名 "b.txt" → inode #12345 → 数据块 (同一个 inode) 1.2 硬链接(Hard Link)硬链接直接指向文件数据的 同一个 inode。多个文...
HTTP 请求走私攻击详解与 Python 实现
前言HTTP Request Smuggling(HTTP 请求走私)是一种利用前端代理/负载均衡器与后端服务器对 HTTP 请求解析差异的攻击技术。当链路上的两台服务器对 Content-Length(CL)和 Transfer-Encoding(TE)头的处理不一致时,攻击者可以在一个请求中”夹带”另一个请求,导致请求被错误路由、缓存投毒、权限绕过等严重后果。 本文从 Python socket 编程出发,逐步拆解走私原理,并给出可运行的 PoC 代码。 一、基础知识1.1 HTTP 持久连接(Keep-Alive)HTTP/1.1 默认使用持久连接,即一个 TCP 连接上可以发送多个 HTTP 请求,后端通过 Content-Length 或 Transfer-Encoding 来判断每个请求的边界。请求走私正是利用边界判断的不一致来作文章。 1[请求A][请求B][请求C] ← 同一个 TCP 连接,按边界切分 1.2 socket 编程基础12345678910import socket# 创建 TCP socketserver_socket ...
SQL 注入绕过与利用技术汇总
前言SQL 注入是一类古老但至今仍然常见的高危漏洞。随着防御手段的不断升级,注入技巧也在持续演进——关键字被过滤、空格被拦截、报错回显被关闭,各种 WAF 层层设卡。本文从实战角度出发,系统性地整理了 SQL 注入中常见的绕过技巧、注入手段以及无回显场景的利用方法,覆盖 MySQL 与 SQLite,持续更新。 一、输出过滤绕过服务端对查询结果做了字符替换(如把数字替换为空),可以通过嵌套 replace() 将敏感内容还原。 12345select * from user where username='0' union select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace( password,'1','A'),'2','B'),'3','C'),'4','D'),...
PHP 反序列化攻击与 POP 链构造
前言PHP 反序列化漏洞是 OWASP Top 10 中的经典类型,攻击者通过控制 unserialize() 的输入,构造恶意对象的属性来控制程序流程(Property-Oriented Programming),最终实现代码执行、文件读取、SSRF 等攻击。本文从魔术方法出发,逐步覆盖绕过手法、SoapClient/Phar/Session 反序列化以及字符串逃逸等技术。 一、魔术方法大全魔术方法是 PHP 反序列化的基石,理解每个方法的触发时机是构造 POP 链的前提。 1.1 对象实例化与销毁 方法 触发时机 利用价值 __construct() 对象 new 时自动执行 实例化时注入恶意代码 __destruct() 对象销毁时自动执行(脚本结束 / 反序列化后对象被回收) POP 链最常见的终点,反序列化后必然触发 __clone() 拷贝对象 clone $obj 时 少见但特定场景可用 1.2 序列化 / 反序列化流程12serialize() 时:__sleep() → 序列化unserialize...
SSRF 攻击与绕过技术总结
前言SSRF(Server-Side Request Forgery,服务端请求伪造)是一种由攻击者构造请求、由服务端发起请求的安全漏洞。SSRF 的目标通常是外网无法直接访问的内网系统,配合各种协议可以演变为代码执行、文件读取、端口扫描等多种攻击方式。 一、常用协议及用途 协议 用途 示例 file:// 读取本地文件 file:///etc/passwd dict:// 字典服务协议,端口扫描(比 ftp 快) dict://192.168.1.1:6379/info ftp:// FTP 协议,端口扫描 / 文件传输 ftp://vps/evil.txt sftp:// SSH 文件传输协议(安全 FTP) sftp://vps/evil.txt ldap:// 轻量级目录访问协议 ldap://127.0.0.1:389/... tftp:// 简单文件传输协议 tftp://vps/evil.txt gopher:// 分布式文档传输协议,可构造任意 TCP 数据包 gopher://127.0.0.1:6379/_*1.....
PHP 原生类利用总结
前言PHP 内置了丰富的原生类(Built-in Classes),无需引入外部代码即可使用。在反序列化、代码执行受限等场景中,合理利用原生类往往能出奇制胜。本文整理 PHP 原生类在安全利用中的常见手法,按功能分类介绍。 常用原生类速查123456789101112131415161718Error — __toString 控制输出 / md5 sha1 绕过Exception — 同 ErrorSoapClient — CRLF 注入 → SSRF(反序列化核心)DirectoryIterator — 遍历目录FilesystemIterator — 遍历目录(可配合 glob://)GlobIterator — 遍历目录(自带通配符,无需 glob:// 前缀)SplFileObject — 读取文件内容SimpleXMLElement — XXE 注入ReflectionClass ...
PHP 手册 - 常见函数特性与审计技巧
前言PHP 函数众多,每个函数都有各自的边界行为和特性,审计中经常因为不了解某个函数的”潜规则”而错过利用链。本文整理 PHP 常见函数在安全审计中的特性、边界条件和绕过技巧,当作速查手册用。 一、运算符与语言特性1.1 赋值 vs 逻辑运算符优先级赋值的优先级高于 and、or,但低于 &&、||: 1234567891011$v0 = is_numeric($v1) and is_numeric($v2) and is_numeric($v3);// 相当于 ($v0 = is_numeric($v1)) and is_numeric($v2) and is_numeric($v3);// 只要 v1 是数字,$v0 就是 1,后面的 and 不影响赋值$v0 = is_numeric($v1) && is_numeric($v2) && is_numeric($v3);// 相当于 $v0 = (is_numeric($v1) && is_numeric($v2) && is_numeric(...