随着互联网时代的蓬勃发展,基于Web环境下的应用系统、应用软件也得到了越来越广泛的使用。
目前,很多企业的业务发展都依赖于互联网,比如,网上银行、网络购物、网络游戏等。但,由于很多恶意攻击者想通过截获他人信息去谋取利益,因此,会对Web服务器进行攻击。攻击大方式也非常多,并且安全问题防不剩防;
以下对常见的一些安全测试漏洞,进行分享;
1、跨站脚本攻击(CSS or XSS, Cross Site Scripting)
2、SQL注入攻击(SQL injection)
3、远程命令执行(Code execution)
4、目录遍历(Directory traversal)
5、文件包含(File inclusion)
6、脚本代码暴露(Script source code disclosure)
7、Http请求头的额外的回车换行符注入(CRLF injection/HTTP response splitting)
8、跨帧脚本攻击(Cross Frame Scripting)
9、PHP代码注入(PHP code injection)
10、XPath injection
11、Cookie篡改(Cookie manipulation)
12、URL重定向(URL redirection)
13、路径篡改
14、反序列化漏洞
15、关键信息加密:如密码;不但检查前端加密、还要传输过程中加密、存储地方也要加密
16、所有对外提供的rest端口都要进行安全校验
17、垂直权限和水平权限漏洞
等;
在测试控台时,需要时刻考虑各种安全问题;以下会以一些具体场景,来考虑不同安全问题;
跨站脚本攻击(CSS or XSS)
XSS是一种存在Web应用中,在所有的页面表单,都需要进行xss验证,输入如<script>alert(document.cookie);</script>,会触发脚本,如
SQL注入攻击(SQL injection)
控制台提供了一些sql验证功能,如sql查询语句,设计测试用例时,一定要考虑sql注入问题;如输入SELECT count(*)
FROM users
WHERE username='a' or 'a'='a' AND password='a' or 'a'='a' 开发时,也要考虑到;
跨站脚本攻击(CSRF)
1、cookie(储存在用户本地终端上的数据)
服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器。
2、session(会话)
a、代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。
b、cookie中存放着一个sessionID。请求时会发送这个ID。
c、session因为请求(request对象)而产生。
d、session是一个容器,可以存放会话过程中的任何对象。
e、session的创建和使用总在服务端,而浏览器从来都没得到过session对象。
f、Session 是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。
3、token(“令牌”)
是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)。目前CSRF漏洞主要靠token解决
关键信息加密
控制台提供所有关键信息需要加密,如密码相关的,不但要看控制台,还需要BurpSuit监控请求过程,在传输过程中,所有关键信息是否加密; 在查看配置文件,密码是否加密过的
目录遍历(Directory traversal)
目录遍历漏洞原理比较简单,就是程序在实现上没有充分过滤用户输入的…/之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。这里的目录跳转符可以是…/,也可是…/的ASCII编码或者是unicode编码等。
在web控制台页面上,遇到遍历目录文件时,一定要注意文件权限,不允许遍历所有文件目录;
路径篡改
控制台上,所有需要应用上传、下载时;需要考虑是否存在路径篡改漏洞;测试验证,可以通过BurpSuite来抓取请求过程的传输信息,把文档上传到任意目录;或下载到服务器上任意信息
反序列化漏洞
序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。
Java 序列化是指把 Java 对象转换为字节序列的过程,便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。
测试用例太大,上传不了,见 <<关于东方通web中间件console存在命令执行漏洞的情况通报.zip>>
访问日志(任意路径写入)
访问日志可以自定义日志文件名和文件后缀。在修改文件中,利用../可以对文件进行路径穿越,可以使日志文件部署至 web 可访问路径下,并且在日志格式处利用%{X-Forwarded-For}i 对 xff 进行记录 ;
修改方法:1、对相关参数进行过滤,依次过滤“.”、“..”、“/”、“\”等字符。 2、对 xff 内容进行过滤
水平权限和垂直权限漏洞
水平权限漏洞是指Web应用程序接收到用户请求时,没有判断数据的所属人,或者在判断数据所属人时是从用户提交的参数中获取了userid,导致攻击者可以自行修改userid修改不属于自己的数据。
漏洞示例:
XXX/getAddress?id=1
如上,攻击者修改addressId即可得到他人的address信息。开发容易习惯性的在生成CRUD(增查改删)表单(或AJAX请求)的时候根据认证过的用户身份来找出其有权限的被操作对象的id来提供入口,然后让用户提交请求,并根据这个id来操作相关 对象。在处理CRUD请求时,都天真地默认只有有权限的用户才知道这个入口,进而才能操作相关对象,因此就不再校验权限了。可悲剧的是大多数对象的ID都被设置为自增整型,所以攻击者只要对相关id加1、减1、直至遍历,就可以操作其他用户所关联的对象了。(修改方法,加token就可以)
垂直权限漏洞是指Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜到了其他页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
想要模拟测试:见http://168.1.5.59:8080/browse/ITAIT-3856?filter=-3
修复方案:
只需要对url资源进行权限验证即可。