通常存在于仅适用前端校验,可以通过关闭js特效或者是伪造responsed的code值进行绕过
示例:
Apache shiro cve-2020-17523 Apache shiro较新的登录认证绕过,大概的方式就是使用空字符绕过
www.xxx.com/admin/%20/
www.xxx.com/admin/%2e/
示例
用户名密码一顿瞎写
点击登陆按钮同时使用抓包工具进行数据包拦截
将数据包返回至当前页面,修改code值
登录成功
修复建议:
不使用前端校验,严格校验用户的数据
存在暴力破解风险
漏洞描述及测试方法:
若网站不存在验证码,或者不设置页面重定向跳转且密码为明文或弱加密,便可尝试暴力破解攻击
示例:
某防火墙设备登录存在明文传输且无验证码措施
修复建议:
条件允许的情况下设置验证码环节
使用密码加密策略
进行页面302重定向跳转,防止自动化攻击
图形验证码不失效
漏洞描述及测试方法:
通常存在于用户的提交数据页面、登录框等;可以尝试特权码0000这种进行绕过测试,或者干脆不填验证码,或者抓取数据包删除验证码字段、放置repeter模块进行数据重放等进行测试
示例:
此登录功能时存在图形验证码的,在输入了正确的图形验证码之后进行数据重放,发现图形验证码没有做到及时失效
修复建议:
1、系统在开发时注意验证识别后销毁session中的验证码。
2、限制用户提交的验证码不能为空
3、判断提交的验证码与服务器上存储的是否一致
短信验证码绕过
漏洞描述及测试方法:
1.验证码为空进行尝试
2.尝试特权验证码,如000000、111111等;
3.若系统校验为前台校验,可修改response返回值进行绕过
示例:
正确的逻辑应当是,短信验证码获取后,服务器校验短信验证码的来源以及有效性,使用一次后应该立即失效。但是我遇到的这个就是使用验证码登录后,注销用户登录后再一次使用验证码发现依然登陆成功,也就是短信验证码没有被删除
输入手机号码,而后获取验证码,随意输入即可
response返回如下
修改state值为200
修复建议:
1.若存在特权验证码,建议将其删除;
2.应用服务端应严格校验验证码参数是否为空,格式是否正确;
3.关键操作每提交一次请求,应发送新的短信验证码,并且不可继续使用旧的验证码。(后端校验!!!)
短信验证码可暴力破解
漏洞描述及测试方法:
验证码失效时间过长,或验证码低于四位
点击发送短信验证码,输入任意验证码,提交请求,使用burpsuite拦截请求,在intruder模块设置验证码参数为枚举变量,这时的payload类型为brute forcer(数字0-9,长度为6),对验证码进行暴力破解。
示例:
这里的短信验证码可被暴力破解,是因为并没有设置短信验证码使用错误几次后失效,故可被暴力破解
修复建议:
1.短信验证码不少于6位;
2.有效期不超过2分钟;
3.建议验证码错误三次失效。
短信验证码可预测
2021-5-31更新
漏洞描述及测试方法:
点击发送短信验证码,获取验证码的同时拦截数据,发送至repeater模块进行查看
示例:
1.点击登陆,选择手机登录,获取验证码的同时拦截数据,如下图所示
2. 拦截数据包,将response数据包返回至当前页面
3. 成功获取验证码,使用该验证码进行登录
4.使用该六位验证码进行登录,登录成功,查看手机验证码,一致
修复建议:
不要将验证码发送至客户端
短信炸弹
漏洞描述及测试方法:
页面存在发送短信的接口,点击发送短信并拦截数据包,多次重放数据观察返回效果,或发送一次验证码之后刷新当前页面观察是否可以继续发送验证码
示例:
点击获取验证码同时拦截数据包
使用burpsuite进行数据重放
修复建议:
一分钟内检测时间戳对用户的sessionid进行识别,一天之内不能超过数条
恶意锁定问题
漏洞描述及测试方法:
针对测试账户,不断输入错误的密码,直至将其锁定(一般会提示再输入几次就锁定账户,或直接锁定不提醒)
示例:
修复建议:
1.账户锁定之后应不能继续使用认证功能
2.认证功能防自动化操作,如添加图形验证码。
密码明文传输
漏洞描述及测试方法:
数据传输过程为明文传输,例如password字段未进行任何加密,通常存在于http传输协议(关于明文传输问题涉及两个问题,一个是当web使用http传输时,存在局域网嗅探的可能,由于http采取非加密传输,导致局域网内的嗅探数据是明文的;而当此网站是https传输的时候,由于数据是加密的,所以就不存在嗅探风险,但是当系统不存在验证码保护时,便成为了暴力破解风险。所以我理解为,当网站采取https加密传输方式,且存在校验码的时候,明文问题便不存在任何问题了)。
示例:
- 输入用户名密码
2. 使用burpsuite进行数据包拦截
修复建议:
优先使用加密方式对密码进行加密,https虽然是密文传输但是若是缺少验证码则会引发暴力破解风险。
反射型跨站脚本攻击
漏洞描述及测试方法:
通常登录框存在三种xss漏洞,登录前,登陆中,登录后;而这里指的是登录前,在用户名或密码处输入测试payload "/>,可查看源码按照实际情况来
示例:
- 登录窗口用户名处存在反射型XSS注入
- 点击登陆,成功弹出内容
修复建议:
1)输入过滤
2)输出编码转换
3)禁用外部csp策略
万能密码
漏洞示例代码:其实我觉得万能密码和sql注入应当区分开来,所以我就分开写了。
众所周知,登录处是一条查询操作,一些程序可能是没有注意到,就写成了
$result=mysqli\_query($link,'select \* from user'); #执行$sql命令,查询user列表行内容
$row=mysqli\_fetch\_assoc($result); #解析,通过用户名判断 里面行的内容密码是否正确
if ( $username===$row['username'] && $password === $row['password']) {
echo '登陆成功';
$\_SESSION['uid'] = $row['id'] ;
header("Location:3.php?id=".$row['id']);
} else{
echo '请重新填写账户或密码';
这个时候就可以构造特殊的sql语句进行截断,造成永真,这样的话就可以越过查询完成登录
漏洞描述及测试方法:
用户名输入: ‘ or 1=1 or ‘ 密码:任意
(2)Admin’ - -(或‘ or 1=1 or ‘ - -)(admin or 1=1 --) (MS SQL)(直接输入用户名,不进行密码验证)
(3)用户名输入:admin 密码输入:’ or ‘1’=’1 也可以
(4) 用户名输入:admin’ or ‘a’=‘a 密码输入:任意
(5) 用户名输入:‘ or 1=1 - -
(6) 用户名输入:admin‘ or 1=1 - - 密码输入:任意
(7) 用户名输入:1’or’1’=‘1’or’1’='1 密码输入:任意
示例:
- 这里的案例与上述的不太相同,他的查询多了一个判断动作,就是先判断用户名是否存在,存在的 时候才会进行下一步判断,判断用户名密码是否匹配,所以这里必须输入正确的用户名才行
admin’ or 1 #
- 点击登陆,成功登录
修复建议:
1)代码层次修复,过滤特殊字符
2)使用waf进行特殊字符拦截
sql注入
漏洞描述及测试方法:
sql注入就是程序在增删改查中未对用户输入的数据进行严格的校验,导致用户输入的恶意代码被当作是sql语句执行,造成注入;sql注入通常存在于用户输入的查询处、表单等地
示例:
暂无
大家可以去看一下博客,有很详细的讲解如何进行sql注入
https://blog.csdn.net/weixin_48421613/article/details/107488560
https://blog.csdn.net/weixin_48421613/article/details/107491562
https://blog.csdn.net/weixin_48421613/article/details/108298670
此处常常伴随着万能密码漏洞,故不做展示
修复建议:
1)代码层次修复,过滤特殊字符
2)使用waf进行特殊字符拦截
任意用户密码修改/重置
漏洞描述及测试方法:
任意用户密码重置漏洞区别于密码重置漏洞;任意用户重置通常是因为程序在修改用户密码时没有严格的对当前用户以及想要修改的用户身份进行判断,导致用户A通过修改特定参数达到重置用户B的密码的效果,相似与水平越权。
示例:
我遇到的密码重置漏洞,是忘记密码的时候会自动发送一条手机短信至绑定用户的手机中,而我做的则是在他发送之前拦截,而后修改手机号码,成功的接受到了手机短信,而后重置用户密码。
还有一种是手机短信验证成功后,重新设置密码时拦截数据包,通过修改类似username、userid等方式修改他人的账户密码。
修复建议:
严格的校验用户的身份信息
目录遍历
漏洞描述及测试方法:
目录遍历大多是因为中间件配置不当造成的,可以通过御剑等工具进行目录扫描,看看是否存在特殊目录可直接遍历任意文件
示例:
一般目录遍历都是输入…/…/这种,或者通过御剑进行目录扫描,有的时候会有一些路径可以遍历里面的目录内容
修复建议:
目前存在该漏洞的常见中间件为apache和IIS,以下列出其相关的修复方式:
1、 IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。
2、 Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消,保存退出,重启Apache。
3、 Nginx中默认不会开启目录浏览功能,若您发现当前已开启该功能,可以编辑nginx.conf文件,删除如下两行:autoindex on;autoindex_exact_size on;重启Nginx。(这种通用的可不是绿盟独有吧?)
敏感文件信息泄漏
漏洞描述及测试方法:
敏感信息泄露通常泄露了网站的绝对路径、用户的秘钥信息、等等。一些不正确的程序会将用户的用户名密码等信息存储于前台
示例:
这里我给大家带来了最近比较火的锐捷信息泄露,在源代码中泄露了用户名密码信息
泄露了用户名以及MD5加密的密码
当然了还有一些奇葩的,会直接弹出来测试用户名密码、甚至是用户名密码自动填充等等
我觉得只有这些才配成为信息泄露,剩下的泄露个什么加密方式、中间件版本信息啥的太边缘了,懒得测
修复建议:
设置统一的错误页面,隐藏源代码
框架漏洞
漏洞描述及测试方法:
开发框架存在的漏洞,如Struts2框架漏洞、shiro等(weblogic反序列化中间件的就不写了)这种没有代码审计,只能扫描器出马,或者明显一眼就能看出来是s2这种的,可以使用payload %{1+1} 进行测试
示例:
使用burp插件进行被动检测(关于shiro反序列化请看上篇文章)
shiro
修复方案:
建议及时更新struts2的版本到最新
SSO认证缺陷
漏洞描述及测试方法:
SSO认证存在缺陷,可越权登录他人账户。登录的过程中拦截数据请求,尝试修改cookie、uid等明显的参数
示例:
首先访问某达登录页面
此时用户为普通用户,登录后仅有一个功能
退出登录重新登陆,同时拦截数据包如下
尝试修改cookie为admin
发送数据包,功能出来了
修复建议:
正确的配置用户的权限信息,不要使用简单的cookie或session
以下为2021/5/12更新内容
密码重置漏洞
漏洞描述及测试方法:
在得知他人的手机号码的时候,通过修改response返回值欺骗服务器进行重置密码
示例:
1.点击普通用户找回密码,输入用户名
2.修改返回数据值
3.完成第一次绕过,输入任意验证码,如法炮制
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!