其他小众类型输入攻击

一、XML注入:XXE Injection即XML External Entity Injection
XML最初设计的目的是弥补HTML的不足,后来逐渐用于网络数据的转换和描述。XML的设计宗旨是传输数据,而非显示数据。
XML是各种应用程序之间数据传输中最常用的工具。

[html] view plain copy

  1. <pre name="code" class="html"><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
  2. <manager>
  3. <admin id="1">
  4. <name>admin</name>
  5. <password>admin</password>
  6. </admin>
  7. <admin id="2">
  8. <name>root</name>
  9. <password>root</password>
  10. </admin>
  11. </manager>


攻击者如果恰好能掌控password字段,那么就会产生XML注入,如攻击者输入:

[html] view plain copy

  1. admin</password></admin><admin id="5"><name>hack</name><password>hacker

XML注入时的两大要素为:标签闭合和获取XML表结构。

至今,XML注入还是比较少见的,而且XML注入修复也是比较简单的事情,只需要将预定义字符进行转义即可。

预定义字符

< &lt;
> &gt;
& &amp;
&apos;
" &quot;

二、XPath注入
XPath即为XML路径语言,XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。简单地说,XPath就是选取XML节点的一门语言。
XPath与SQL注入的方式类似。

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3. <user id="1">
  4. <name>admin</name>
  5. <password>admin888</password>
  6. </user>
  7. <user id="2">
  8. <name>root</name>
  9. <password>root123</password>
  10. </user>
  11. </users>

在查询时,输入XPath语句:

[plain] view plain copy

  1. //user[username/text()=‘admin‘ and password/text()=‘admin888‘]

结果会返回

[plain] view plain copy

  1. Id:1
  2. UserName:admin
  3. PassWord:admin888

假设我们可以控制XPath语句,那么使用or 1=1即可遍历全部节点,语句如下:
//user[username/text()=‘admin‘ and password/text()=‘‘ or ‘1‘=‘1‘]
结果会返回

[plain] view plain copy

  1. Id:1
  2. UserName:admin
  3. PassWord:admin888
  4. Id:2
  5. UserName:root
  6. PassWord:root123

对一些敏感信息,不要 使用XML传输,如果一定要使用XML,建议尽量使用密文传输,防御方法和XML注入一样,对关键字符转换。

三、JSON注入
JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集。简单地说,JSON可以将JavaScript中的对象转换为字符串,然后在函数、网络之间传递这个字符串。
JSON和XML存在竞争关系。在XML中需要许多开始标记和结束标记,而JSON简单明了。

[plain] view plain copy

  1. {"users":[
  2. {"UserName":"admin","PassWord":"admin888","email":"[email protected]"}
  3. {"UserName":"root","PassWord":"root123","email":"[email protected]"}
  4. ]}

如果有恶意用户向JSON中注入恶意字符,那么JSON将解析失败,例如,输入的哦PassWord值为:admin"888
那么组装成的JSON数据位如下:"PassWord":"admin"888"。在password中的引号将会破坏整个JSON结构,导致JSON解析失败。

防御方法为对关键字符进行转义,也可使用第三方库,比如Java可使用JSON-lib.jar组建JSON数据。

四、HTTP参数污染:HPP即HTTP Parameter Pollution
HTTP请求中未规定不可以传输多个相同的参数项。当请求类似http://www.example.com/news.PHP?id=1&id=2&id=3时,不同脚本环境的取的参数也不同,有的取id=1,有的取id=3,有的三个参数都取。
HPP参数污染经常用来逃过一些Web应用防火墙(WAF)
简单地说,WAF在脚本还未接收到请求之前就开始对数据进行校验,如果未发现恶意代码,则交给脚本去处理,如果发现恶意代码,就进行拦截,不再交给脚本去处理。
例如,某个WAF防火墙定义数据中不允许出现select关键字,WAF取值验证时可能会选择第一项参数值,而脚本取值与WAF不同,这样就有可能绕过WAF的数据验证。
PHP:new.php?id=1&id=select username,password from admin -- 
ASP.NET: news.aspx?id=s&id=e&id=l&id=e&id=c&id=t

时间: 2024-10-06 21:33:37

