【Web攻防之业务安全实战指南】第4章 登录认证模块测试
《Web攻防之业务安全实战指南》技术篇复现 4.1 暴力破解测试
《Web攻防之业务安全实战指南》技术篇复现 4.2 本地加密传输测试
《Web攻防之业务安全实战指南》技术篇复现 4.3.1 Session会话固定测试
《Web攻防之业务安全实战指南》技术篇复现 4.3.2 Seesion会话注销测试
《Web攻防之业务安全实战指南》技术篇复现 4.4 Cookie仿冒测试
《Web攻防之业务安全实战指南》技术篇复现 4.5 密文比对认证测试
《Web攻防之业务安全实战指南》技术篇复现 4.6 登录失败信息测试
4.1 暴力破解测试
4.1.1 测试原理和方法
暴力破解测试是指针对应用系统用户登录账号与密码进行的穷举测试,针对账号或密码进行逐一比较,直到找出正确的账号与密码。一般分为以下三种情况:·在已知账号的情况下,加载密码字典针对密码进行穷举测试;·在未知账号的情况下,加载账号字典,并结合密码字典进行穷举测试;·在未知账号和密码的情况下,利用账号字典和密码字典进行穷举测试。
4.1.2 测试过程
靶场:pikachu-暴力破解-基于表单的暴力破解
靶场下载链接:https://github.com/zhuifengshaonianhanlu/pikachu
URL:http://192.168.0.108/pikachu/vul/burteforce/bf_form.php
1. 设置用户名/密码:admin/admin,点击login,然后开启burp拦截数据包


2. 发送到Intruder模块,sniper模式,标记password变量

3. 导入top500.txt字典进行爆破
字典链接:https://github.com/TheKingOfDuck/fuzzDicts
.\fuzzDicts\passwordDict\top500.txt

4. 成功登录,爆破出密码:123456


4.1.3 修复建议
增加验证码,登录失败一次,验证码变换一次。
配置登录失败次数限制策略,如在同一用户尝试登录的情况下,5分钟内连续登录失败超过6次,则禁止此用户在3小时内登录系统。
在条件允许的情况下,增加手机接收短信验证码或邮箱接收邮件验证码,实现双因素认证的防暴力破解机制。
4.2 本地加密传输测试
4.2.1 测试原理和方法
本机加密传输测试是针对客户端与服务器的数据传输,查看数据是否采用SSL (Security Socket Layer,安全套接层)加密方式加密。
4.2.2 测试过程
1.使用Wireshark网络抓包工具对本地网卡进行数据捕获,访问要测试的HTTPS协议网站,并输入用户名及密码进行登录操作
URL:https://www.baidu.com/

2.在Wireshark工具捕获流中找到对应HTTPS测试网站并查看数据是否加密
Wireshark下载链接:

4.2.3 修复建议
在架设Web应用的服务器上部署有效的SSL证书服务。
4.3 Session测试
4.3.1 Session会话固定测试
4.3.1.1 测试原理和方法
Session是应用系统对浏览器客户端身份认证的属性标识,在用户退出应用系统时,应将客户端Session认证属性标识清空。如果未能清空客户端Session标识,在下次登录系统时,系统会重复利用该Session标识进行认证会话。攻击者可利用该漏洞生成固定Session会话,并诱骗用户利用攻击者生成的固定会话进行系统登录,从而导致用户会话认证被窃取。
4.3.1.2 测试过程
靶场:dvwa-login
靶场下载链接:
URL:http://192.168.0.108/dvwa
1.用户名/密码:admin/password,点击login,burp拦截
PHPSESSID=af17p9g9k427hgm8e56f043rd1


2.退出后重新登录,对比两次PHPSESSID,与上次登录PHPSESSID值相同
PHPSESSID=af17p9g9k427hgm8e56f043rd1


4.3.1.3 修复建议
在客户端登录系统时,应首先判断客户端是否提交浏览器的留存Session认证会话属性标识,客户端提交此信息至服务器时,应及时销毁浏览器留存的Session认证会话,并要求客户端浏览器重新生成Session认证会话属性标识。
4.3.2 Seesion会话注销测试
4.3.2.1 测试原理和方法
Session是应用系统对浏览器客户端身份认证的属性标识,在用户注销或退出应用系统时,系统应将客户端Session认证属性标识清空。如果未能清空Session认证会话,该认证会话将持续有效,此时攻击者获得该Session认证会话会导致用户权限被盗取。
4.3.2.2 测试过程
靶场:pikachu-CSRF-CSRF(get)
URL:http://192.168.0.108/pikachu/vul/csrf/csrfget/csrf_get_login.php
1.用户名:vince,密码:123456

