13.1 什么是XXE
xml外部实体注入,由于程序在解析输入的数据过程中,解析了攻击者伪造的外部实体造成的攻击。
13.2 XXE原理
在解析外部实体的过程中,XML解析器可以根据URL中指定的协议去查询各种网络协议和服务(DNS,FTP,HTTP,SMB等)。因为引用资源所做的任何更改都会在文档中自动更新。 所以,如果在处理外部实体时带有恶意攻击就会造成XXE漏洞.
13.3 危害
读取任意文件、执行系统命令、探测内网端口、攻击内部网络等危害
13.4 无回显利用
1.攻击主机向存在xxe漏洞的服务器发送特定的请求包?
1.迫使存在xxe漏洞的服务器读取指定的文件
2.让存在xxe漏洞的服务器主动向特定的url包含dtd文件的内容
2.存在xxe漏洞的服务器
1.在接收到攻击主机构造的请求包后读取特定文件的内容
2.根据读取到的dtd文件的指示将读取到的文件内容转发给特定ip下的特定端
13.5 防御
一 检查所使用的底层XML解析库,默认禁止外部实体的解析;
二 是若使用第三方应用代码需要及时升级补丁;
三 是对用户提交的XML数据进行过滤,如关键词:<!DOCTYPE和<!ENTITY或者SYSTEM和PUBLIC等。
13.6 绕过
13.6.1 空格绕过(在<?xml?>或<!DOCTYPE>中插入数量足够多的空格去绕过WAF的检测)
13.6.2 编码绕过(当服务端对一些关键词过滤时(SYSTEM ENTITY)时,可以使用UTF-7绕过)
同源策略
域名、协议、端口相同
反序列化漏洞
16.1 什么是PHP反序列化漏洞
序列化与反序列化
php中有两个函数serialize() 和unserialize()。
序列化:把对象转换为可传输的字节序列过程成为序列化
反序列化:把字节序列还原为对象的过程被成为~
站点或者接口等处存在unserialize的反序列化功能,攻击者可以通过构造特定的恶意对象序列化后的流,让目标反序列化,从而达到自己的恶意预期行为.
serialize()
当在php中创建了一个对象后,可以通过serialize()把这个对象转变成一个字符串,保存对象的值方便之后 的传递与使用。测试代码如下;
unserialize()
与 serialize() 对应的,unserialize()可以从已存储的表示中创建PHP的值,单就本次所关心的环境而 言,可以从序列化后的结果中恢复对象(object)。
反序列化漏洞
当传给 unserialize() 的参数可控时,我们可以通过传入一个精心构造的序列化字符串,从而控制对象内 部的变量甚至是函数。
16.2 危害
命令执行,甚至getshell等等。
16.3 魔术方法
__construct 当实例化对象时调用
__destruct 当对象被销毁时调用
__call 当调用一个不存在或者无法调用的非静态方法时
__callStatic 当调用一个不存在或者无法调用的静态方法时
__invoke 当把类所衍生的对象当作一个函数来使用时
__get 当访问一个不存在或者无权限获取的属性时
__set 当设置一个不存在或者无权限设置值的属性时
__sleep 当序列化对象时调用 该函数返回一个数组, 代表对哪些属性进行序列化
__wakeup 当对字符串进行反序列化生成对象时调用
__toString 当将对象当作字符串进行处理时调用
16.4 防御
不要把用户的输入或者是用户可控的参数直接放进反序列化的操作中去。
16.5 Java反序列化漏洞