arow 您现在的位置: Yes!黑客联盟 >> 技术 >> 黑客技术 >> 漏洞利用 >> 正文
专题栏目
解析新云2.1&3.0的两个跨站           ★★★
解析新云2.1&3.0的两个跨站
作者:佚名 文章来源:本站原创 更新时间:2007-5-22 14:33:23 【字体:

文章作者:神無月
信息来源:www.wolfexp.net
还是老规矩 直接来吧  因为早上去下3.0下不了 所以图是2.1时候截的 不过后来下了3.0  还是有洞
漏洞文件1:user/changeinfo.asp

<!--#include file="config.asp"-->
<!--#include file="check.asp"-->
<!--#include file="../inc/md5.asp"-->
<!--#include file="../inc/chkinput.asp"-->
<!--#include file="../api/cls_api.asp"-->
<!--#include file="head.inc"-->
================省略部分代码==============================================
<%
        End If
        Rs.Close:Set Rs = Nothing
End If
If Founderr = True Then
        Call Returnerr(ErrMsg)
End If
Sub ChangeUserInfo()
        On Error Resume Next
        Dim username, password,userid
        Dim usersex,sex
        username = Newasp.CheckBadstr(Newasp.membername)
        userid = Newasp.ChkNumeric(memberid)
        If Newasp.CheckPost=False Then
                ErrMsg = ErrMsg + Postmsg
                FoundErr = True
                Exit Sub
        End If
        If Newasp.IsValidPassword(Request.Form("answer")) = False And Trim(Request.Form("answer")) <> "" Then
                ErrMsg = ErrMsg + "<li>密码问题答案中含有非法字符!</li>"
                Founderr = True
        End If
        If Trim(Request.Form("username")) <> username Then
                ErrMsg = ErrMsg + "<li>非法操作!</li>"
                Founderr = True
        End If
        If Trim(Request.Form("password")) = "" Then
                ErrMsg = ErrMsg + "<li>请输入用户密码!</li>"
                Founderr = True
        Else
                password = md5(Request.Form("password"))
        End If
        If userid = 0 Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>Sorry!您选择了错误的系统参数。</li>"
                Exit Sub
        End If
       
        If Trim(Request.Form("nickname")) = "" Then
                ErrMsg = ErrMsg + "<li>用户昵称不能为空!</li>"
                Founderr = True
        End If
        If Newasp.IsValidStr(Request.Form("nickname")) = False Then
                ErrMsg = ErrMsg + "<li>用户昵称中含有非法字符!</li>"
                Founderr = True
        End If
        If Trim(Request.Form("TrueName")) = "" Then
                ErrMsg = ErrMsg + "<li>真实姓名不能为空!</li>"
                Founderr = True
        End If
        If Newasp.IsValidStr(Request.Form("TrueName")) = False Then
                ErrMsg = ErrMsg + "<li>真实姓名中含有非法字符!</li>"
                Founderr = True
        End If
        If Trim(Request.Form("usermail")) = "" Then
                ErrMsg = ErrMsg + "<li>您的Email不能为空!</li>"
                Founderr = True
        End If
        If IsValidEmail(Request.Form("usermail")) = False Then
                ErrMsg = ErrMsg + "<li>您的Email有错误!</li>"
                Founderr = True
        End If
        If Not IsNumeric(Request.Form("oicq")) And Trim(Request.Form("oicq")) <> "" Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>QQ号码请用数字填写。</li>"
        End If
        If Trim(Request.Form("HomePage")) <> "" And Left(Request.Form("HomePage"),7) <> "http://" Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>个人主页地址输入有误,请以“http://”开头。</li>"
        End If
        If Not Newasp.CodeIsTrue() Then
                ErrMsg = ErrMsg + "<meta http-equiv=""refresh"" content=""2;URL=changeinfo.asp""><li>验证码校验失败,请返回刷新页面再试。两秒后自动返回</li>"
                Session("GetCode") = ""
                Founderr = True
                Exit Sub
        End If
        Session("GetCode") = ""
        If Trim(Request.Form("usersex")) = "" Then
                ErrMsg = ErrMsg + "<li>您的姓别不能为空!</li>"
                Founderr = True
        Else
                usersex = Newasp.CheckBadstr(Request.Form("usersex"))
        End If
        If usersex = "女" Then
                sex = 0
        Else
                sex = 1
        End If
       
        If Founderr = True Then Exit Sub
        Set Rs = Server.CreateObject("ADODB.RecordSet")
        SQL = "SELECT * FROM [NC_user] WHERE username='" & username & "' And userid=" & CLng(userid)
        Rs.Open SQL, Conn, 1, 3
        If Rs.bof And Rs.EOF Then
                ErrMsg = ErrMsg + "<li>Sorry!没有找到此用户信息信息!</li>"
                Founderr = True
                Exit Sub
        Else
                If password <> Rs("password") Then
                        ErrMsg = ErrMsg + "<li>您输入的密码错误!</li>"
                        Founderr = True
                        Exit Sub
                End If
                If Founderr = False Then
                        '-----------------------------------------------------------------
                        '系统整合
                        '-----------------------------------------------------------------
                        Dim API_Newasp,API_SaveCookie,SysKey
                        If API_Enable Then
                                Set API_Newasp = New API_Conformity
                                API_Newasp.NodeValue "action","update",0,False
                                API_Newasp.NodeValue "username",UserName,1,False
                                Md5OLD = 1
                                SysKey = Md5(API_Newasp.XmlNode("username") & API_ConformKey)
                                Md5OLD = 0
                                API_Newasp.NodeValue "syskey",SysKey,0,False
                                API_Newasp.NodeValue "password","",1,False
                                API_Newasp.NodeValue "answer",Request.Form("answer"),1,False
                                API_Newasp.NodeValue "question",Request.Form("question"),1,False
                                API_Newasp.NodeValue "email",Request.Form("usermail"),1,False
                                API_Newasp.NodeValue "gender",sex,0,False
                                API_Newasp.SendHttpData
                                If API_Newasp.Status = "1" Then
                                        Founderr = True
                                        ErrMsg = API_Newasp.Message
                                        Exit Sub
                                End If
                                Set API_Newasp = Nothing
                        End If
                        '-----------------------------------------------------------------
                End If
                Rs("nickname") = Newasp.CheckBadstr(Request.Form("nickname"))
                Rs("TrueName") = Newasp.CheckBadstr(Request.Form("TrueName"))
                Rs("usermail") = Trim(Request.Form("usermail"))
                If Trim(Request.Form("HomePage")) <> "" Then Rs("HomePage") = Trim(Request.Form("HomePage"))
                If Trim(Request.Form("usersex")) <> "" Then Rs("usersex") = usersex
                If Trim(Request.Form("question")) <> "" Then Rs("question") = Trim(Request.Form("question"))
                If Trim(Request.Form("answer")) <> "" Then Rs("answer") = md5(Trim(Request.Form("answer")))
                If Trim(Request.Form("phone")) <> "" Then Rs("phone") = Trim(Request.Form("phone"))
                If Trim(Request.Form("oicq")) <> "" Then Rs("oicq") = Trim(Request.Form("oicq"))
                If Trim(Request.Form("postcode")) <> "" Then Rs("postcode") = Trim(Request.Form("postcode"))
                If Trim(Request.Form("UserIDCard")) <> "" Then Rs("UserIDCard") = Trim(Request.Form("UserIDCard"))
                If Trim(Request.Form("address")) <> "" Then Rs("address") = Trim(Request.Form("address"))
                If Trim(Request.Form("BuyCode")) <> "" Then Rs("BuyCode") = md5(Trim(Request.Form("BuyCode")))
                Rs.Update
        End If
        Rs.Close
        Set Rs = Nothing
        Call Returnsuc("<li>恭喜您!用户资料修改成功。</li>")
