1. 跨站脚本攻击(XSS)漏洞
风险等级:高
检测方法:常用 payload:
”> alert(/xss/) 、”><svg/οnlοad=prompt(/xss/)>
漏洞描述:
跨站脚本攻击是指应用程序没有对用户的输入,以及页面的输出进行严格地过滤,从而使恶意攻击者能往 Web 页面里插入恶意代码,当用户浏览该页面时,嵌入其中
Web 里面的恶意代码会被执行,从而达到恶意攻击者的特殊目的。
修复建议:
[1] 对用户输入的数据进行严格过滤,包括但不限于以下字符及字符串
Javascript script src img onerror { } ( ) < > = , . ; : ” ‘ # ! / *
[2] 根据页面的输出背景环境,对输出进行编码
[3] 使用一个统一的规则和库做输出编码
[4] 对于富文本框,使用白名单控制输入,而不是黑名单
[5] 在 Cookie 上设置 HTTPOnly 标志,从而禁止客户端脚本访问 Cookie
2. 任意文件上传漏洞
风险等级:高
检测方法:在文件上传的地方,进行上传任意后缀文件看能否上传,可以使用多种文件上传及解析漏洞利用的技巧进行上传(参考链接),还可以通过观察上传正常文件确认是否有二次上传漏洞!
漏洞描述:
文件上传文件主要是用来向服务器上传图片文件或其它格式文件的上传接口,如果上传文件过滤不严就可能导致黑客通过其它手段来达到向服务器上传后门的目的。
修复建议:
[1]设置白名单,指定允许上传文件的文件格式
[2]限制上传目录的权限(只开启读写权限,关闭执行权限)
[3]对于重要的业务系统,对于上传的文件和图片等增加人工审核功能,审核通过后用户才可以访问。
补:对上传的 zip 文件内容做校验;对 webservice 添加授权;
及时关注官方补丁
3. Tomcat 管理控制台页面泄露
风险等级:中
检测方法:一般地址为 http://[IP]:[Port]/admin
漏洞描述:
Tomcat 默认存在一个管理后台,若未对账户登录错误次数做限制。可通此后台可以在不重启 Tomcat 服务的情况下方便的部署、启动、停止或卸载 WEB
应用。但是,如果配置不当的话就存在很大的安全隐患。攻击者利用这个弱点可以非常快速、轻松的入侵一台服务器。
修复建议:
方法一:本方法适用于完全不需要使用默认控制台及相关功能的应用场景。
[1]删除#TOMCAT_HOME#/webapps 下 admin.xml 和 manager.xml 文件;
[2]删掉#TOMCAT_HOME#/conf/tomcat-users.xml 中的用户和密码;
[3]删除#TOMCAT_HOME#/server/webapps 下的 admin 和 manager 两个应用;
[4]删除#TOMCAT_HOME#/webapps 下的 admin 和 manager 两个应用。
方法二:本方法适用于需要保留默认控制台和相关程序的应用场景。
[1]在#TOMCAT_HOME#/conf/Catalina/localhost/manager.xml 的 Context
标签内增加如下一行,限制只能有内网特定 IP 或 IP 端才能访问控制台:
备注:RemoteAddrValve 过滤的是 IP 地址,多个 ip 或多个域名之间,可以使用“,”分隔。
[2]配置#TOMCAT_HOME#/conf/tomcat-users.xml 中的用户名和密文的密码(用#TOMCAT_HOME#/bin 目录下的
digest.sh 对密码进行加密,得到密文,例如:digest.sh -a sha Ryoukk_195,其中蓝色的密码自行设置,保证密码长度大于 8
位,包含大小写字符、数字和特殊字符)。在#TOMCAT_HOME#/conf/server.xml 中的 UserDataBase-Realm
指定密码的摘要算法(新增蓝色部分):
[3]当 tomcat 已经配置了 SSL,则对登录管理应用强制使用 SSL,配置方法如下:
在#TOMCAT_HOME#/webapps/manager/WEB-INF/web.xml 的 security-constraint
标签内,增加如下内容:
SSL
/manager/*
CONFIDENTIAL
[4]重命名管理控制台
进入目录/webapps/host-manager
重命名 manager.xml 文件 //并检查是否存在默认管理控制台或管理员帐户。
4. SQL 注入漏洞
风险等级:高
检测方法:
在发现有可控参数的地方使用 sqlmap 进行 SQL 注入的检查或者利用,也可以使用其他的 SQL 注入工具,简单点的可以手工测试,利用单引号、and
1=1 和 and 1=2 以及字符型注入进行判断!推荐使用 burpsuit 的 sqlmap 插件,这样可以很方便,鼠标右键就可以将数据包直接发送到
sqlmap 里面进行检测了!
漏洞描述:
当应用程序使用输入内容来构造动态 SQL 语句以访问数据库时,如果对输入的参数没有进行严格的过滤或者过滤不完整将会导致 SQL 注入攻击的产生。
恶意用户通过构造特殊的 SQL 查询语句把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL
命令。从而可以获取到数据库的相关信息,包括数据库账号密码信息,甚至可上传木马,从而控制服务器。
修复建议:
[1] 对用户的输入进行严格过滤,包括所有的参数,URL 和 HTTP 头部等所有需要传给数据库的数据。
包括但不限于以下字符及字符串
select and or like regxp from where update exec order by having drop delete (
) [ ] < > , . ; : ‘ ” # % + – _ = / * @
[2] 预编译 SQL 语句,而不要动态组装 SQL 语句,否则必须确保在使用输入的数据组装成 SQL 语句之前,对特殊字符进行预处理。
[3] 以最小权限执行 SQL 语句
5. IIS 短文件名枚举漏洞
风险等级:中
检测方法:工具 IIS_shortname_Scanner
漏洞描述:
Microsoft IIS 处理波浪符号存在一个短文件/文件夹名泄露问题,攻击者可利用此漏洞枚举 web 目录中的文件,从而获取敏感信息或.Net
Framework 的拒绝服务攻击
修复建议:
[1] 升级.NET Framework :
[2] 如果你的 web 环境不需要 asp.net 的支持你可以进入 Internet 信息服务(IIS)管理器 — Web 服务扩展 – ASP.NET
选择禁止此功能。
[3] 禁止 url 中使用“~”或它的 Unicode 编码。
[4] 或修改注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
“NtfsDisable8dot3NameCreation”=dword:1
6. 敏感信息传输未加密
风险等级:中
检测方法:使用浏览器自带的 F12 中的 network 模块就可以进行查看,或者使用抓包工具,如 sniffer、burpsuite、fiddler 等!
漏洞描述:
诸如用户名、密码和信用卡号之类的敏感输入字段未经加密即进行了传递,任何以明文传给服务器的信息都可能被监听窃取。
修复建议:
[1] 用户登录信息使用加密传输,如密码在传输前使用安全的算法加密后传输,可采用的算法包括:不可逆 hash 算法加盐(4
位及以上随机数,由服务器端产生);安全对称加密算法,如 AES(128、192、256 位),且必须保证客户端密钥安全,不可被破解或读出;非对称加密算法,如
RSA(不低于 1024 位)、SM2 等。
[2] 使用 https 来保证传输的安全。
7. 慢 HTTP 拒绝服务攻击漏洞
风险等级:中
检测方法:使用工具 SlowHTTPTest, slowhttptest -c 1000 -X -g -o -slow_read_stats -r 200
-w 512 -y 1024 -n 5 -z 32 -k 3 -u http://url/ -p 3
一分钟看能否打开网站,不能打开说明存在
漏洞描述:
根据 HTTP 协议规定,服务器在处理请求之前,需要接收完整的 HTTP 请求。所以如果 HTTP
请求未接收完整,或者网络传输速率非常慢,服务器会保留其资源,直到其余的数据也接收完成为止。如果未完成的请求过多,就会占用服务器大量资源,从而导致拒绝服务攻击。攻击者利用此漏洞可只使用较少的资源即可导致系统崩溃,运行中断。
修复建议:
[1] 配置 WEB Server 相应文件,设置一个合适的超时时间(如 5000ms),以及时释放资源。
8. SSL 3.0 协议未禁用
风险等级:中
检测方法:可以是通过在线检测工具 SSL Server Test (Powered by Qualys SSL Labs)来进行检测
漏洞描述:
支持 SSLv3 协议的网站存在被中间人攻击的风险,“Poodle”攻击(全称为 Padding Oracle On Downloaded Legacy
Encryption)可以提取出 SSL 连接中的加密数据相应的明文信息。攻击者可以利用这个漏洞发动中间人攻击或解密受此影响的客户端之间的通信内容。
修复建议:
1)如果要完全避免此漏洞,需要禁止使用 SSLv3 协议;
2)考虑到老版本浏览器(如 IE6)的默认设置为 SSLv3 协议,如果直接禁用 SSLv3
协议,将导致这批采用默认设置的用户无法访问对应网站,可以采用通过修改 web server 的 SSL 配置来修复这个问题,配置实现的效果是客户端通过
SSLv3 协议访问 https 业务时双方使用 RC4-SHA 加密,而采用 TLS1.0 或更高版本协议时优先使用其他强加密算法。
3)另外,一些会被移动客户端访问的应用,在禁止 SSLv3 或更改 SSL 配置时,需要考虑到移动客户端中是否指定了使用 SSLv3 协议或者采用 CBC
模式的块加密,如果有这个问题则需要先修改客户端的实现,才能执行修复方案,否则移动客户端的访问将受影响。
禁止使用 SSLv3 协议配置:
nginx
修改应用原 SSL 配置文件中的 ssl_protocols 以及 ssl_ciphers
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-
RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-
SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-
AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
apache
修改应用原 SSL 配置文件中 SSLProtocol 以及 SSLCipherSuite
SSLProtocol all -SSLv3 -SSLv2
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-
RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-
SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-
AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS
不禁止 SSLv3 协议,去除 SSLv3 支持的 CBC 模式的块加密算法配置:
nginx
修改应用原 SSL 配置文件中的 ssl_protocols 以及 ssl_ciphers
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-
RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-
SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-
AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
apache
修改应用原 SSL 配置文件中 SSLProtocol 以及 SSLCipherSuite
SSLProtocol all -SSLv2
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-
RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-
SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-
SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-
AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS
9. 密码字段通过 GET 方法传输
风险等级:中
检测方法:提交字段时,观察 URL 变化
漏洞描述:
GET 是 Form 的默认方法。GET 方法是不安全的,因为在传输过程,数据被放在请求的 URL
中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求 URL 记录到日志文件中,导致敏感信息在多个位置有副本,增加了敏感信息泄露的风险。
修复建议:
[1] 敏感信息应该采用 POST 方法提交,且提交前应进行加密
10. 不安全 HTTP 方法未禁用
风险等级:高
检测方法:这里可以使用多种方法,可以使用 burpsuit 进行截断将数据包发往 repter,然后将对应的 HTTP 方法更改为
OPTIONS,看响应包里面的 allow 是否有不安全的方法,也可以使用 curl 进行检查,命令为:curl -i -X OPTIONS URL ,-i
可以换为-v,查看更详细的内容!
漏洞描述:
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1
协议的通信协议。它扩展了 HTTP 1.1,在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法,使应用程序可直接对 Web
Server 直接读写,还可以支持文件的版本控制。不合理的权限配置导致任意用户可以通过 PUT 方法直接上传任意文件到有写权限的目录,例如攻击者可上传
WebShell,从而控制网站。
修复建议:
[1] 限制 PUT、DELETE、SEARCH、COPY、MOVE 等危险的方法的访问权限
[2] 如果不需要使用上述方法,应关闭方法
11. 默认错误信息未屏蔽
风险等级:低
检测方法:可以通过目录扫描等
漏洞描述:
由于配置问题或代码问题访问目标出错时返回默认错误信息,可能包含 SQL 语句、Web
应用的物理路径、应用的版本信息等等。攻击者可以通过这些信息来进行下一步的攻击。
修复建议:
[1] 优化代码从而避免程序报错
[2] 通过自定义错误页面来屏蔽错误信息,包括但不限于以下错误页面 400,401,403,404,405,500 等
[3] 系统正式上线后应关闭调试功能
12. 目录列表功能未禁用
风险等级:中
检测方法:可以通过目录扫描等
漏洞描述:
当用户访问的网址是某个目录地址的时候,服务器自动显示该目录所包含的文件列表内容。通过浏览服务器地址,可以查看到此目录下的所有文件的名称,一些敏感的文件可能被获取(例如存放数据库连接账户的配置文件等)。
修复建议:
[1]如果该功能非必须,请禁用
[2]如果该功能为正常业务需要,请限制普通用户访问的范围仅为正常业务范围
13. 密码明文存储
风险等级:高
检测方法:
漏洞描述:
诸如密码和信用卡号之类的敏感字段在数据库中必须加密之后再存储。否则敏感信息会容易泄露。
修复建议:
[1] 采用通用的标准加密算法,不建议使用自行开发的算法
[2] 对于不需要还原的信息应采用不可逆的加密算法,且需要增加随机值
14. 缺乏验证码机制
风险等级:中
检测方法:使用截断抓包工具进行暴力破解,如 burpsuite,推荐使用 2 到 3 个弱口令,然后使用人名拼音 top500
加上自己实际中常用字典进行暴力破解!
漏洞描述:
登录页面没有使用验证码作为增强验证方式、密码错误次数限制或双因子认证等缺乏防暴力破解机制,攻击者可以利用口令破解工具进行表单破解从而获取正确的账号口令。
修复建议:
[1] 登录页面增加图形验证码作为增强验证方式,建议图形验证码包含随机干扰像素、有扭曲、变形、重叠等元素,以增加口令破解难度。
[2] 密码输入错误超过一定次数情况,应采用锁定账号等安全措施。
[3] 采用双因子认证机制,如手机短信验证、U 盾等。
15. 配置文件泄露
风险等级:中
检测方法:
漏洞描述:
应用程序的设置是通过配置文件来实现的,这些设置中包含敏感信息。攻击者了解应用程序的具体配置文件内容,有利于进一步攻击。
修复建议:
[1] 限制可以访问配置文件及其目录的权限,只允许管理员访问、修改。
16. SSL 2.0 协议未禁用
风险等级:中
检测方法:可以是通过在线检测工具 SSL Server Test (Powered by Qualys SSL Labs)来进行检测
漏洞描述:
远程服务使用 SSL 2.0
进行通信连接加密,根据公开的漏洞曝露报告,此版本的协议存在一些加密缺陷,并已废弃多年。攻击者可以利用这些已公开的漏洞发动中间人攻击或解密受此影响的客户端之间的通信内容。
修复建议:
17. 敏感文件泄露
风险等级:中
检测方法:
漏洞描述:
网站存在备份文件、日志文件、管理页面、测试文件、临时文件等未禁止访问。这些文件可以帮助攻击者更多地了解网站,从而进行下一步攻击。
修复建议:
[1] 限制可以访问文件及其目录的权限,只允许管理员访问、修改。
18. jQuery ‘location.hash’ 跨站脚本漏洞
风险等级:中
检测方法:
漏洞描述:
Web 应用程序中使用了低版本的 jQuery,由于在低版本的 jQuery 的元素 location.hash 对输出数据过滤不够严格,导致调用
location.hash 会存在跨站脚本执行漏洞,从而威胁网站安全。该漏洞在 jQuery 1.6.3 已修复。
修复建议:
更新到最新版本的 jQuery。
下载漏洞地址:Download jQuery | jQuery
19. Jquery 版本过低
风险等级:中
检测方法:
漏洞描述:
Web 网站中所调用的 JavaScript 库版本较低,存在跨站脚本执行漏洞。
修复建议:
[1] 更新升级相应的 JavaScript 库
20. 弱口令
风险等级:高
检测方法:先手工尝试一些最基本的弱口令,如 admin/admin、admin/123456、admin/888888
等,如果不行,使用暴力破解工具进行暴力破解,如使用 burpsuite,另外推荐一个小技巧,使用暴力破解的时候,弱口令使用 2 到 3
个常见的,然后用户名使用人名拼音 top500!
漏洞描述:
由于管理员安全意识不强,导致系统存在容易猜测的账号口令,如“admin”,“123456”,“888888”等弱口令。攻击者可能通过尝试弱口令,从而非法进入系统。
修复建议:
[1]修改口令,建议采用大小写字母,数字,特殊字符混合并且长度大于 8 位。
[2]配置相应的密码策略,强制用户使用安全性相对较高的口令。
[3]定期组织安全意识培训,提高管理员安全意识。
21. 用户名枚举
风险等级:中
检测方法:
漏洞描述:
网站登录失败、账号注册、密码找回等功能,有些网站会提示类似“用户名不存在”的错误,攻击者可以通过该提示先猜测出系统存在哪些账号,然后再进一步猜测密码,降低了暴力破解的成本。
修复建议:
[1] 采用模糊提示,如“登录失败”即可。
[2] 增加动态验证码机制,防止被枚举账号名。
22. 文件包含漏洞
风险等级:
检测方法:
漏洞描述:
由于开发人员编写源码,开放着将可重复使用的代码插入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码文件中,然后包含文件中的代码会被解释执行。由于并没有针对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端解释执行。文件包含攻击中
WEB 服务器源码里可能存在 inlcude()此类文件包含操作函数,可以通过客户端构造提交文件路径,是该漏洞攻击成功的最主要原因。
修复建议:
[1] 对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。
[2] 严格检查 include 类的文件包含函数中的参数是否外界可控。
[3] 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
23. 日志文件泄露
风险等级:
检测方法:
漏洞描述:
日志文件是用于记录系统操作事件的记录文件或文件集合,操作系统有操作系统日志文件,数据库系统有数据库系统日志文件,等等。如果非授权用户可以访问这些信息,将会泄露敏感信息,可能包括用户名,数据库语句,字段等等。
修复建议:
[1] 将日志文件转移到其他合理的位置。
[2] 设置相应权限,只允许相关用户访问
24. Apache 软件版本较低
风险等级:高
检测方法:
漏洞描述:
主机使用的 Apache 软件版本过低(当前 Apache/1.3.28)导致存在多个高危漏洞,可能存在溢出、注入、跨站脚本漏洞等等。
修复建议:
[1] 升级 Apache 到最新版本,升级前请先做好备份。
25. WebLogic 软件版本较低
风险等级:高
检测方法:
漏洞描述:
主机使用的 WebLogic 软件版本过低导致存在多个中高危漏洞,可能存在溢出、注入、跨站脚本漏洞等等。
修复建议:
[1] 升级 WebLogic 到最新版本,升级前请先做好备份。
26. Struts 2 远程命令执行漏洞
风险等级:紧急
检测方法:
漏洞描述:
struts2 框架版本过低,存在远程任意命令执行漏洞。
修复建议:
[1]升级 struts 至最新版本(升级前请做好备份)
27. Tomcat 软件版本较低
风险等级:高
检测方法:
漏洞描述:
主机使用的 Tomcat 软件版本过低,导致存在多个高危漏洞。包括溢出、跨站脚本漏洞、拒绝服务攻击漏洞等等。
修复建议:
[1] 升级 Tomcat 到最新版本,升级前请先做好备份。
28. Nginx 软件版本较低
风险等级:高
检测方法:
漏洞描述:
主机使用的 Nginx 软件版本过低导致存在多个高危漏洞。包括溢出、拒绝服务攻击漏洞等等。
修复建议:
[1] 升级 Nginx 到最新版本,升级前请先做好测试及备份。
29. PHP 软件版本较低
风险等级:中
检测方法:
漏洞描述:
主机使用的 PHP 软件版本过低导致存在多个高危漏洞。包括溢出、拒绝服务攻击漏洞等等。
修复建议:
[1] 升级 PHP 到最新版本,升级前请先做好备份。
30. PHPinfo 信息泄露
风险等级:中
检测方法:直接在根目录中输入 phpinfo.php 进行访问,如果文件更名了,我们可以使用目录扫描工具进行判断!
漏洞描述:
Web 站点的某些测试页面可能会使用到 PHP 的 phpinfo()函数,会输出服务器的关键信息,从而造成信息泄露,通过获取的信息可进行下一步的攻击计划!
修复建议:
[1] 限制该 php 文件 的访问权限
[2] 如果不需要使用该页面,应删除该 php 文件
31. 框架注入漏洞
风险等级:高
检测方法:
漏洞描述:
如果对用户输入的数据未进行严格过滤,攻击者可构造标签
frame、iframe,包含伪造的登录框,引诱其他用户或管理员访问,并输入账号密码信息,从而发送到攻击者指定的服务器,达到窃取敏感信息的目的。
修复建议:
[1] 对用户输入的数据进行严格过滤
[2] 根据页面的输出背景环境,对输出进行编码
[3] 使用一个统一的规则和库做输出编码
32. TRACE 方法未禁用
风险等级:低
检测方法:抓取数据包后,修改方法为 TRACE。查看返回包是否存在 cookie 或其它的认证信息。
漏洞描述:
存在跨域漏洞的情况下,支持 HTTP TRACE 方法的域存在泄露 HTTP 头部信息风险,攻击者可能通过该漏洞窃取 cookies 和其他认证信息。
修复建议:
[1] 通过修改 Web 服务器配置文件禁用 TRACE 方法
33. Struts 2 开发模式未关闭
风险等级:中
检测方法:
漏洞描述:
默认情况 debug 功能是关闭的,但是有时需要开启 debug
功能进行排错,而排错完成之后,可能会存了忘记关闭。被攻击者利用可能泄露应用服务器的敏感信息。
修复建议:
[1] 关闭 Struts 2 开发模式,
在 WEB-INF/classes/struts.properties 文件修改如下:
struts.devMode=false
34. 源代码泄露
风险等级:高
检测方法:
漏洞描述:
源代码中可能包含有敏感信息,并且源代码可以有效的帮助攻击者理解网站应用逻辑,为展开其他类型的攻击提供有利信息,降低攻击的难度。
修复建议:
[1] 设置代码访问权限
[2] 修改存放位置
35. 远程管理端口未过滤
风险等级:中
检测方法:
漏洞描述:
端口号 22、3389、4899、5631、5901
等是默认的远程管理通信端口。连接上相应端口,输入管理员账号密码之后,即可对服务器进行远程管理。远程管理端口如果对非管理员开放,恶意用户可通过猜解密码或者远程溢出等漏洞,从而对服务器进行远程控制。
修复建议:
[1] 限制可访问远程管理端口的 IP 范围,建议只允许内网管理网网段访问;如需从互联网访问,采用通过 VPN 再访问。
[2] 把默认的远程管理端口修改为其他端口
[3] 配置账号管理策略,如:密码输入错误 3 次后锁定账号
[4] 及时升级操作系统补丁(升级前做好相应备份)
36. 数据库端口未过滤
风险等级:中
检测方法:
漏洞描述:
端口号 1433、1521、3306
等是默认的数据库通信端口。连接上相应端口,输入管理员账号密码之后,即可远程访问数据库中的数据。数据库端口如果对非管理员开放,恶意用户可通过猜解密码或者远程溢出等漏洞,从而访问数据库敏感数据,甚至控制数据库所在服务器。
修复建议:
[1] 限制可访问数据库端口的 IP 范围,一般情况只允许应用服务器访问即可。
[2] 把默认的数据库通信端口修改为其他端口
[3] 配置账号管理策略,如:密码输入错误 3 次后锁定账号
[4] 及时升级数据库系统补丁(升级前做好相应备份)
37. FTP 可匿名访问
风险等级:高
检测方法:21 端口
漏洞描述:
FTP 是 TCP/IP 网络上两台计算机传送文件的协议,运行 FTP
服务的站点如果开放匿名服务,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码即可访问 FTP
服务器上的文件,存在泄露敏感文件的风险。
修复建议:
[1] FTP 服务器如有敏感信息,应该关闭匿名访问功能
[2] 及时升级 FTP 相关补丁(升级前做好相应备份)
[3] 如该 FTP 服务非必要功能,建议关闭 FTP 服务
38. Apache server-info 信息泄露
风险等级:中
检测方法:
漏洞描述:
Apache /server-info 文件显示了 Apache 的配置信息,为攻击者展开其他类型的攻击提供有利信息,降低攻击的难度。
修复建议:
[1] 一般情况下,应禁止普通用户访问。
[2] 如果不需要该功能,可通过配置文件 httpd.conf 关闭该功能
39. 任意文件下载漏洞
风险等级:高
检测方法:
漏洞描述:
远程服务器 WEB 服务对用户提交的下载文件未做后缀过滤及目录控制,导致恶意攻击者可构造路径下载任意服务器文件。
修复建议:
[1] 建议限制文件访问目录及可下载的后缀类型
[2]过滤“../”符号。并进行循环过滤,防止攻击者构造….//这样的字符在过滤一次后仍为../的情况。
40. 目录遍历漏洞
风险等级:高
检测方法:如果链接是多级目录,那么逐级删除目录进行查看,如果链接不是多级目录,可以通过查看图片属性,然后逐级删除目录进行查看,这里可以使用 F12
进行查看资源文件,如图片路径、js 路径等,然后逐级删除目录进行确认!
漏洞描述:
远程服务器 WEB 服务对用户提交的下载文件未做后缀过滤及目录控制,导致恶意攻击者可构造路径下载任意服务器文件。
修复建议:
[1] 建议限制文件访问目录及可下载的后缀类型
[2]过滤“../”符号。并进行循环过滤,防止攻击者构造….//这样的字符在过滤一次后仍为../的情况。
41. 存在疑似后门文件
风险等级:中
检测方法:
漏洞描述:
通过扫描发现网站存在疑似后门的文件,文件中包含 Eval、Execute
等危险函数的调用。如果这些函数不是开发人员调用的,则是恶意用户上传的非法后门文件,如果恶意用户可成功访问这些地址,则可以获得网站控制权限。
修复建议:
[1] 检查文件内容是否合法,对于非法内容应及时删除。
42. Unicode 编码转换问题
风险等级:
检测方法:
漏洞描述:
Unicode 是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。由于 Unicode 有多种编码,如
UTF-8、UTF-16、UTF-32。所以当未指定具体的编码时,服务器为了保证兼容性,可能会支持所有的 Unicode
编码。如果数据过滤器只过滤了其中的一种编码,而未对其他编码进行过滤,那么攻击者就可以利用该漏洞来绕过过滤器,从而可发掘新的 SQL、XSS 等漏洞。
修复建议:
[1] 对参数中的敏感字符进行过滤,包含但不限于以下字符( ) [ ] < > , . ; : ‘ ” # % + & – _ = / * @
[2] 指定单一的编码,例如 UTF-8 编码,而非支持多种 unicode 编码以免原有的过滤方案被绕过
43. 暗链
风险等级:高
检测方法:
漏洞描述:
网页中可能被插入看不见的链接,用来提高某些网站在搜索引擎中的排名。
修复建议:
[1] 网站中的暗链如果非正常业务内容,建议删除
[2] 查找可插入暗链的漏洞,从根本上防止攻击者重新插入暗链
44. 基于 DOM 的跨站点脚本编制
风险等级:高
检测方法:
漏洞描述:
基于 DOM 的 XSS 中,通过涉及服务器控制的可信脚本(例如
JavaScript),该脚本发送到客户端后,在用户提交表单之前,对相应参数进行检查。如果服务器提供的脚本处理用户输入的数据,然后将数据注入回 Web
页面(例如通过动态的 HTML),返回之前未对数据进行严格地过滤,就会可能存在基于 DOM 的 XSS 漏洞。
修复建议:
[1] 对用户输入的数据进行严格过滤
[2] 根据页面的输出背景环境,对输出进行编码
[3] 使用一个统一的规则和库做输出编码
[4] 对于富文本框,使用白名单控制输入,而不是黑名单
[5] 在 Cookie 上设置 HTTPOnly 标志,从而禁止客户端脚本访问 Cookie
45. URL 任意重定向漏洞
风险等级:中
检测方法:
漏洞描述:
网络钓鱼是一种社会工程技巧,其中攻击者伪装成受害者可能会与其进行业务往来的合法实体,以便提示用户透露某些机密信息(往往是认证凭证),而攻击者以后可以利用这些信息。网络钓鱼在本质上是一种信息收集形式,或者说是对信息的“渔猎”。
某个 HTTP 参数被发现保存有 URL 值,并导致 Web 应用程序将请求重定向至指定的 URL。通过将 URL
值修改为指向恶意站点,攻击者可以成功发起网络钓鱼诈骗并窃取用户凭证。
由于修改的链接中的服务器名称与原始站点完全相同,这样攻击者的网络钓鱼企图就披上了更容易让人轻信的外衣。
修复建议:
[1] 设置重定向白名单,限制重定向范围。
46. 不安全的数据传输(从 HTTP 传输到 HTTPS)
风险等级:中
检测方法:
漏洞描述:
将 HTTP 页面中的表单传输到 HTTPS,不能保证数据传输的安全。因为当 HTTP 页面传输时,可能受到中间人攻击,从而使本应通过 HTTPS
传输的敏感数据泄露。
修复建议:
[1] 包含需要传输敏感信息的表单的页面应使用 HTTPS,即应先跳转到 HTTPS 页面,再在 HTTPS 页面中提交表单,而不能在 HTTP
页面直接提交表单到 HTTPS 页面。
47. http 参数污染
风险等级:高
检测方法:
漏洞描述:
http 参数污染漏洞被定义为通过注入查询字符串、分隔符来达到覆盖或添加 HTTP GET / POST 参数的目的。由于 HTTP
协议是允许客户端提交同名的参数,而 Web 服务器对同样名称的参数出现多次的处理方式不一样,若程序未对同名参数进行适当地处理,则会存在该漏洞。
例如在参数名为 test
的字段注入了字符串”123&test=456”,服务器接收到该数据后,处理的数据可能是“123”,也可能是“456”,成功利用此漏洞有可能改变原本 web
应用程序执行的本意从而造成一定的安全风险。
修复建议:
[1] 对用户的输入进行严格过滤,包括所有的参数,URL 和 HTTP 头部等所有需要传给服务器的数据。
包括但不限于以下字符
( ) [ ] < > , . ; : ‘ ” # % + & – _ = / * @
[2] 对出现同名参数情况进行处理
48. HTTP Host 头攻击
风险等级:中
检测方法:
漏洞描述:
由于 HTTP Host 头的值可由攻击者控制,开发人员如果信任 HTTP Host
头的值并使用它来生成链接,导入脚本,甚至生成密码重置链接的值,将会可能导致生成的链接地址不是正确的地址,而攻击者设定的地址,从而使用户访问了恶意网站。
修复建议:
[1] 通过 SERVER_NAME 获取域名,禁止通过 host header 来获取域名
[2] 禁用 X-Forwarded-Host 头部
[3] 如果必须通过 host header 来获取域名,需设置 Host 白名单,以确保 HTTP Host 头的值可信。
49. 心脏出血漏洞
风险等级:高
检测方法:
漏洞描述:
Heartbleed 漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在
memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查。攻击者可以追踪 OpenSSL 所分配的 64KB
缓存、将超出必要范围的字节信息复制到缓存当中再返回缓存内容,这样一来受害者的内存内容就会以每次 64KB 的速度进行泄露。
修复建议:
[1] 升级 OpenSSL 至最新版本
50. CRLF 注入漏洞
风险等级:高
检测方法:
漏洞描述:
HTTP 头的结构是“键:值”,其中每行是由 CRLF 组合分开的。如果对用户的输入没有把 CR(0x13) 和 LF(0x10)
进行过滤或者转义,则可能修改 HTTP 头的结构。在响应数据中分割出来一行新的 HTTP 头,该漏洞可导致页面劫持、修改 HTML
代码从而可能导致存在跨站脚本漏洞或会话固话攻击。
修复建议:
[1] 对用户输入的 CR(0x13) 和 LF(0x10) 进行过滤和/或对页面输出进行转义
51. 服务端请求伪造攻击漏洞(SSRF)
风险等级:高
检测方法:
漏洞描述:
很多 web 应用都提供了从其他的服务器上获取数据的功能。使用用户指定的 URL,web
应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的 web
应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)。如果应用程序对用户提供的
URL 和远端服务器返回的信息没有进行合适的验证和过滤,就可能存在这种服务端请求伪造的缺陷。
可参考:访问的文章审核中... - FreeBuf网络安全行业门户
修复建议:
[1] 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果 web
应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
[2] 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
[3] 限制请求的端口为 http 常用的端口,比如,80,443,8080,8090。
[4] 根据实际情况针对内网 ip 设置黑名单或白名单。避免应用被用来获取获取内网数据,攻击内网。
[5] 禁用不需要的协议。仅仅允许 http 和 https 请求。可以防止类似于 file:///,gopher://, 等引起的问题。
52. HTTP.sys 远程代码执行漏洞
风险等级:高
检测方法:
漏洞描述:
远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。
成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。
修复建议:
[1] 微软已发布补丁 MS15-034,补丁下载漏洞地址:
MSRC - Microsoft Security Response Center
53. 长密码拒绝服务攻击漏洞
风险等级:中
检测方法:
漏洞描述:
当用户输入的密码长度过长,比如 100000 字符,服务器查询该密码是否存在时,会花费非常长的时间,可能达 20
秒以上,从而占用服务器的资源。如果恶意用户同时发送多个长密码请求,可导致服务器无法为其他正常用户提供服务,从而实现拒绝服务攻击。
修复建议:
[1] 对于密码长度过长的情况,如 50 个字符以上,直接拒绝登录,不执行数据库查询操作。
54. Apache 样例文件泄露
风险等级:高
检测方法:在链接的根目录中添加 examples 或者 docs 目录进行访问判断!
漏洞描述:
apache 一些样例文件没有删除,可能存在 cookie、session 伪造,进行后台登录操作。
修复建议:
[1] 删除样例文件
[2] 对 apache 中 web.xml 进行相关设置
55. 测试页面泄漏在外网
风险等级:低
检测方法:这里可以使用后台目录扫描工具进行目录扫描,如御剑、test404、M7lrv 后台扫描工具、Pker 等!
漏洞描述:
一些测试页面泄漏到外网,导致外界误传公司被黑客入侵,影响公司声誉。
修复建议:
删除测试页面以及无用文件,例如 test.cgi,phpinfo.php,info.pho, .svn/entries 等。
56. 未授权访问
风险等级:高
检测方法:如果你怀疑那个页面或者那个链接存在未授权访问,你可以将该链接在另一个浏览器中打开,看是否能正常访问!
漏洞描述:
由于没有对相关敏感页面进行访问权限的检查,导致攻击者可未授权访问,从而获取敏感信息及进行未授权操作等!
修复建议:
对相关页面进行严格的访问权限的控制以及对访问角色进行权限检查!
57. 越权访问
风险等级:高
检测方法:这里主要是通过更改敏感参数进行判断,若你访问你自己的个人信息时,链接中某一个参数就是你的登录名或者一个
ID,此时就可以通过修改该参数进行简单判断!
漏洞描述:
由于没有对用户访问角色的权限进行严格的检查及限制,导致当前账号可对其他账号进行相关操作,如查看、修改等!
修复建议:
对用户访问角色的权限进行严格的检查及限制!
58. 命令执行
风险等级:高
检测方法:
漏洞描述:
命令执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令的代码中,对恶意构造的语句,可被用来执行任意命令。黑客可在服务器上执行任意命令,写入后门,从而入侵服务器,获取服务器的管理员权限,危害巨大。
修复建议:
严格过滤用户输入的数据,禁止执行非预期系统命令!
59. LDAP 注入
风险等级:
检测方法:
漏洞描述:
由于 Web 应用程序没有对用户提供的输入进行适当过滤和检查,攻击者便有可能修改 LDAP 语句的结构,并且以(例如:数据库服务器、Web
应用程序服务器、Web 服务器)的权限执行任意命令,许可权可能会允许查询、修改或除去 LDAP 树状构造内任何数据。
修复建议:
对用户的输入进行严格的过滤及检查,并且对类型也进行检查!
60. CRLF HTTP 头部注入漏洞
风险等级:高
检测方法:
漏洞描述:
CRLF 是“回车 + 换行”(\r\n)的简称。在 HTTP 协议中,HTTP Header 与 HTTP Body 是用两个 CRLF
符号进行分隔的,浏览器根据这两个 CRLF 符号来获取 HTTP 内容并显示。因此,一旦攻击者能够控制 HTTP
消息头中的字符,注入一些恶意的换行,就能注入一些会话 Cookie 或者 HTML 代码。
修复建议:
过滤 \r 、\n 之类的换行符,避免输入的数据污染到其他 HTTP 消息头。
61. URL 跳转漏洞
风险等级:
检测方法:
漏洞描述:
Web 程序直接跳转到参数中的 URL ,或页面引入任意的开发者 URL,被攻击者利用可实施钓鱼攻击等操作 。
修复建议:
在控制页面转向的地方校验传入的 URL 是否为可信域名。
62. Crossdomain.xml 配置不当
风险等级:
检测方法:
漏洞描述:
网站根目录下的 crossdomain.xml 文件指明了远程 Flash 是否可以加载当前网站的资源(图片、网页内容、Flash
等)。如果配置不当,可能导致遭受跨站请求伪造(CSRF)攻击。
修复建议:
对于不需要从外部加载资源的网站,在 crossdomain.xml 文件中更改 allow-access-from 的 domain 属性为域名白名单。
63. 网站敏感压缩文件泄露
风险等级:
检测方法:
漏洞描述:
误将网站备份文件或是敏感信息文件存放在某个网站目录下,外部黑客可通过暴力破解文件名等方法下载该备份文件,导致网站敏感信息泄露。
修复建议:
[1] 不要在网站目录下存放网站备份文件或敏感信息的文件。
[2] 如需存放该类文件,请将文件名命名为难以猜解的字符串。
64. 敏感信息泄露
风险等级:
检测方法:
漏洞描述:
在页面中或者返回的响应包中泄露了敏感信息,通过这些信息,攻击者可进一步渗透。
修复建议:
[1] 如果是探针或测试页面等无用的程序建议删除,或者修改不易被猜到的名字。
[2] 禁用泄露敏感信息的页面或应用。
[3] 对相关敏感信息进行模糊化处理,在服务器端进行!
[4] 对服务器端返回的数据进行严格的检查,满足查询数据与页面显示数据一致,切勿返回多于的数据!
65. 任意文件下载
风险等级:
检测方法:
漏洞描述:
文件下载处由于未对下载路径进行过滤,利用路径回溯符../跳出程序本身的限制目录实现来下载任意文件,如下载系统密码文件等!
修复建议:
对下载路径进行过滤,如下载前对传入的参数进行过滤,并且对下载文件类型进行检查,是否是允许下载的类型,另外禁止使用回溯符../ !
66. weblogic SSRF 服务器请求伪造
风险等级:
检测方法:
漏洞描述:
目标存在 weblogic SSRF 服务器请求伪造漏洞。WebLogic 是用于开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的
Java 应用服务器。SSRF(Server-Side Request Forgery:服务器端请求伪造)
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF
攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。Weblogic
中间件默认带有“UDDI 目录浏览器”且为未授权访问,通过该应用,可进行无回显的 SSRF
请求。攻击者可利用该漏洞对企业内网进行大规模扫描,了解内网结构,并可能结合内网漏洞直接获取服务器权限。
修复建议:
[1] 删除 uddiexplorer 文件夹
[2] 限制 uddiexplorer 应用只能内网访问
67. 目标站点存在网马
风险等级:
检测方法:
漏洞描述:
经渗透测试发现目标站点存在有 webshell,攻击者可进行远程连接操作,进行恶意操作!
修复建议:
[1] 删除可疑文件,并进行本地文件漏洞扫描排查是否还存在有其他木马!
[2] 使用相关手段发现并及时修复已存在的漏洞!
68. Apache Struts2 远程代码执行漏洞(S2-019)
风险等级:
检测方法:
漏洞描述:
Apache Struts2 的“Dynamic Method
Invocation”机制是默认开启的,仅提醒用户如果可能的情况下关闭此机制,如果未关闭此机制将导致远程代码执行漏洞,远程攻击者可利用此漏洞在受影响应用上下文中执行任意代码。
修复建议:
[2] 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载!
[2] 或者手工设置 struts.xml 文件
69. Apache Struts2 远程代码执行漏洞(S2-037)
风险等级:
检测方法:
漏洞描述:
Apache Struts2 在使用 REST 插件时,攻击者可以绕过动态方法执行的限制,调用恶意表达式执行远程代码。
修复建议:
建议用户到官方获取最新补丁或者最新版本程序!
70. Apache Struts2 DevMode 远程代码执行漏洞
风险等级:
检测方法:
漏洞描述:
为了便于开发人员调试程序,Struts2 提供了一个 devMode 模式,可以方便查看程序错误以及日志等信息。 当 Struts2 中的 devMode
模式设置为 true 时,存在严重远程代码执行漏洞。如果 WebService
启动权限为最高权限时,可远程执行任意命令,包括关机、建立新用户、以及删除服务器上所有文件等等。
修复建议:
[1] 建议用户到官方获取最新补丁或者最新版本程序!
[2] 或者将 struts.properties 中的 devMode 设置为 false,或是在 struts.xml
中添加如下代码:。
71. Apache Struts2 远程代码执行漏洞(S2-045)
风险等级:
检测方法:
漏洞描述:
Apache Struts2 的 Jakarta Multipart parser 插件存在远程代码执行漏洞,漏洞编号为
CVE-2017-5638。攻击者可以在使用该插件上传文件时,修改 HTTP 请求头中的 Content-Type 值来触发该漏洞,导致远程执行代码。
修复建议:
检测方式查看 web 目录下/WEB-INF/lib/目录下的 struts-core.x.x.jar ,如果这个版本在 Struts2.3.5 到
Struts2.3.31 以及 Struts2.5 到 Struts2.5.10 之间则存在漏洞!
[1] 建议用户到官方获取最新补丁或者最新版本程序!
[2] 更新至 Strusts2.3.32 或者 Strusts2.5.10.1,或使用第三方的防护设备进行防护。
[3] 临时解决方案:删除 commons-fileupload-x.x.x.jar 文件(会造成上传功能不可用)。
[4] 修改 WEB-INF/classes 目录下的配置
在 WEB-INF/classes 目录下的 struts.xml 中的 struts 标签下添加
<constantname=”struts.custom.i18n.resources” value=”global” />;
在 WEB-INF/classes/目录下添加 global.properties,文件内容如下:
struts.messages.upload.error.InvalidContentTypeException=1。
72. Apache Struts2 远程代码执行漏洞(S2-033)
风险等级:
检测方法:
漏洞描述:
Apache Struts2 在开启动态方法调用(Dynamic Method Invocation)的情况下,攻击者使用 REST
插件调用恶意表达式可以远程执行代码。
修复建议:
[1] 用户到官方获取最新补丁或者最新版本程序!
[2] 或者在允许的情况下禁用动态方法调用(Dynamic Method Invocation),修改 Struts2 的配置文件 struts.xml,将
struts.enable.DynamicMethodInvocation 设置为”false”。
73. 目标 URL 存在 http host 头攻击漏洞
风险等级:
检测方法:
漏洞描述:
为了方便的获得网站域名,开发人员一般依赖于 HTTP Host header,但是这个 header 是不可信赖的,如果应用程序没有对 host
header 值进行处理,就有可能造成恶意代码的传入。
修复建议:
web 应用程序应该使用 SERVER_NAME 而不是 host header。
在 Apache 和 Nginx 里可以通过设置一个虚拟机来记录所有的非法 host header。在 Nginx 里还可以通过指定一个
SERVER_NAME 名单,Apache 也可以通过指定一个 SERVER_NAME 名单并开启 UseCanonicalName 选项。
74. 登录绕过漏洞
风险等级:
检测方法:
漏洞描述:
由于对登录的账号及口令校验存在逻辑缺陷,或再次使用服务器端返回的相关参数作为最终登录凭证,导致可绕过登录限制,如服务器返回一个 flag
参数作为登录是否成功的标准,但是由于代码最后登录是否成功是通过获取这个 flag 参数来作为最终的验证,导致攻击者通过修改 flag
参数即可绕过登录的限制!
修复建议:
修改验证逻辑,如是否登录成功服务器端返回一个参数,但是到此就是最终验证,不需要再对返回的参数进行使用并作为登录是否成功的最终判断依据!
75. 短信/邮件轰炸
风险等级:
检测方法:
漏洞描述:
由于没有对短信或者邮件发送次数进行限制,导致可无限次发送短信或邮件给用户,从而造成短信轰炸,进而可能被大量用户投诉,从而影响公司声誉!
修复建议:
对发送短信或邮件的次数进行限制,如 1 分钟只能发送 1 次短信或邮件,并且需要在服务器进行限制!
76. 业务逻辑漏洞
风险等级:
检测方法:
漏洞描述:
逻辑错误漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,一般出现在任意密码修改(没有旧密码验证)、越权访问、密码找回、交易支付金额。
修复建议:
应用系统必须确保所有输入和传递的时候必须经过有效验证,不仅仅是在刚进入应用系统的时候进行数据验证。
应用程序应该有检查功能,避免攻击者可以通过预测、操作参数或者利用隐藏的功能(例如调试)来阻碍操作或者改变业务逻辑工作流程。
应用需要对输入进行检查,不允许用户直接提交未经过验证的数据到服务器,因为这些数据来不可编辑的控件,或者用户没有前端提交的权限,任何可编辑控件必须有阻止恶意的写入或修改的功能。
开发应用的时候需要注意时间处理问题。攻击者可以简单地通过了解不同的处理时间、结果来获取一些参数,所以虽然他们提交的结果也在相同的时间,符合规则,但却添加了其他步骤或者处理。
应用程序需要有阻止攻击者通过延长允许的交易时间的功能,这种情况可以在操作超过规定的时间后通过取消或者重置交易。
应用程序需要能够过滤检测的业务逻辑:当一个功能或者操作只允许被执行有限的几次
或者用户不再能够执行这个功能的时候,应用需要能够检测出来。为了阻止用户过多次的执行某个功能,
应用程序可以通过类似缓存这种机制来控制,或者使用不允许用户过多次执行功能的机制。
应有用户正确的按照业务流程来完成每一个步骤的检测机制,这样可以阻止黑客在业务流程中通过跳过、绕过、重复任何业务流程中的工序检查。开发这部分业务逻辑的时候应该测试一些无用或者误用的测试用例,当没有按照正确的顺序完成正确的步骤的时候,就不能成功完成业务流程。
77. CSRF 漏洞
风险等级:
检测方法:
漏洞描述:
CSRF 攻击,攻击者盗用你的身份,以你的名义发送恶意请求。CSRF
能够做的事情包括:以你的名义发送邮件、发消息、盗取你的账号、甚至于购买商品、虚拟货币转账…
修复建议:
CSRF 的防御可以从服务端和客户端两个方面着手,防御效果是从服务端着手效果比较好,现在一般的 CSRF 防御也都是在服务端进行。有以下三种方法:
- Cookie Hashing(所有的表单都包含同一个伪随机值)
- 验证码
- One-Time Tokens(不同的表单包含一个不同的伪随机值)
78. 登陆 IP 伪造
风险等级:低
检测方法:在登陆数据包中,http 头部添加 x-forwarded-for 头。如:x-forwarded-for: 8.8.8.8
漏洞描述:
可通过伪造 IP 登陆系统,系统日志下记录的 IP 不是真实的。
修复建议:
获取用户访问的真实 IP。也就是用 REMOTE_ADDR 来获取 IP。这个 IP 获取的是真实或者代理 IP。