- 浏览: 1453729 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (564)
- 算法 (7)
- 流金岁月 (1)
- Javascript (30)
- actionscript (108)
- as3.0 game (14)
- flex (84)
- fms2 (27)
- 正则表达式 (7)
- 开源组件代码(as3.0) (1)
- Pv3d (13)
- Cairngorm (4)
- vbs (54)
- VB程序设计 (26)
- 计算机应用与维护 (4)
- 职场实用穿衣技巧 (3)
- 历史风云 (15)
- 淡泊明志,宁静致远 (12)
- 情感 (26)
- 杂谈 (41)
- 越南风 (14)
- DirectX (9)
- Dev-cpp (11)
- 回望百年 (2)
- 建站经验 (2)
- Python (24)
- 网络赚钱 (4)
- php (2)
- html (1)
- ob0短址网 (1)
- ob0.cn (1)
- wordpress (1)
- pandas logistic (1)
- haxe (1)
- opencv (1)
- 微信小程序 (3)
- vue (3)
- Flutter (1)
最新评论
-
GGGGeek:
第一个函数滚动监听不起作用,onPageScroll可以
微信小程序--搜索框滚动到顶部时悬浮 -
naomibyron:
解决办法:工具 -> 编译选项 -> 编译器 ...
dev-c++中编译含WINSOCK的代码出现错误的解决方法 -
haichuan11:
这个…… 代码不全真的是让人很憋屈的感觉啊
actionScript 3.0 图片裁剪及旋转 -
chenyw101:
老兄能留个QQ号吗?具体的我有些东西想请教下你
用VB制作网站登陆器 -
yantao1943:
貌似有点问题,只派发一次事件啊
使用ActionScript 2.0或ActionScript 3.0处理音频文件的提示点(cue
本文作者: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
这样,程序将会变成这样:
程序代码: | [ 复制代码到剪贴板 ] |
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()函数可以很好的解决,加一个判断就可以了:
程序代码: | [ 复制代码到剪贴板 ] |
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代码):
程序代码: | [ 复制代码到剪贴板 ] |
<!--#include file="conn.asp"-->
<%
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
%>
<html>
<head>
<LINK href="function/css.css" rel=stylesheet type=text/css>
<title><%=rs("topic")%></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000" topmargin=0 leftmargin=0 rightmargin=0>
<table width="92%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td height="36" valign="middle">
<div align="center"><br><font size=3><b><%=rs("topic")%></b></font><hr size=0 width=100%></div>
</td>
</tr>
<tr>
<td>
<div align="center"><%=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")%><hr size=0 width=100%></div>
</td>
</tr>
<tr>
<td valign="top">
<% dim content
content=rs("content")
content=replace(content,"../../../","../news/")
response.write content %>
</td>
</tr>
<tr>
<td valign="top"><br><br><br><b>---------- 相 关 新 闻 ----------</b><br>
<% 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 "<ul type=circle>"
do while not rsc.eof
response.write "<li>"
thedate="(" & cstr(year(rsc("ntime"))) & "-" & cstr(month(rsc("ntime"))) & "-" & cstr(day(rsc("ntime"))) & ")"
response.write "<a href='shownews.asp?newsid=" & cstr(rsc("newsid")) & "' target=_blank>" & trim(rsc("topic")) & "</a><font color='#6365CE' size='1'>" & thedate & "</font>"
if month(cdate(trim(rs("ntime"))))=month(now()) and clng(day(cdate(trim(rs("ntime"))))+1)>=clng(day(now())) then
response.write "<img src=image/news.gif><br>"
end if
rsc.movenext
loop
end if
rsc.close
set rsc=nothing %>
</ul></td>
</tr>
</table>
<!--#include file="function/copyright.inc"-->
</body>
</html>
<% end if
end if%>
<!--#include file="function/DBclose.asp"-->
大家看到了吗?文件根本没有对任何变量做任何检查,所以这个文件怎么利用都不过份,呵呵,看到这一句,
程序代码: | [ 复制代码到剪贴板 ] |
由于程序根本没有对任何变量做任何检查。我们就可以可以直接构造 newsid 发动sql injection攻击,我们提交这样的代码就可以以连接这个SQL数据库的用户所拥有的权限执行系统命令。
针对这个文件的解决办法就是用replace函数过滤,看看下面的代码:
程序代码: | [ 复制代码到剪贴板 ] |
function checkStr(str)
if isnull(str) then
checkStr = ""
exit function
end if
checkStr=replace(str,"'","")
checkStr=replace(str,";","")
checkStr=replace(str,"--","")
end function
%>
这个函数的意思就是把单引号、分号,两个横线替换为空。
我们学校服务器的系统漏洞已经找不出什么东西了,但是由于Web程序的问题,导致服务器被控制,学校的技术人员怎么想呢?文章虽短,但问题已经说明很清楚了。
看来Web程序的问题实在不可忽视。Web程序安全的重点就是对字符检查——检查——再检查。
本人水平实在有限,写不出什么高深技术的文章,在这里献丑了。
发表评论
-
使用bat 处理文件 批量下载图片,下载文件
2018-11-17 10:42 3932Download Wscript.Arguments(0) ... -
VB6逆向工程浅析
2011-12-29 07:36 1734前言 VB的编译有两种方式,一种是P-Code ... -
VB函数——逆向分析备查
2011-12-28 21:39 1488Variant 变量的内部表示:_____________ ... -
VB程序逆向常用的函数
2011-12-28 21:38 14851) 数据类型转换: ... -
用XML创建可排序、分页的数据显示页面
2008-08-30 08:10 1395在Web开发中,我们经常 ... -
SQL注入天书 - ASP注入漏洞全接触
2008-08-28 17:39 1082随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员 ... -
改mdb为asp所带来的灾难
2008-08-28 17:36 999本文作者:SuperHei·Lilo文章性质:原创发布日期: ... -
XML实例解析
2008-08-28 17:35 1102提纲: 一:实例效果 ... -
选单连动
2008-08-28 17:34 1065动机: 现在我们做个在IE里应用XML的一个小例子:解决双下 ... -
ASP常用的代码(不断更新)
2008-08-28 17:34 12421.获得系统时间:<%=now()%>2.取得来访 ... -
动态排序
2008-08-28 17:31 1134动机: 排序功能让我们页面上的数据显的更人性化,是我们在网站 ... -
动态查询
2008-08-28 17:31 876动机: 查询功能是我们 ... -
XML卷之动态分页
2008-08-28 17:30 1200动机: 为了方便用户查看大批量数据,我们会用到动态分页,因此 ... -
对xml+xsl实现分页排序的改进,使支持对所有数据进行排序
2008-08-28 17:29 2097以往见过的利用xml+xsl来实现分页排序的基本都只能本页内排 ... -
使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页
2008-08-28 17:27 1329在Web开发中,我们经常 ... -
用ASP+XML编写留言本
2008-08-28 17:16 2867一、读者指引 读者 ... -
asp查询xml的代码,实现了无刷新、模糊查询功能
2008-08-28 17:13 1161<html> <head> ... -
用Asp+XmlHttp实现RssReader功能
2008-08-28 17:12 873<style>body {margin:10px; ... -
vb+Webbrowser控件详解
2008-08-25 20:48 6824vb+Webbrowser控件详解 1、获得浏览器信息: P ... -
BBS注册机(vb script, telnet, sterm)
2008-08-16 11:34 1528#include "lib.vbs" Co ...
相关推荐
本测试计划旨在为校园招聘系统提供全面的测试指导,确保系统在上线前能够满足预期的功能性、性能性、安全性和兼容性要求。测试活动将按照CMMI 3级过程的要求进行,旨在提高软件质量,减少潜在缺陷,确保系统的稳定和...
本报告针对的是一个名为“校园在线音乐网站”的项目,旨在探讨该在线音乐平台在校园环境中的实施可能性。报告详细分析了多个关键方面,包括技术、经济、运行和社会因素的可行性,以及系统的设计、健壮性、可靠性、可...
在开发一个校园在线音乐网站的过程中,系统测试是一个至关重要的环节,它确保了系统的稳定性和用户友好性。系统测试主要是对整个软件系统进行全面的验证,包括功能、性能、兼容性、安全性等多个方面,以找出并修复...
4. 校园网站的设计:校园网站的设计是指根据学校的需求和特点,设计一个可以满足学校教育教学和管理的网站。包括对网站的总体设计、界面设计、功能设计等。 5. 网站的实现:网站的实现是指使用 ASP 等开发工具,...
新城淮中校园广播系统旨在构建一个高效、智能且易于管理的平台,提升校园内的信息传播效率。 测试概要 2.1 系统简介 新城淮中校园广播系统是一款集实时播放、定时播放、多区域分控等功能于一体的智能化广播解决...
【校园安全管理常识测试题(A卷)汇编】主要涵盖了学校安全管理的基本知识,旨在提升学生、教职工及管理人员的安全意识和应对能力。以下是详细的知识点解析: 1. 安全教育的时间节点:学校应在开学初和放假前对学生...
【校园安全测试题A题及答案分享.pdf】是一份关于校园安全生产知识的考试资料,主要涉及...总体来说,这份测试题涵盖了安全生产法律法规、学校安全管理制度、事故处理流程等多个方面,旨在提升校园安全意识和管理水平。
【校园安全管理常识测试题(A卷)】主要涵盖了校园安全的多个方面,旨在增强学生的安全意识,提高自我保护能力。以下是该测试题涉及的关键知识点: 1. **安全教育时间**:学校应在开学初和放假前对学生进行有针对性的...
通常,一个网站源码会包含HTML、CSS、JavaScript文件,以及数据库配置、图片、图标等资源文件。服务器端脚本(如PHP、ASP.NET、Node.js等)可能用于处理动态内容和数据交互。如果源码是基于特定框架(如WordPress、...
校园网站设计是一个综合性的项目,涉及到前端设计、后端开发、数据库管理等多个方面。合理选择技术栈,精心规划系统架构,注重用户体验,才能构建出既美观又实用的校园网站。ASP作为一项成熟的技术,为校园网站的...
此外,开发者还需要进行安全性测试,包括单元测试、集成测试和渗透测试,以发现并修复潜在的安全漏洞。 2. 运行阶段的安全: 在APP运行时,应实时监测和保护用户数据。使用安全的网络通信协议,如HTTPS,确保数据...
学校网站源码是一个重要的概念,尤其对于教育机构的数字化建设和管理而言。源码是指编程时编写的原始指令,是程序的基础组成部分,包含了控制网站运行的所有逻辑和规则。在这个上下文中,"学校网站源码"指的是专为...
根据行业标准和项目需求,产品发布前必须通过功能测试、性能测试、兼容性测试、安全性测试等,以确保软件的稳定性和可靠性。 6. **参考资料** 报告中引用的相关文档、测试框架和规范,为测试工作提供了依据和参考...
此外,为了确保网站的安全性和性能,开发者可能还考虑了身份验证和授权机制、SQL注入防护、跨站脚本攻击预防以及数据库优化等方面。使用ASP.NET的身份验证服务,可以限制只有授权用户才能访问特定的网站区域。同时,...
毕业设计题目:基于PHP的校园网站设计与实现一、研究背景随着互联网技术的快速发展,校园网站已经成为学校展示形象、发布信息、提供服务...5. 网站测试:对网站的功能、性能、安全性进行全面测试,确保网站的可靠性和稳
本次测试采用了黑盒和白盒测试方法,包括功能测试、性能测试、易用性测试、安全性测试和可靠性测试,以全面验证系统的功能和性能。 2.3 测试环境 测试环境模拟了学校的实际网络条件和硬件设施,确保测试结果的代表...
在实施校园网站建设方案时,还需要特别注意网站的安全性问题,这是学校信息化建设中不可忽视的重要一环。此外,随着移动互联网的普及,校园网站还应考虑适配移动设备,以满足用户在不同场景下的访问需求。 最终,...
2. 安全性:学校网站涉及学生个人信息,因此源码应具备一定的安全防护措施,防止数据泄露或被恶意攻击。 3. 可扩展性:优秀的学校源码应具有良好的可扩展性,方便添加新的功能模块或进行定制化开发,以适应学校的...
- 官方网站的设计风格和内容质量直接影响公众对学校的印象,因此,建立一个既美观又实用的学校网站至关重要。 2. **促进教育资源均衡分配** - 互联网技术为教育资源的分享提供了无限可能。通过建设学校网站,可以...