由于测试过程中很多系统我们能接触到的只有一个登陆界面,所以要充分挖掘漏洞,进行深入操作
登录 注册
万能密码绕过登录
存在 SQL 注入的情况下,有可能使用万能密码直接登录
admin' or '1'='1'--
admin' OR 4=4/*
"or "a"="a
' or''='
' or 1=1--
有超级多
登录口 SQL 注入
存在 SQL 注入的话直接注出账密
有些可以构造用户注入登录,比如熊海 cms 后台登录处存在 sql 注入
$login=$_POST['login'] ;
$user=$_POST['user'] ;
$password=$_POST['password'] ;
$checkbox=$_POST['checkbox'] ;
if ($login<>""){
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$users = mysql_fetch_array($result);
这里万能密码起不到作用,因为他是通过用户名去数据库查密码,再进行匹配,还有一种方法非常巧妙
user:1' union select 1,2,'test','c4ca4238a0b923820dcc509a6f75849b',5,6,7,8#
password:1
这是 mysql 的特性, 在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据,就相当于构造了一个虚拟账户,可以使用这个账户登录
未授权访问
后台未授权访问
列举几种找未授权访问的方法
•使用目录扫描工具,如 dirsearch 等扫描路径,有的可能存在目录遍历•查看 js 代码中登录成功后的跳转 url•使用 jsfind 找可疑 url•利用 web 程序已知漏洞如:druid 未授权的 urls、springboot mapping 等未授权漏洞界面找可疑的 url,访问查看是否存在未授权•有些可能在未授权进入后台一瞬间,重定到登录页面,这时可以利用 burp 抓包把跳转包 drop 掉
组件未授权
使用的组件可能会出现漏洞,常用的未授权漏洞,对于端口的收集也至关重要,可以提高漏洞利用面
•Redis 未授权访问漏洞•MongoDB 未授权访问漏洞•Jenkins 未授权访问漏洞•Memcached 未授权访问漏洞•JBOSS 未授权访问漏洞•VNC 未授权访问漏洞•Docker 未授权访问漏洞•ZooKeeper 未授权访问漏洞•Rsync 未授权访问漏洞•Atlassian Crowd 未授权访问漏洞•CouchDB 未授权访问漏洞•Elasticsearch 未授权访问漏洞•Hadoop 未授权访问漏洞•Jupyter Notebook 未授权访问漏洞
https://www.freebuf.com/vuls/265318.html
https://xz.aliyun.com/t/6103
其他功能点 (注册)(找回密码)
超长用户名注册
注册用户
admin+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++1
覆盖掉原来的 admin 用户,不常见
任意重置密码
此时客户端会发一个验证码包,这是随意输入验证码,发包,返回包
返回包错误的回显为 {“status”:0},将返回包的东西换成 {“status”:1},即可重置密码
用户枚举漏洞
找回密码界面,输入用户名抓包,查看返回包中泄露的信息
比如:TerraMaster TOS 用户枚举漏洞 CVE-2020-28185
输入用户名 admin 点击确定,查看 Burp 捕获的包,其中有一个请求包用于确认用户 admin 是否存在,存在则返回用户的邮箱信息
验证码问题
验证码不刷新
验证码不会自动刷新,导致一个验证码可以用很多次
验证码失效
验证码无效依然可爆破,在挖掘弱口令的时候,常常会遇到图片验证码无效的情况,此时只需要输入正确的账号密码和验证码,使用 burpsuite 依然可继续爆破
验证码前端返回
有的平台可能验证码校验在前端进行,错误的将后台的验证码返回到前端,导致攻击者可以抓取返回包中的验证码
验证码爆破
有的平台可能验证码比较简单只有几位数字,且没有对登录次数限制,存在爆破,使用 burp 抓包爆破
验证码可重复使用
实例:通过一分钟发送一次,可同时存在多条有效的验证码,通过爆破验证达到任意密码重置漏洞
验证码短信轰炸
对于验证码发送次数没有做限制,导致造成短时间内短信重发,使用 burp 抓取获取验证码的包放到 repeater 不断重放,更暴力点可以使用 intruder
验证码 OCR
对登录页面使用工具如 xcode 对验证码进行识别爆破用户账号密码
验证码验证逻辑错误
就是验证码可以修改接收者,将账户修改密码的验证码抓包修改为其他手机号,后台并没有做验证
万能验证码
可能存在万能验证码 0000 或者 9999,不常见
越权
过于简单的 cookie
如果用户登录后的 cookie 并不是随机的,而是如
cookie:Guest
这种过分简单的身份验证方法,可以导致越权,如果又存在用户注册,就可以注册一个普通用户然后越权为 admin
HTML 源码信息泄露
固定加密的账密
比如:中科网威 下一代防火墙控制系统存在账号密码泄露漏洞,攻击者通过前端获取密码的 Md5 后解密可获取完整密码登陆后台
fofa语句:body="Get_Verify_Info(hex_md5(user_string)."
F12 查看前端发现 admin 的 md5 加密密码
注释泄露信息
必须泄露的 url,或者敏感信息
ELSE
URL 重定向
经常出现在登录成功跳转中,可以修改参数跳转到任意页面,可用于钓鱼
比如:www.ocean.com?redir=aHR0cDovL2FkbWluLmFhYS5jb20=[1]
redir 后面的可能会进行 base64 编码
redirect、redirect_to、redirect_url、url、jump、jump_to、target、to、link、linkto、Domain
已知漏洞利用
因为一个 web 服务会用到很多组件,只要一个组件出现漏洞,这个密不透风的墙就被推到了,所以说资产收集是很重要的,收集足够多的信息,知己知彼百战百胜
有条件可以用一个扫描器扫描已知漏洞
•web 框架历史漏洞•cms 历史漏洞•oa 历史漏洞•使用 fofa、浏览器插件 wappalyzer 等收集资产,然后拿漏洞库的 poc 去尝试. 工具地址: https://www.wappalyzer.com/
弱口令
默认密码
很多设备都存在默认的帐号密码
特别是一些厂商设备弱口令很常见
常见设备弱口令整理[2]
https://wiki.bylibrary.cn/%E9%80%9F%E6%9F%A5%E8%A1%A8/%E5%B8%B8%E8%A7%81%E4%BA%A7%E5%93%81%E5%BC%B1%E5%8F%A3%E4%BB%A4/
一个简单的弱口令就让高昂的设备白给
测试账号未删除
比如 test,ceshi
拼音姓名字典
拼音姓名字典、用户名字典(如 root,system,admin1 等)+ 弱口令爆破,使用常规的拼音姓名字典 +123456,123,等弱口令进行爆破
如果网站有注册功能,破解用户密码的时候可以先去注册查看注册机制,如果可以使用 123456 等
密码那么就用拼音字典去爆破 123456 等弱口令,如果不行,可根据密码复杂程度制作密码,比如密码需求是字
母加数字的八位,就可以尝试 abcd1234 等符合密码规则的密码进行爆破
* 用户名枚举
使用两位字母和三位字母枚举,爆破 123456 等弱口令,成功爆破出一枚管理员后台账号密码,之前一个学校的后台弱口令没成功,SQL 注入后发现用户名全是姓名首字母,密码 1111
提示过于详细
当爆破的时候返回包显示密码不正确和用户名不存在的时候,我们可以搜集这些用户名进行专门的弱口令爆破,例如我爆破出存在多个存在的用户名,首先搜集这些用户名,然后设置 burpsuite,通过以下格式的方法进行爆破,例如:Lihua,lihua123 lihua lihua lihua lihua@123 lihua lihua1234 且注意网站下方是否有建立时间,如果时间是 2017 年建站的 ,我们的密码可以设置成 lihua@2017 lihua@2018 等进行专门针对用户名的爆破
域名做字典
截取子域名一部分作为字典挖掘弱口令
比如学校 wlzx(网络中心),tw(团委),jxzl(教学质量)等常见的系统用户名也是子域名
根据网站性质猜测用户名,比如教务类网站常有 teacher,student1 等用户名,或者企业缩写为用户名
搜集文章发布者姓名
搜集文章发布者姓名,在挖掘弱口令漏洞的时候,我常常会搜集文章发布者的姓名,网页上会有一些文章发布者的名字,我会把它搜集其他作为针对该网站爆破后台的用户名,并且整合前几种方法进行爆破。如果遇到中文名的管理员,我会把它转换为英文名,比如发布者: 李刚,我的字典里就会多 lilgang,lg,lig,lgang,这几个用户名,配合前几种姿势进行爆破。当然也遇到过比较奇葩的,直接就是中文为用户名
信息收集
不放过细节,qq 群号很重要
在以前遇到一个这样的案例,网站上面存在一个客服 qq 群号码,网站是需要公司用户登录的,验证码也无法爆破,我在了解了网站的业务之后,通过网站上的 qq 群号码加群,在群公告之中发现了默认密码是 xxx@xx1, 但是不知道用户名,就在群里问了一句我登录不进去了,然后私聊一些群里的其他用户获取了用户名是企业统一信用代码,而群名片就是企业名字。我通过中国企业统一代码查询网站得知了这些企业的用户名。然后通过该默认密码进入了后台继续深入挖掘。另外在 src 上也挖到过同类问题,直接通过企业用户名和企业信用代码就可以重置企业用户密码进而查看学生简历,总而言之,任何网页上的信息都可能作为用户名,需要细心搜集
注册账号搜寻信息
在网站登录口无法爆破的时候,可以耐下心来注册,通过后台搜索好友等方法搜集用户名。然后在了解注册密码复杂程度机制之后挨个挨个的去手工尝试用户名密码。比如搜集到了 lihao 用户名,就可以参照前面的方法手动尝试 lihao lihao123 等密码进行登录,此方法需要很大耐心,但是十分有效
安装文档
搜集该网站的安装文档,使用文档等寻找默认账号密码或者未打码(也可以通过百度,谷歌,百度网盘等搜集)
Fuzz
工号、学号、身份证号等 fuzz,当遇到用户名可能为工号的情况下,fuzz 一波数字工号 ,或者寻找有无工号泄露的地方,根据工号继续爆破
扩展
思考爆破时什么变量是可控的
当我们遇到一个段的测试任务时,可以使用一个简单的弱口令字典批量爆破整个段的服务。不管内网还是外网都实用,例如内网想爆破 ssh 的时候,可以使用
hydra -l root -Psmallpass.txt ssh:10.10.0.0/24
作者:OceanSec