其他小众类型输入攻击的相关文章

html5 input[number]类型输入非数字字符val()为“”和解决方案

html5新增的number输入类型会在input框获得焦点的时候呼起数字键盘,增加了体验的效果.但是在一些安卓机器上,还是能够切换道字符输入,用户也会不小心输入"+""-"之类的非数字字符.测试了一下,number类型是会自动忽略字母字符和其他非数字字符的,除了"+""-""."这两个字符可以输入,因为这两个是正负数和小数点的符号. number类型还有一个很坑的点是,如果输入框中的内容不是纯数字(正数,

String 类型与char 类型 输入

1.如果直接用csanf 输入string与char类型的,string是输入不了的 但提前申请空间就可以 #include <stdio.h>#include <string>#include<iostream>using namespace std;int main(){ string a; a.resize(2); //需要预先分配空间,resize()分配空间 scanf("%s", &a[0]); cout << a;

ObjectInputStreamTest 对象类型输入输出流

package IOliu; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ObjectInputStreamTest { public static v

拒绝服务攻击的常见类型

一. 什么是 DoS & DDoS ? 拒绝服务攻击(Denial-of-Service Attack)亦称洪水攻击,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问. 分布式拒绝服务攻击(Distributed Denial-of-Service Attack),是使用网络上两个或两个以上被攻陷的电脑作为 “僵尸” 向特定的目标发动 “拒绝服务” 式攻击. 二. 常见类型及攻击原理 (1)被攻击特征 受害主机在 DDoS 攻击下,明显特

设备与主机的攻击日志类型分析总结

随着网络技术的普及,网络攻击行为出现得越来越频繁.另外,由于网络应用的多样性和复杂性,使得各种网络病毒泛滥,更加剧了网络被攻击的危险. 目前,Internet上常见的网络安全威胁分为以下三类: 1.扫描窥探攻击 扫描窥探攻击利用ping扫描(包括ICMP和TCP)标识网络上存在的活动主机,从而可以准确地定位潜在目标的位置:利用TCP和UDP端口扫描检测出目标操作系统和启用的服务类型.攻击者通过扫描窥探就能大致了解目标系统提供的服务种类和潜在的安全漏洞,为进一步侵入目标系统做好准备. 2.IP报文

HTML 输入类型

HTML 输入类型 输入类型 本章描述 <input> 元素的输入类型. 输入类型:text <input type="text"> 定义供文本输入的单行输入字段: 实例 输入类型:password <input type="password"> 定义密码字段:只有使用了type="password",密码才能看不到. 实例 输入类型:submit <input type="submit&quo

【转】WEB网站常见受攻击方式及解决办法

一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是最常见和基本的攻击WEB网站的方法.攻击者在网页上发布包含攻击性代码的数据.当浏览者看到此网页时,特定的脚本就会以浏览者用户的身份和权限来执行.通过XSS可以比较容易地修改用户数据.窃取用户信息,以及造成其它类型的攻击,例如CSRF攻击 常见解决办法:确保输出到HTML页面的数据以HTML的方式被转

无需密码攻击 Microsoft SQL Server

最近的一次渗透测试里,在我们捕获的一些数据包中发现了一些未经加密的 Microsoft SQL Server(MSSQL) 流量.起初,我们认为这样就可以直接嗅探到认证凭证,然而,MSSQL 加密了认证的流量,这就意味着我们需要先解密才能获取到认证凭证.如果安装的是一个自签名证书,就很容易进行破解. 不幸的是,破解 MSSQL 加密不在授权范围之内,我们不得不先放下好奇心完成对客户的渗透测试.不过,因为心里总想着一件事以至于无法继续正常进行工作,我们可以在没有用户凭证的情况下攻击 SQL Ser

SQL 注入、XSS 攻击、CSRF 攻击

SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参数的查询字符串里面提交给服务器,从而让服务器执行编写的恶意的 SQL 命令. 对于 web 开发者来说,SQL 注入已然是非常熟悉的,而且 SQL 注入已经生存了 10 多年,目前已经有很成熟的防范方法,所以目前的 web 应用都很少会存在漏洞允许进行 SQL 注入攻击. 除非是入门开发人员,在开发