2.burp拦截,浏览器刷新,并发送到Repeater模块
PHPSESSID=dg6iq75rost54u99541ttlis97

3.登录状态下重放请求包,返回200,可以查看个人信息

4.退出登录后重放授权访问请求,无法查看个人信息,系统解除退出后的用户Session授权


4.3.2.3 修复建议
在用户注销或退出应用系统时,服务器应及时销毁Session认证会话信息并清空客户端浏览器Session属性标识。
4.4 Cookie仿冒测试
4.4.1 测试原理和方法
服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在Cookie中,并发送至客户端存储。攻击者通过尝试修改Cookie中的身份标识,从而达到仿冒其他用户身份的目的,并拥有相关用户的所有权限。
4.4.2 测试过程
靶场:mutillidae-OWASP 2017-A2 - Broken Authentication and Session Management(身份验证与会话管理)-Authentication Bypass(身份验证绕过)-Via Cookies(通过Cookie)
靶场下载链接:https://github.com/webpwnized/mutillidae
URL:http://192.168.0.108/mutillidae/index.php?page=privilege-escalation.php
1.注册账号,账号密码都为ikun123,签名:I love singing, dancing, rapping, and basketball.


2.点击OWASP 2017
A2 - Broken Authentication and Session Management(身份验证与会话管理)
Authentication Bypass(身份验证绕过)
Via Cookies(通过Cookie)

3.burp拦截,浏览器刷新,修改uid=1

4.返回浏览器查看用户名已改变

5.点击admin,通过篡改uid身份标识改变登录系统人员身份信息

4.4.3 修复建议
建议对客户端标识的用户敏感信息数据,使用Session会话认证方式,避免被他人仿冒身份。
4.5 密文比对认证测试
4.5.1 测试原理和方法
在系统登录时密码加密流程一般是先将用户名和密码发送到服务器,服务器会把用户提交的密码经过Hash算法加密后和数据库中存储的加密值比对,如果加密值相同,则判定用户提交密码正确。但有些网站系统的流程是在前台浏览器客户端对密码进行Hash加密后传输给服务器并与数据库加密值进行对比,如果加密值相同,则判定用户提交密码正确。此流程会泄漏密码加密方式,导致出现安全隐患。
4.5.2 测试过程
靶场:4_5.zip
靶场下载链接:
gitee:
URL:http://192.168.0.108/4_5/4_5.html
1.使用Burp Suite工具抓包证实Web系统登录口令为MD5加密传输

2.分析前端代码判断密码是md5加密

3.在Payload Processing中配置密码处理类型


4.通过暴力破解测试得到返回长度不一样的包,显示登录成功

5.利用在线md5解密网站查询密码
https://www.somd5.com/

4.5.3 修复建议
将密码加密过程及密文比对过程放置在服务器后台执行。发送用户名和密码到服务器后台,后台对用户提交的密码经过MD5算法加密后和数据库中存储的MD5密码值进行比对,如果加密值相同,则允许用户登录。
4.6 登录失败信息测试
4.6.1 测试原理和方法
在用户登录系统失败时,系统会在页面显示用户登录的失败信息,假如提交账号在系统中不存在,系统提示“用户名不存在”、“账号不存在”等明确信息;假如提交账号在系统中存在,则系统提示“密码/口令错误”等间接提示信息。攻击者可根据此类登录失败提示信息来判断当前登录账号是否在系统中存在,从而进行有针对性的暴力破解口令测试。
4.6.2 测试过程
靶场:pikachu-敏感信息泄露- IcanseeyourABC
URL:http://192.168.0.108/pikachu/vul/infoleak/findabc.php
1.用户名test,密码test,系统返回信息“您输入的账号错误”,系统间接提示登录账号不存在

2.用户名lili,密码lili,系统返回信息“您输入的密码错误“,系统间接提示登录账号存在,密码错误

3.因为系统返回信息“您输入的账号错误”“您输入的密码错误“长度一样,无法通过看返回包长度判断爆破结果,参考以下文章利用正则匹配用户名枚举
https://blog.csdn.net/aixioxiaoxaio/article/details/114315174
'您输入的密码错误'.encode('utf-8')
\xe6\x82\xa8\xe8\xbe\x93\xe5\x85\xa5\xe7\x9a\x84\xe5\xaf\x86\xe7\xa0\x81\xe9\x94\x99\xe8\xaf\xaf


4.枚举出用户名lili


5.将用户名设置为lili,爆破密码123456


4.6.3 修复建议
对系统登录失败提示语句表达内容进行统一的模糊描述,从而提高攻击者对登录系统用户名及密码的可猜测难度,如“登录账号或密码错误”、“系统登录失败”等。