End Sub
%>
<!--#include file="foot.inc"-->

nickname跟Truename被checkbadstr函数过滤了

函数代码 inc/cls_main.asp

        Public Function CheckBadstr(str)
                If IsNull(str) Then
                        CheckBadstr = vbNullString
                        Exit Function
                End If
                str = Replace(str, Chr(0), vbNullString)
                str = Replace(str, Chr(34), vbNullString)
                str = Replace(str, "%", vbNullString)
                str = Replace(str, "@", vbNullString)
                str = Replace(str, "!", vbNullString)
                str = Replace(str, "^", vbNullString)
                str = Replace(str, "=", vbNullString)
                str = Replace(str, "--", vbNullString)
                str = Replace(str, "$", vbNullString)
                str = Replace(str, "'", vbNullString)
                str = Replace(str, ";", vbNullString)
                CheckBadstr = Trim(str)
        End Function

过滤了单引双引 没过滤<> 开始本来以为可以跨 可是后来进后台才发现需要用'>闭合前面的代码 所以

就放弃了 有人能过告诉我

usermail就被IsValidEmail函数过滤了 还蛮严格的 只能输入英文+数字还有_-.几个字符

函数代码 inc/chkinput.asp

Function IsValidEmail(email)
        Dim names, Name, i, c
        IsValidEmail = true
        names = Split(email, "@")
        If UBound(names) <> 1 Then
                IsValidEmail = false
                Exit Function
        End If
        For Each Name in names
                If Len(Name) <= 0 Then
                        IsValidEmail = false
                        Exit Function
                End If
                For i = 1 To Len(Name)
                        c = LCase(Mid(Name, i, 1))
                        If InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 And Not IsNumeric(c) Then
                                IsValidEmail = false
                                Exit Function
                        End If
                Next
                If Left(Name, 1) = "." Or Right(Name, 1) = "." Then
                        IsValidEmail = false
                        Exit Function
                End If
        Next
        If InStr(names(1), ".") <= 0 Then
                IsValidEmail = false
                Exit Function
        End If
        i = Len(names(1)) - InStrRev(names(1), ".")
        If i <> 2 And i <> 3 Then
                IsValidEmail = false
                Exit Function
        End If
        If InStr(email, "..") > 0 Then
                IsValidEmail = false
        End If

