门户网站漏洞处理v110补充.docx
《门户网站漏洞处理v110补充.docx》由会员分享,可在线阅读,更多相关《门户网站漏洞处理v110补充.docx(22页珍藏版)》请在冰豆网上搜索。
![门户网站漏洞处理v110补充.docx](https://file1.bdocx.com/fileroot1/2023-1/23/4304d675-1604-4335-b155-3eed8efc51a7/4304d675-1604-4335-b155-3eed8efc51a71.gif)
门户网站漏洞处理v110补充
网站安全漏洞处理办法总结
网站安全漏洞处理办法总结1
常见的网站安全漏洞问题2
客户端2
服务器端2
案例分享(Q&A)4
网站出现漏洞,怎么办?
4
网站参数已经是POST,但为什么还会报有漏洞呢?
4
对数据进行了多重检验、限制,还是报错有漏洞?
4
客户端处理5
代码过滤5
PHP的htmlspecialchars()将特殊字符转成HTML的字符串格式5
ASP的Server.HtmlEncode()方法对指定的字符串应用HTML编码5
JSP可用如下函数5
漏洞描述与解决方法6
发现数据库错误模式6
会话标识未更新6
跨站点请求伪造6
不充分帐户封锁9
跨站点脚本编制9
SQL盲注9
已解密的登录请求9
链接注入10
通过框架钓鱼10
启用了不安全的http方法11
危险代码过滤器11
常见的网站安全漏洞问题
客户端
参数没有进行过滤
一般网站涉及到有接收参数和数据交互的地方,都需要在客户端对数据进行过滤,例如:
用JS检验参数的类型是否正确、检查参数是否包含特殊字符、参数的长度最大限制等
网站页面动态化
一般网站页面都有静态(没有数据交互)和动态(有数据交互)两类,对于不需要交互的页面,尽量不要在页面上隐藏表单信息和文本框,因为很多时候扫描工具都会随机性的伪造这些隐藏表单或文本框字段数据进行请求。
验证码识别
在注册或者提交参数的表单加上图形验证码。
对于简单的破解,图形验证码识别比较有效。
服务器端
参数没有进行过滤
在有需要接收数据的地方,尽量对接收的参数进行验证,例如:
用正则表达式对参数进行长度还有类型的检查;对参数或内容进行特殊字段的过滤,也可以写过滤器对网站所有的接收的数据进行过滤。
提交方法过滤
判断提交参数的表单或者页面采取的提交方式是POST还是GET,一般情况下都要在有数据交互的方法体或者类中都要对提交方法进行过滤,尽量阻止GET方式的提交。
代码里用js方式提示错误并进行跳转
如果在代码里面是通过弹出一个js警告窗口来提示出错,并跳转到错误页面时,尽量将js警告窗口给去掉,因为在一般情况下,用js警告窗口提示错误会被扫描软件误认是有数据返回,会引起不必要的误报漏洞问题。
POST提交返回的页面跟GET返回的页面是相同
在对提交方法过滤的情况下,如果只允许POST方式提交,当GET提交时会跳到ERROR页面时,在POST方法里对数据验证不对时,应该跳到ERROR2页面,而不是跳到ERROR页面,因为如果跳到ERROR页面时,会给扫描软件误认是POST跟GET方法提交时返回内容相同而导致误报漏洞问题。
地址没有验证
对提交参数的地址进行验证,例如:
提交地址是不是包含?
或者&这些GET提交方式的特殊字符。
对提交参数的地址进行REFERER验证,验证提交地址来源地址是不是空还是否非本网域名。
没有防止SQL注入
对参数的内容进入SQL关键字进行过滤。
cookies过期时间未设置(会话标识未更新)
cookies过期时间未设置,可能会引发一些cookies欺骗攻击。
代码:
Cookiecookie=request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
案例分享(Q&A)
网站出现漏洞,怎么办?
首先检查出现漏洞的请求是否有参数交互;
参数提交是以POST方式还是GET方式(如果是GET,就改成POST);
网站参数已经是POST,但为什么还会报有漏洞呢?
来源地址是否为空还是非本域名下的地址;
请求URL是否包含?
或&这些特殊字符;(http:
//xxx.do?
xx&dd)
内容特殊字符过滤、转义;(过滤&、<、>、”、’)
请求页面是否在客户端做数据检验;(例如JS检验等)
服务端是否在数据长度方面做了检验(对数据的类型、长度进行较严格检验、限制)
对数据进行了多重检验、限制,还是报错有漏洞?
服务器端是否做了错误提示窗口,删除提示窗口;(删除js提示窗口,直接跳转)
过滤GET方式提交时跳转是否跟数据检验错误跳转的页面一致;(过滤GET方式提交时跳转的错误页面是error,数据检验错误跳转的页面应该是error2,而不要error)
客户端处理
基于大部分过滤扫描工具原理都是如果GET或POST返回的页面都是同一个页面就当存在漏洞的原因,可以在客户端做相对应处理以应对。
例如:
可以为每个页面修改不同的标题;
可以用一个javascript来生成一个随机数,当每次进入这个页面的时候就生成一个随机数来。
代码过滤
PHP的htmlspecialchars()将特殊字符转成HTML的字符串格式
echohtmlspecialchars($_GET[“name”])//过滤get方式传过来的name值
>
ASP的Server.HtmlEncode()方法对指定的字符串应用HTML编码
Var=Server.HtmlEncode(Trim(Request(“id”)))
JSP可用如下函数
PublicstaticStringtransform(StringContentnew)
{
Contentnew=rs.replaceAll(“&”,”&”);
Contentnew=rs.replaceAll(“<”,”<”);
Contentnew=rs.replaceAll(“>”,”>”);
Contentnew=rs.replaceAll(“’”,”'”);
Contentnew=rs.replaceAll(“\””,”"”);
returnContentnew;
}
漏洞描述与解决方法
发现数据库错误模式
描述:
主要是一些数据连接错误信息,通过提交特殊构造的字符,程序会暴露一些数据库信息,也容易引起SQL注入攻击。
解决:
过滤SQL的关键字,如:
select,count,update
会话标识未更新
描述:
是cookies过期时间未设置,可能会引发一些cookies欺骗攻击。
解决:
Cookiecookie=request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
另外,去掉页面中自动为用户保存历史信息的做法,比如:
>
这类自动填充input域的做法可能会被判断为会话标识未更新。
跨站点请求伪造
描述:
这个是高级攻击技术,是黑客作为中间人攻击,这个漏洞是程序造成的,在不同的会话中两次发送同一请求并且收到相同的响应,也就是说客户端与服务端建立连接后,客户端向服务端提交数据,服务端只认客户端需要什么而返回什么内容给客户端,并没有对客户端的身份进行认证。
解决:
可以在修改每个页面的标题,让每个页面都不是一样的;
POST与GET方式跳到不同的错误的页面。
易宝爱普讯公司解决方案
1.1环境
支持J2EE标准的WEB容器(例如:
Tomcat、Weblogic)。
1.2依赖
--dom4j.jar
--log4j.jar
--servlet-api.jar
2配置
2.1web.xml配置
loopholeInterceptor
com.eprosun.loophole.InterceptorFilter
filterConfigLocation
/WEB-INF/filter.cfg.xml
tokenName
hash
loopholeInterceptor
/*
说明:
1、filterConfigLocation配置过滤页面的配置文件相对路径。
2、tokenName配置为随机数值的关键名称。
3、filter应该配置在最前端。
2.2tld配置
将token.tld文件复制到WEB-INF/tlds目录。
2.3过滤配置
xmlversion="1.0"encoding="UTF-8"?
>
/index.jsp
GET
POST
/result.jsp
GET
POST
/slct_upload.jsp
POST
/iframe.jsp
GET
POST
说明:
1、filters可以包含多个interceptor。
2、interceptor配置一个请求地址拦截的方式(GET/POST)。
3、method可以配置多个。
4、uri配置需要过滤的地址
3应用
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<%@tagliburi="/eprosun/token"prefix="token"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
simple
hiddenuri="/index.jsp"/>
stringuri="/iframe.jsp"/>">
说明:
1、添加<%@tagliburi="/eprosun/token"prefix="token"%>到页面
2、隐藏输出hiddenuri="/Debug/index.jsp"/>
3、键值对输出stringuri="/Debug/iframe.jsp"/>
4、stringuri=””/>中uri设置为请求的URI地址
不充分帐户封锁
描述:
程序没有使用锁定功能,可以穷举密码。
解决:
加上验证码;
或者对连续输入错误的IP进行阻止(加入黑名单)。
跨站点脚本编制
描述:
实际翻译应该是跨加站脚本攻击。
也就是XSS,是服务端没有对客户端提交的参数进行过滤,例如:
2009>%22%27>![]()
alert(473443)%22>,这个就会弹出一个窗口,还可以弹出其他页面,或者做页面跳转等攻击,通常攻击者用来挂马。
解决:
限制参数的长度;
SQL盲注
描述:
盲注也是要对参数进行过滤,包括危险字符,‘,;@,==,而且通过cookies提交的值也要进行过滤。
解决:
过滤SQL特殊字符。
已解密的登录请求
描述:
在含有type=password类型的表单提交中,使用http方式进行提交,http是以明文的方式进行提交,内容有被截获的可能,安全扫描软件会判断存在中等级别的问题。
解决办法:
1、Windows平台,打开CMD窗口,运行如下命令:
keytool-genkey-aliastomcat-keyalgRSA-keypasschangeit-storepasschangeit-keystoreC:
\tomcat_ssl.key
(运行命令后,根据提示输入内容。
完成上述命令会在C盘根目录下生产证书文件)
2、修改tomcat的server.xml文件(采用https标准端口443,端口是否被占用很关键,如果占用,换其它端口,但是要注意10.3和10.4步骤中对应的redirectPort参数值也要修改)
(注意增加keystoreFile参数,参数值取决于证书存放的位置,建议放到tomcat的conf目录中)
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"disableUploadTimeout="true"
acceptCount="100"scheme="https"secure="true"
clientAuth="false"sslProtocol="TLS"keystoreFile="C:
/tomcat.key"/>
3、(修改了redirectPort参数)
enableLookups="false"redirectPort="443"protocol="AJP/1.3"/>
4、(修改了redirectPort参数)
--Defineanon-SSLHTTP/1.1Connectoronport8080-->
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"URLEncoding="GBK"/>
5、修改配置完成后,要重新启动tomcat服务,并通过外网进行端口测试(将任何一个原来的http地址换为https:
//url:
port测试即可);
链接注入
攻击程序可通过系统的提交功能,提交![]()
解决办法:
通过我们开发的过滤器可解决,参考本文相关地方内容。
通过框架钓鱼
该漏洞与链接注入几乎一模一样,解决办法也一样。
启用了不安全的http方法
解决办法:
修改应用的web.xml文件,加入如下内容:
/*
PUT
DELETE
HEAD
OPTIONS
TRACE
s
BASIC
危险代码过滤器
将filter包中的代码加注了对应项目中,并修改web.xml,加入如下配置。
ParameterHandleFilter
filter.ParameterHandleFilter
ParameterHandleFilter
/*
远程主机DISCARD服务正在运行
描述:
远程主机DISCARD服务正在运行
解决:
禁止远程主机DISCARD服务
////////////////////////////////////////////
Windows服务器服务漏洞
描述:
Windows系统上的服务器服务中存在一个远程执行代码漏洞。
该漏洞是由于服务不正确地处理特制的RPC请求导致的。
成功利用此漏洞的攻击者可以完全控制受影响的系统。
解决:
WindowsServer2003SP2安装如下修补补丁没,其它系统到微软网站下载对应补丁安装
远端正在运行WINS服务
描述:
远程主机正在运行wins服务。
WINS是WindowsInternetNameServer(Windows网际名字服务)的简称。
解决:
关闭wins服务
Chargen服务
描述:
Chargen (port 19) 服务可被欺骗从某台计算机上的服务发送数据到另一台机器上的服务,造成死循环,制造拒绝服务攻击。
攻击可以消耗大量的网络带宽,严重影响被攻击网段的性能。
如"http:
//localhost:
19" 的URL也会在运行Lynx 和chargen 的系统上发动类似的拒绝服务攻击。
Netscape Navigator 不准许访问port 19,所以很安全。
解决:
Windows一般没有 chargen 服务,但也可能有。
中止chargen 服务的步骤是:
1.打开registry editor;2.到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\SimpTcp\Parameters; 3.双击EnableTcpChargen 密钥显示DWORD Editor;4.替代Data 字段为 0;5.点击OK;6.重复第 3 到第5步,完成EnableUdpChargen 密钥的操作;7.停止及重起Simple TCP/IP 服务,使更改生效。
Echo服务
描述:
发现echo 服务在运行。
Echo (port 7) 服务可被欺骗从某台计算机上的服务发送数据到另一台机器上的服务,造成死循环,制造拒绝服务攻击。
攻击可以消耗大量的网络带宽,严重影响被攻击网段的性能。
解决:
如无需要,中止echo 服务。
Unix:
中止echo 服务的方法是把在/etc/inetd.conf 文件的echo 那一行变成注释行,然后重起inetd 进程。
Windows:
中止这服务的步骤是:
1.打开Services 控制面版,从Windows NT Start menu选Settings/Control Panel/Services;2.选Simple TCP/IP Services 服务然后点击Stop;3.点击Startup;4.要永久停止所有TCP/IP 服务,点击Disabled。
如果只中止echo 服务,步骤是:
1.打开registry editor,从Windows NT Start menu选Run。
输入regedt32 后点击OK;2.选HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\SimpTcp\Parameters 密钥; 3.设置 EnableTcpEcho 和EnableUdpEcho 的值为0; 4.重起Simple TCP/IP 服务。
FTP_端口顺序打开
描述:
与远端FTP服务器建立连接后,发送一系列PASV(被动模式)命令,要求远端主机分配数据端口(这与正常的主动模式相反,在主动模式下是由FTP客户端分配数据端口)。
每发送一个PASV命令,FTP服务器就会返回一个数据端口号,这些端口号很可能是一个顺序或可预测的序列。
如果顺序打开端口, 攻击者就会很容易预测下一个FTP服务将会用的端口,然后与这个端口连接,查找另一个用户的文件。
解决:
联系供应商提供补丁程序。
RPCStatd服务
描述:
远程rpc.lockd 文件可能提供假的信息给rpc.statd 文件,使文件可以被移动或新建。
RPC statd 与RPC lockd 一起工作维护状态信息,来提供跨NKS文件锁定的崩溃及恢复功能。
因为statd不验证从远程lockd 收到的信息,所以攻击者可以发送RPC去建立或取消系统上任何文件。
解决:
用户联系供应商或他们的网站,索取补丁或参考供应商的指示。
远程shell(RSH)服务正在运行
描述:
远程shell服务(Remoteshell)是远程执行工具,它是基于信任主机授权的,当一个伪造成受信任的IP的攻击者,可以在主机上执行任意程序。
解决:
禁止RSH服务
OpenSSHGSSAPI处理远端代码执行漏洞
描述: