一个学校的网站安全性测试

本文作者通过分析学校网站的ASP程序,发现了SQL注入漏洞,详细介绍了如何利用这些漏洞修改用户资料和执行系统命令。作者指出,通过简单的字符检查和过滤,如使用replace()或mid()函数,可以防止此类攻击,并强调Web程序安全的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者:angel
文章性质:原创
发布日期:2004-04-02 
前言 

  我自从在学校维护学生会网站以后,就有了不小的权限,我只要上传一个“海阳顶端网ASP木马”就可以任意修改任何web页面了,因为学校里所有的站点都放在
http://www.nothing.com/ 里面,不过我可不敢这样做,也不会这样做。最近学习ASP挺上瘾,就看看学校自己写的ASP程序有什么隐患吧。 

问题一 

  除了前台只有少量的ASP文件,就是用户注册(是学校的人才能注册)、登陆、忘记密码、个人信息修改这几个ASP文件,先看看忘记密码,lostpass.asp是一个提交页面,没有任何ASP语句,看看<form>里目标文件是lostpass1.asp,再查看原代码,没有发现问题(是我的水平有限),再看下一个lostpass2.asp,呵呵,发现了一句有毛病的语句: 

sql="select pwd,answer from [member] where userID='"&userID&"' and answer='"&answer&"'" 


  这么低级的错误也会犯,此时,您只要根据sql构造一个特殊的用户名和密码,如:' or '1'='1 
这样,程序将会变成这样: 

程序代码: [ 复制代码到剪贴板 ]
sql="select pwd,answer from [member] where userID="&'or'1'=1&"and pass="&answer&" 



  or是一个逻辑运算符,判断两个条件的时候,只要其中一个条件成立,那么等式将会成立,而在语言中,是以1来代表真的(成立),那么在这行语句中,原语句的"and"验证将不再继续,而因为"1=1"和"or"令语句返回为真值。这样的话我们从一开始就可以提交' or '1'='1这个来饶过验证了,不管我们在什么文本框我们都提交' or '1'='1这个都能顺利到达下一个页面,既然这样,我们用' or '1'='1来作为用户名和密码登陆,会怎么样呢?实验证明登陆成功,因为显示个人资料修改的链接了,果然正常显示了个人资料,我发现真实姓名不可改,说明一定有什么ID之类的来识别用户,于是直接查看网页源代码发现这么一行重要的东西: 
<input type="hidden" name="hiddenField" value="2001010001">原来是靠这个hiddenField来辨别用户,那么如果我修改了value的值,那不是可以修改其他用户了吗?马上拿我以前注册的来试,把我的号码2001010XXX替换上去,然后修改<form>里的相对连接,另存为htm文件,然后提交我需要修改的资料。再看看我的资料,果然被修改了,这么说如果我我知道任何一个用户的hiddenField的值,就可以修改其资料,还不乱套?这个就搁在一边……这个问题可以写个函数禁止从外部提交数据得以解决。 

  不过这个漏洞有点局限性,如果想改某个用户的资料一定要知道hiddenField的值,否则只能乱改。不过既然这个文件这样了,我想后台入口验证程序应该也是这样,我试着登陆,成功了,所有会员的资料尽收眼底,而且任意添加和修改管理员,做什么都可以啊。 

  这个问题的防范方法其实很简单,处理输入字符就可以了,原来我还以为用replace()函数呢,请教了一下劲风,得知用mid()函数可以很好的解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值