漏洞编号 | 风险级别 | 漏洞描述 |
1 | 高 | XSS(跨站脚本攻击) |
2 | 高 | CSRF(伪造跨站请求) |
3 | 高 | Sql Injection(SQL注入漏洞) |
4 | 中 | Information Leakage (服务器信息泄露) |
5 | 中 | Management Console Disclosure (管理后台泄露) |
6 | 高 | Trojan(挂马) |
7 | 中 | Improper Error Handling (异常错误处理) |
8 | 高 | Code Injection |
9 | 高 | OS Commanding |
10 | 高 | Path Traversal(目录遍历) |
11 | 低 | Directory Indexing(目录泄露) |
12 | 高 | Unvalidated Redirects and Forwards (跳转) |
13 | 高 | Weak Application (危险程序,如jmx,phpinfo) |
14 | 高 | Remote file inclusion',(远程文件包含) |
15 | 高 | CRLF Injection |
跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用 户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
安全隐患,攻击者可利用XSS漏洞获取用户cookie,传播蠕虫,篡改页面或进行钓鱼等
对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE 处理。
PHP应用,可以使用htmlspecialchars对用户参数进行编码
ASP.net应用,可以使用AntiXSS
JAVA应用,可以使用org.apache.commons.lang.StringEscapeUtils提供的Escape函数
(1)ASP:
问题示例代码:
<%
Dim param
Set param=Request.QueryString("dd")
response.write param
%>
修复范例:
<%
Dim param
Set param=Request.QueryString("dd")
response.write Server.HTMLEnCode(param)
%>
(2)PHP
问题代码示例:
<?php
$aa=$_GET['dd'];
echo $aa."123";
?>
修复范例:
<?php
$aa=$_GET['dd'];
echo htmlspecialchars($aa)."123";
?>
CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用
该漏洞可以在用户登录完成后的会话里,让用户执行不知情的操作。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......
1、在功能请求页面设置csrf token,并在服务端对token进行验证。
2、将get请求改为post方式。
SQL注射是由于程序中对使用到的sql没有做到数据和结构分离导致程序的sql能被恶意用户控制,从而引发的数据库信息泄漏,修改,服务器被入侵等一系列严重后果。
数据库信息泄露或被修改,还有可能威胁服务器的安全。
对程序中使用到的SQL语句,使用变量绑定的方式进行数据和结构的分离。
参数化形式构造SQL语句进行查询
(1)ASP
问题代码示例:
<%
Dim oComm, oRs
Set id=Request.QueryString("d")
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=MSDAORA;Password=sth;
Persist Security Info=True;User ID=whats;Data Source=mescp"
Set oComm = CreateObject("ADODB.Command")
oComm.ActiveConnection = oConn
Comm.CommandType = 1
oComm.CommandText = "select * from all_objects where rownum ="& id
Set oRs = oComm.Execute
%>
修复范例:
<%
Dim oComm, oRs
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=MSDAORA;Password=sth;Persist Security Info=True;User ID=whats;Data Source=mescp"
Set oComm = CreateObject("ADODB.Command")
oComm.ActiveConnection = oConn
Comm.CommandType = 1
oComm.CommandText = "select * from all_objects where rownum = ? "
oComm.Parameters.Append oComm.CreateParameter("v1",3,1,4,100)
Set oRs = oComm.Execute
%>
(2)PHP
问题代码示例:
<?php
$id=$_GET['id'];
$conn = mysql_connect("localhost","root","") or die ("wrong!");
$sel=mysql_select_db("mydb",$conn);
$sql="select * from user where id = ".id
$que=mysql_query($sql,$conn);
?>
修复范例:
<?php
$id=$_GET['id'];
$conn = mysql_connect("localhost","root","") or die ("wrong!");
$sel=mysql_select_db("mydb",$conn);
$sql="select * from user where id = :id"
$stmt = $conn->prepare($sql);
$stmt->execute(array(':id'=>$id));
?>
(3)JAVA应用可以使用ibatis
可能会泄露一些敏感信息,被攻击者利用。如phpinfo()
关闭应用程序不必要的输出,如调试,错误信息的输出。
应用的后台系统泄露在外面,任何用户都可以随意访问到。
可能会遭到攻击者的暴力破解或利用bypass漏洞,进入应用后台,进行非法操作。
挂马是恶意攻击者通过各种手段篡改页面,种植恶意代码,最终导致网站用户机器被中木马进而引起用户各种资损并间接导致网站资损的恶性攻击行为。
应用程序已经被攻击者破坏,同时来危及来访的用户电脑安全。
检查被挂马页面,去除其中被添加的挂马代码。找出系统存在的安全漏洞,删除恶意代码。
(1)被挂马页面示例(iframe):
<html>
<body>
…………
<iframe src=http://www.trojan.com/ms04067.html width=0 height=0 />
</body>
</html>
修复范例:
删除其中的<iframe src=http://www.trojan.com/ms04067.html width=0 height=0 />
(注:特征为iframe长宽都为0或者很低)
(2)被挂马页面示例(script):
<html>
<body>
…………
<script src=http://www.trojan.com/ms04067.js />
</body>
</html>
修复范例:
删除其中的<script src=http://www.trojan.com/ms04067.js />
(注:特征为script为外站script或者为非网站所有者所知的script)
程序运行时产生的异常没有处理,导致应用/服务器的状态信息显示在默认的错误页面上。
异常信息的不正确处理,可能会导致一些未知的问题。
1、正确处理好程序的异常以及函数调用的返回信息。
2、对外使用时,采用统一的错误页面。
代码注入是指由于服务端代码漏洞导致恶意用户输入在服务端被执行的一种高危安全漏洞;
利用该漏洞,可以在服务器上执行攻击者拼装的代码。
严格检查控制程序的参数.
(1)ASP:
<%
' 期待输入sub.asp
execute request("include")
%>
修复范例:
<%
<!--#include file="sub.asp"-->
%>
(2)PHP:
漏洞代码示例:
<%php
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
%>
修复范例:
<%php
$myvar = "varname";
$x = $_GET['arg'];
$myvar = $x;
%>
系统命令执行是指应用程序对传入命令行的参数过滤不严导致恶意用户能控制最终执行的命令,进而入侵系统,导致严重破坏的高危漏洞。
利用这个漏洞攻击着可以执行服务器上的命令。
1、严格检查程序参数,特别是 "&", "&&", "|", "||"。
2、在代码中去除system等直接命令行执行函数或者禁止把外部传入参数传入到该类可执行函数的参数中。
(1)ASP:
漏洞代码示例:
<%
Dim cmd
Set cmd=Request.QueryString("cmd")
response.write server.createobject("wscript.shell").exec("cmd.exe /c "&cmd).stdout.readall
%>
修复范例:
Dim cmd
Set cmd=Request.QueryString("cmd")
if cmd == "dir" then
response.write server.createobject("wscript.shell").exec("cmd.exe /c "& "dir").stdout.readall
end if
%>
(2)PHP
漏洞代码示例:
<%php
$myvar = "varname";
$x = $_GET['arg'];
// 默认通过url传入ls -al 进行执行
system($x);
%>
修复建议:
<%php
$myvar = "varname";
$x = $_GET['arg'];
// 默认通过url传入ls -al 进行执行
if($x=='/bin/ls -al'){
system('/bin/ls -al');
}else{
return;
}
%>
目录遍历指的是应用程序对文件路径没有检查导致服务器上的敏感文件/代码泄漏。
可能会导致源代码等敏感信息泄露。
严格检查文件路径参数,限制在指定的范围。严格限制文件路径参数,不允许用户控制文件路径相关的参数,限定文件路径范围。
(1)ASP:
漏洞代码示例:
<%
Dim FileName
FileName = Request.QueryString("FileName")
Response.Clear
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=" & FileName
Set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = 1
Stream.Open
Stream.LoadFromFile Server.MapPath(FileName)
While Not Stream.EOS
Response.BinaryWrite Stream.Read(1024 * 64)
Wend
Stream.Close
Set Stream = Nothing
Response.Flush
Response.End
%>
修复范例:
<%
Dim FileName
FileId = Request.QueryString("FileId")
FileName = GetFileNameByID(FileId)
Response.Clear
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=" & FileName
Set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = 1
Stream.Open
Stream.LoadFromFile Server.MapPath(FileName)
While Not Stream.EOS
Response.BinaryWrite Stream.Read(1024 * 64)
Wend
Stream.Close
Set Stream = Nothing
Response.Flush
Response.End
%>
(2)PHP:
在php.ini中进行如下配置:
open_basedir = 服务器上WEB目录的路径(注,路径最后需要加上斜杠作为结束),如:open_basedir = /var/www/html/
应用服务器配置不当,导致应用服务器的目录列表被展示。
可能会导致敏感信息或源代码泄露。
配置应用服务器禁止目录列表展示。
某些页面由于功能需要需要进行页面跳转,如果没有对跳转的目的页面做检查就会导致被利用做为恶意URL的访问渠道。
攻击着可以利用这个漏洞进行跳转钓鱼。
1、严格检查URL跳转的范围。
2、跳转页面参数中添加redirect_url参数的签名,防止被篡改。
应用服务器配置不当,如存在jboss的jmx-console,php的phinfo等。
可能导致服务器被攻击或服务器敏感信息泄露。
删除不正确的配置。
远程文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行,进而获取到服务器权限,造成网站被恶意删除,用户和交易数据被篡改等一系列恶性后果。
攻击着可以利用该漏洞,在服务器上执行命令。
配置php.ini关闭远程文件包含功能。
allow_url_include = Off
(1)PHP:
漏洞代码示例:
<?php
$path=$_GET['arg'];
include $path.'/filename.php';
?>
修复范例:
<?php
$path='/var/www/html/common.inc';
include $path.'/filename.php';
?>
或者:在php.ini中进行如下配置:
allow_url_fopen=off
allow_url_include=off
PHP有一些函数用文件名(如:fopen(), file()等)作为它们的参数。如果在php.ini中allow_url_fopen被设置为打开的,这些函数也允许以接受URL来替代接收文件,并且用正确的协议连接到服务器。那么这些函数将很容易遭到 CRLF Injection 攻击。
攻击着可以利用该漏洞在http请求注入恶意代码。
1、过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF
2、如果你的脚本不需要访问URLs,建议在php.ini中关闭allow_url_fopen
http://en.wikipedia.org/wiki/Cross-site_scripting
http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
http://en.wikipedia.org/wiki/Cross-site_request_forgery
http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29
http://en.wikipedia.org/wiki/SQL_injection
https://www.owasp.org/index.php/Information_Leakage
https://www.owasp.org/index.php/Improper_error_handling
https://www.owasp.org/index.php/Code_Injection
https://www.owasp.org/index.php/OS_Command_Injection
https://www.owasp.org/index.php/Open_redirect
https://www.owasp.org/index.php/PHP_File_Inclusion
https://www.owasp.org/index.php/CRLF_Injection
评论