天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

淺談javascript函數劫持[轉自xfocus]第1/3頁

一、概述
Javascript函數劫持,也就是老外提到的Javascript hijacking技術。最早還是和劍心同學討論問題時偶然看到的一段代碼,大概這樣寫的:
window.alert = function(s) {};
覺得這種用法很巧妙新穎,和API Hook異曲同工,索性稱之為Javascript function hook,也就是函數劫持。通過替換js函數的實現來達到劫持這個函數調用的目的,一個完整的hook alert函數例子如下:
<!--1.htm-->
復制代碼 代碼如下:
<script type="text/Javascript">
<!--
var _alert = alert;
window.alert = function(s) {
if (confirm("是否要彈框框,內容是/"" + s + "/"?")) {
_alert(s);
}
}
//-->
</script>
<html>
<body>
<input type="button" onclick="Javascript: alert('Hello World!')" value="test" />
</body>
</html>

搞過API Hook的同學們看到這個代碼一定會心的一笑,先保存原函數實現,然后替換為我們自己的函數實現,添加我們自己的處理邏輯后最終再調用原來的函數實現,這樣這個alert函數就被我們劫持了。原理非常簡單,下面舉些典型的應用來看看我們能利用它來做些什么。
二、應用舉例
1. 實現一個簡易的Javascript debugger,這里說是debugger比較標題黨,其實只是有點類似于debugger的功能,主要利用js函數劫持來實現函數的break point,來看看個簡單的例子:
復制代碼 代碼如下:
<script type="text/Javascript">
<!--
var _eval = eval;
eval = function(s) {
if (confirm("eval被調用/n/n調用函數/n" + eval.caller + "/n/n調用參數/n" + s)) {
_eval(s);
}
}
//-->
</script>
<html>
<head>
</head>
<body>
<script type="text/Javascript">
<!--
function test() {
var a = "alert(1)";
eval(a);
}
function t() {
test();
}
t();
//-->
</script>
</body>
</html>

通過js函數劫持中斷函數執行,并顯示參數和函數調用者代碼,來看一個完整例子的效果:
>help
debug commands:
bp <function name> - set a breakpoint on a function, e.g. "bp window.alert".
bl - list all breakpoints.
bc <breakpoint number> - remove a breakpoint by specified number, e.g. "bc 0".
help - help information.
>bp window.alert
* breakpoint on function "window.alert" added successfully.
>bl
* 1 breakpoints:
0 - window.alert
>bc 0
* breakpoint on function "window.alert" deleted successfully.
這里演示設置斷點,察看斷點和刪除斷點,完整代碼在本文附錄[1]給出。
2. 設置陷阱實時捕捉跨站測試者,搞跨站的人總習慣用alert來確認是否存在跨站,如果你要監控是否有人在測試你的網站xss的話,可以在你要監控的頁面里hook alert函數,記錄alert調用情況:
復制代碼 代碼如下:
<script type="text/Javascript">
<!--
function log(s) {
var img = new Image();
img.style.width = img.style.height = 0;
img.src = "http://yousite.com/log.php?caller=" + encodeURIComponent(s);
}
var _alert = alert;
window.alert = function(s) {
log(alert.caller);
_alert(s);
}
//-->
</script>

當然,你這個函數要加到頁面的最開始,而且還要比較隱蔽一些,赫赫,你甚至可以使alert不彈框或者彈個警告框,讓測試者抓狂一把。
3. 實現DOM XSS自動化掃描,目前一般的XSS自動化掃描的方法是從http返回結果中搜索特征來確定是否存在漏洞,但是這種方法不適用于掃描DOM XSS,因為DOM XSS是由客戶端腳本造成的,比如前段時間劍心發現的google的跨站(見附錄[2])原理如下:
document.write(document.location.hash);
這樣的跨站無法反映在http response里,所以傳統掃描方法沒法掃描出來。但是如果你從上個例子里受到啟發的話,一定會想到設置陷阱的辦法,DOM XSS最終導致alert被執行,所以我們hook alert函數設置陷阱,如果XSS成功則會去調用alert函數,觸發我們的陷阱記錄結果,這樣就可以實現DOM XSS的自動化掃描,陷阱代碼類似于上面。
4. 靈活的使用js劫持輔助你的頁面代碼分析工作,比如分析網頁木馬時,經常會有通過eval或者document.write來進行加密的情況,于是我們編寫段hook eval和document.write的小工具,輔助解密:
復制代碼 代碼如下:
<script type="text/Javascript">
<!--
var _eval = eval;
eval = window.execScript = window.document.write = window.document.writeln = function(s) {
document.getElementById("output").value = s;
}
//-->
</script>
<html>
<body>
input:
<textarea id="input" cols="80" rows="10"></textarea>
<input type="button" onclick="Javascript: _eval(document.getElementById('input').value);" value="decode" />
<br />
output:
<textarea id="output" cols="80" rows="10"></textarea>
</body>
</html>

在input框里輸入加密的代碼:
eval(unescape("%61%6C%65%72%74%28%31%29%3B"));
在output框里輸出解碼后的代碼:
alert(1);
當然你還能想到更多的靈活應用:)

JavaScript技術淺談javascript函數劫持[轉自xfocus]第1/3頁,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 播色屋97超碰在人人 | jizz老师| 1313久久国产午夜精品理论片 | 18亚洲男同gay1069 | 涩里番app黄版网站 色综合伊人色综合网站中国 | 胸大的姑娘中文字幕视频 | 亚洲精品天堂在线 | 97免费观看视频 | 护士12p | 在线色av | 国产精品视频免费视频 | 最近最新中文字幕MV高清在线 | 中文字幕免费在线视频 | 性色香蕉AV久久久天天网 | 老师湿乎乎两半嫩 | 无人区尖叫之夜美女姐姐视频 | 免费三级网址 | 手机在线国产视频 | 欧美大香线蕉线伊人久久 | 免费观看99热只有精品 | 九九久久国产精品免费热6 九九久久国产精品大片 | 天天色狠狠干 | 成年人视频免费在线观看 | 欧美精品一区二区三区视频 | 黑丝美女被人操 | 99视频免费在线观看 | 欧美亚洲国内日韩自拍视频 | 国产99九九久久无码熟妇 | 欧美激情视频在线观看一区二区三区 | 亚在线观看免费视频入口 | 乡土女性网动态图解 | 国产精品国产三级国产专区53 | 沦为公交两奶头春药高潮迭起 | 婷婷午夜影院 | 久久亚洲欧美国产综合 | 孕妇高潮抽搐喷水30分钟 | 国产偷抇久久精品A片蜜臀AV | 国产深夜福利视频在线 | 亚洲AV香蕉一区区二区三区蜜桃 | 亚洲 综合 欧美在线视频 | 久久合|