搞安全的小伙纸面试的时候,面试官总是喜欢问一个问题,只有一个登录框你都能测试哪些漏洞?
通常大家测试的都是测试关键,为了有更好的测试效果,会提供给你用户名密码;但是一些比较重要的企业,而这个环境却是正式环境,里面存放着一些数据不希望被你看到的时候,是不会提供给给你登录账号的。
这个时候,考验你基础知识是否扎实的时刻来临了。
漏洞描述以及测试方法:
此漏洞通常存在用户登录页面,由于未统一返回的内容,即输入不存在的用户时会出现“用户名不存在”等字样,导致用户名的枚举
示例:
输入不存在的用户
输入正确的用户名
修复建议:建议对网站登录页面的判断回显信息修改为一致:用户名或密码错误。
漏洞描述及测试方法:
可以使用暴露出来的用户名以及密码进行试验登录,通常默认用户名密码为 admin admin 123456等等
示例:
通常很多厂商后台默认账户为“admin”,密码为"admin"或“123456”,大家可以通过暴力破解去尝试
某路由器交换机管理平台
修复建议:禁止使用弱口令,口令应满足一定的复杂度。(大小写字母+数字+特殊符号)。
漏洞描述及测试方法:
找到网站登录页面,尝试输入用用户名,不使用密码直接进行登录。若是不使用密码直接登录则存在空口令
示例:
暂无,这个确实没遇到过,但是感觉最新出来的Apache shiro cve-2020-17523 Apache shiro认证绕过挺像的
修复建议:判断输入密码是否为空,禁止空口令登录。
漏洞描述及测试方法:
通常存在于仅适用前端校验,可以通过关闭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加密传输方式,且存在校验码的时候,明文问题便不存在任何问题了)。
示例:
漏洞描述及测试方法:
通常登录框存在三种xss漏洞,登录前,登陆中,登录后;而这里指的是登录前,在用户名或密码处输入测试payload "/>,可查看源码按照实际情况来
示例:
漏洞示例代码:其实我觉得万能密码和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 密码输入:任意
示例:
漏洞描述及测试方法:
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认证存在缺陷,可越权登录他人账户。登录的过程中拦截数据请求,尝试修改cookie、uid等明显的参数
示例:
首先访问某达登录页面
此时用户为普通用户,登录后仅有一个功能
退出登录重新登陆,同时拦截数据包如下
尝试修改cookie为admin
发送数据包,功能出来了
修复建议:
正确的配置用户的权限信息,不要使用简单的cookie或session
以下为2021/5/12更新内容
漏洞描述及测试方法:
在得知他人的手机号码的时候,通过修改response返回值欺骗服务器进行重置密码
示例:
1.点击普通用户找回密码,输入用户名
2.修改返回数据值
3.完成第一次绕过,输入任意验证码,如法炮制
4.输入新的密码
5.输入用户名admin 密码 ******登录成功
修复建议:
正确的校验验证码,不要使用前端校验
漏洞描述及测试方法:
通常情况下的命令执行存在于路由器、交换机等设备中;看到command就试一下没毛病,区别于命令注入
示例:
1.访问某捷路由器web管理系统登录页面,如下图所示
2. 这里若是不输入正确的密码仅能执行show version命令,此处通过弱口令进行致命打稽
3.当然了我找到了一个不用密码就能执行任意命令的,但是我不写,诶,就是玩
修复方案:
与系统进行交互的时候注意封闭其他命令,禁用外部命令
2021-5-27
漏洞描述及测试方法:
未授权访问,是指本来需要登录才能访问的页面在未登录的情况下依然可以访问;在测试的过程中可以使用目录扫描进行探测,或者登录之后,删除掉cookie/session等或者直接使用隐私浏览器进行访问,若是依然可以访问页面,则是存在未授权访问漏洞
示例:
访问后路由器后台地址,不许输入用户名密码即可直接访问后台
修复建议:
常见的修复方法:在系统中,加入用户身份认证机制或者tonken验证,防止可被直接通过连接就可访问到用户的功能进行操作