note
XML注入
什么是XML注入
又叫XML实体注入,XML External Entity attack(XXE)
XML injection,XML注入漏洞。
XML注入类似于SQL注入,XML文件一般用作存储数据及配置,如果在修改或新增数据时,没有对用户可控数据做转义,直接输入或输出数据,都将导致XML注入漏洞的产生。
- 有的服务器会通过生成XML来达到存储信息(可能是用户个人信息酱紫的东西)
- 举个栗子
正常情况下服务器存储的数据是酱紫的:
<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest">
<name>xlydm</name>
<passwd>12345</passwd>
</USER>
<USER role="admin">
<name>admin</name>
<passwd>202cb962ac59075b964b07152d234b70</passwd>
</USER>
那么这种情况下用户guest传入的密码就是酱紫的:
12345
那么这个用户他要是脑洞大开,传入的密码是这样的呢?
12345</passwd></USER><USER role="admin"><name>admin</name><passwd>123456</passwd></USER><!--
是不是有点熟悉?那么咱们加个xml高亮再看看
12345</passwd></USER><USER role="admin"><name>admin</name><passwd>123456</passwd></USER><!--
emmmm这样插入之后的文件内容就变成了这样:
<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest">
<name>xlydm</name>
<passwd>12345</passwd>
</USER>
<USER role="admin">
<name>admin</name>
<passwd>123456</passwd>
</USER><!--
</passwd>
</USER>
<USER role="admin">
<name>admin</name>
<passwd>202cb962ac59075b964b07152d234b70</passwd>
</USER>
事情开始变得微妙了起来
防御方法
防御XML注入的思路和SQL和XSS类似,主要还是字符串过滤以及用户权限的限制
远程文件包含漏洞
定义
- 这种问题大多出现在php中,JSP和ASP则较为少见
- 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为包含。在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。
- 如果PHP的配置选项allow_url_include为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。
- PHP常见的导致文件包含的函数如下:
- include()
- include_once
- require()
- require_once()
- fopen()
- readfile()
防御方法
php.ini文件及时关闭allow_url_fopen和allow_url_include
禁止用户直接输入源码,而可以用一些简单字符(比如说1、2、3、a、b、c等)
本地文件包含漏洞
(有点像文件上传漏洞)
四种攻击方式:
- 在URL中包括了一个文件:简单级别
- Null Byte:高安全级别,本地文件包含攻击不能工作的。对服务器中的一些敏感目录、敏感文件进行攻击也是通过URL进行攻击
- PHP函数:Base64 encoded转码进行攻击
- 利用PHP INPUT 函数:通过注入PHP代码来利用LFI漏洞,加载目标URL
命令执行漏洞
- PHP函数:Base64 encoded转码进行攻击
- 利用PHP INPUT 函数:通过注入PHP代码来利用LFI漏洞,加载目标URL