最近在学安全测试,于是就把前段时间的笔记拿来整理一下,巩固下基础。以下是常见的安全漏洞。
一、登录逻辑中的漏洞
-
弱密码
检查网站是否可以类似“123456”这样的弱密码,如果存在弱密码漏洞,则可以收集一些常见弱密码,通过暴力破解的方式登录系统。 -
登录信息模糊提示
主要体现在登录失败时应提示“用户名或密码错误”,而不是精确提示“用户名错误”“密码错误” -
登录失败次数限制
登录失败后需要自动刷新验证码;达到一定失败次数后需要限制登录(防止爆破操作) -
session值检查
登入登出前后,session值应该发生变化
二、验证码安全
- 登录失败后验证码应该自动刷新
- 检查超过有效时限和已经使用过的验证码是否过期
- 使用图形验证码
- 验证码和用户名及密码放到一起校验。如果先校验验证码,可以通过修改请求中的flag等标识欺骗服务器
- 验证码和用户名及密码均错误时,应该仅提示“验证码错误”
三、目录遍历
- 测试方式
在url后输入 …/…/…/…/,查看是否可以进入配置文件目录,如果可以,则存在安全漏洞
四、XSS跨站脚本攻击漏洞
-
漏洞原理
-攻击者往web页面中插入恶意的script代码,当用户浏览该页面时,插入的script代码会被执行,从而达到了攻击目的。 -
分类
1)存储型XSS
指修改系统提交的文本框中的数据,并将其保存到数据库。当页面再次加载时,页面或js会解析这份数据,执行脚本。2)反射型XSS
指修改GET请求中的参数,把正常的参数改为带有攻击脚本的参数,页面在处理请求后可能会对参数进行解析,从而执行脚本。 -
举例
在输入框中输入
<script>alert(1)</script>
提交请求,页面再次加载这个值时,如果有弹框,说明存在XSS漏洞
五、sql注入
- 漏洞原理
将sql命令插入到web表单中进行提交,达到欺骗服务器执行恶意sql的目的 - 举例
有一个查询用户的功能,我只有查询部分用户的权限,但是我想查询其它用户的信息。那么这个时候可以构造一个sql语句到达查询所有用户信息的目的。我们可以猜测正常查询的sql语句为
select * from table where username='xxx'
现在可以构造一个这样的sql
select * from table where username='xxx' or '1'='1'
‘1’=‘1’得到的值是true,所以这条sql语句其实执行的是查询全部操作,那么应该怎么输入呢?将原来的输入 xxx 替换为 xxx’ or ‘1’='1,这个语句就算构造成功了。
六、文件上传漏洞
- 漏洞描述
有些系统对上传的文件的后缀名没有校验,或者服务器存在执行文件中代码的漏洞,攻击者可以上传shell脚本或带有shell脚本的图片,使脚本被服务器执行,达到攻击目的
七、文件下载漏洞
- 漏洞描述
查看文件下载的链接,如果链接中直接显示了文件名,如 http://xxx/xxx/filename=abc,可以修改文件名 abc 为其它配置文件,如…/…/WEB-INF/web.xml
八、敏感信息泄露
- 测试方式
按F12打开控制台,检查页面源代码及注释中是否有账号密码、运维信息等敏感信息
九、拒绝服务漏洞
- 漏洞原理
由于代码设计的原因,服务器对数据或逻辑的处理需要花费较多的资源和时间,导致服务时间延长或服务不可用。 - 测试方法
利用长密码进行攻击,在密码输入框中超长密码(如1000000个字符),如果造成了服务不可用,说明存在漏洞
十、Cookie中包含敏感信息
- 测试方法
按F12查看Cookie,检查里面是否包含敏感信息
十一、CSRF跨站请求伪造
-
漏洞原理
挟持已登录的用户在web应用程序上执行非本意的操作 -
测试方式
拦截请求,修改请求中的referer值并释放,如果可以正常访问系统,说明存在CSRF漏洞
十二、Http响应分割攻击
- 漏洞原理
利用回车(%0d)和换行符(%0a),改变HTTP请求的结构
十三、水平越权
- 漏洞原理
通过拦截请求,修改id等操作,访问其它用户的数据
十四、垂直越权
- 漏洞原理
通过拦截请求,修改id等操作,访问当前用户没有权限访问的地址
十五、JWT Token信息
JWT生成的Token由三部分组成:header.payload.signature。
通过修改payload中的信息,判断程序是否对Token信息存在校验