End Function

usersex跟name那情况差不多 也放弃

question的没有过滤就进库了  直接'><script>alert('test')</script><  就可以跨了

answer经过MD5加密 放弃咯

phone跟question 也是一样

下面的postcode,UserIDCard,address也是没过滤 BuyCode就被MD5了

还是很好跨的. 我就直接用address直接跨测试下咯 看图

漏洞文件2:user/confirm.asp

====================省略部分代码================================

<table cellspacing=1 align=center cellpadding=3 border=0 class=Usertableborder>
        <tr height=20>
                <th colspan=2>交费确认</th>
        </tr>
        <tr height=20 align=center>
                <td class=Usertablerow2 colspan=2><font color=red>注意:</font><font color=blue>请一定要正确填写以下含*的选项,以方便我们核对!</font></td>
        </tr>
        <form name=form2 method=post action=?action=save>
        <tr height=20>
                <td class=Usertablerow1 width="20%" align=right>汇款日期:</td>
                <td class=Usertablerow1 width="80%"><input type="text" name="PayDate" size=15 value="<%=date()%>"> <font color=red>*</font></td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>汇款金额:</td>
                <td class=Usertablerow1><input type="text" name="PayMoney" size=15 onkeyup=if(isNaN(this.value))this.value=''> 元 <font color=red>*</font></td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>定 单 号:</td>
                <td class=Usertablerow1><input type="text" name="indent" size=30> <font color=red>*</font></td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>汇款方式:</td>
                <td class=Usertablerow1>
                <input type=radio name=paymode value="银行汇款" checked> 电汇 
                <input type=radio name=paymode value="邮局汇款"> 邮汇 
                <input type=radio name=paymode value="网上支付"> 网上支付
                </td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>用户名:</td>
                <td class=Usertablerow1><input type="text" name="username" size=15 value="<%=Newasp.MemberName%>"> <font color=red>*</font></td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>汇款人名称:</td>
                <td class=Usertablerow1><input type="text" name="customer" size=30> <font color=red>*</font></td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>汇款人邮箱:</td>
                <td class=Usertablerow1><input type="text" name="Email" size=30> <font color=red>*</font></td>
        </tr>
        <tr height=20>
                <td class=Usertablerow1 align=right>其它说明:</td>
                <td class=Usertablerow1><textarea name=readme rows=5 cols=50></textarea> <font color=red>*</font></td>
        </tr>
        <tr height=20 align=center>
                <td class=Usertablerow2 colspan=2><input type=submit value=" 确认提交 "  class=Button></td>
        </tr>
        </form>
<%
        Response.Write "</table>"
End Sub
Sub SaveConfirm()
        If Newasp.CheckPost=False Then
                ErrMsg = ErrMsg + Postmsg
                FoundErr = True
                Exit Sub
        End If
        If Not IsDate(Request.Form("PayDate")) Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>日期输入错误。</li>"
        End If
        If Not IsNumeric(Request.Form("PayMoney")) Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>汇款金额输入错误。</li>"
        End If
        If Trim(Request.Form("indent")) = "" Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>你的定单号没有填咧?</li>"
        End If
        If IsValidEmail(Request.Form("Email")) = False Then
                ErrMsg = ErrMsg + "<li>您的Email有错误!</li>"
                Founderr = True
        End If
        If Trim(Request.Form("customer")) = "" Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>汇款人名称不能为空。</li>"
        End If
        If Trim(Request.Form("username")) = "" Then
                FoundErr = True
                ErrMsg = ErrMsg + "<li>用户名不能为空?</li>"
        End If
        If Founderr = True Then Exit Sub
        Set Rs = Server.CreateObject("ADODB.Recordset")
        SQL = "select * from NC_Confirm where (id is null)"
        Rs.Open SQL,Conn,1,3
        Rs.Addnew
                Rs("paymode").Value = Trim(Request.Form("paymode"))
                Rs("PayDate").Value = Trim(Request.Form("PayDate"))
                Rs("PayMoney").Value = Trim(Request.Form("PayMoney"))
                Rs("indent").Value = Left(Newasp.ChkFormStr(Request.Form("indent")),35)
                Rs("Email").Value = Trim(Request.Form("Email"))
                Rs("customer").Value = Left(Newasp.ChkFormStr(Request.Form("customer")),30)
                Rs("username").Value = Left(Newasp.ChkFormStr(Request.Form("username")),30)
                Rs("readme").Value = Left(Newasp.ChkFormStr(Request.Form("readme")),200)
                Rs("isPass").Value = 0
        Rs.Update
        Rs.close:set Rs = Nothing
        Call Returnsuc("<li>恭喜您!确认信息提交成功,我们会在一个工作日内处理你的定单。")
End Sub

%>
<!--#include file="foot.inc"-->

还是以前的过滤函数  不过就paymode没有过滤  因为它类型是radio 单选项 本来以为把它保存到本地修改一下类型就可以了

但是新云有防止本地提交 所以就只能抓包了 过程也不说怎么说 2.1没有验证码直接就抓包跨了可是3.0我加了验证码还是显示我错误

刷新N次也不行 不知道什么原因 官方倒是不会显示我验证码错误 也成功弹出(我去问官方官方告诉我的^_^)本机就出错了

所以这个跨站我只能在2.0测试这个比个人资料的好 因为个人资料 人家管理员不一定会点你的资料 可是订单的只要点交费确认就直接弹的,需

要点你的那个订单


方便多了 不过这个paymode貌似只限制提交70个字符 不过也够我们调用JS之类的,貌似盗了COOKIE可以直接欺骗后台吧? 呵呵 官方的后台

原来是newasp_admin 后来喊他改了 HOHO 漏洞也补了

没什么技术含量 纯属娱乐别见笑哈.  


友情提示:如果您对本文章的内容存在疑问请到点此进入论坛进行讨论

文章录入:coldness    责任编辑:coldness 
  • 上一篇文章:

  • 下一篇文章:
  •