严格来说,暴力破解不能算是web漏洞,但是很多时候我们又会在网站页面用到爆破,所以这里暂且把它归类到web漏洞里。这里会频繁用到BurpSuite,如果不会使用的话,请参考这里
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
…等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!
只在前端检查,导致存在绕过
首先随意输入一个用户名和密码,Burpsuite抓包
发现没有验证码及其他限制,可以肆意爆破,由于左上角的提示按钮给出了答案,下面处于演示需求做一个简单爆破。
爆出一个账密:admin:123456
首先明确两个概念:验证码一般被用来做什么,以及验证码是怎么认证的。
我们一般使用验证码作什么?
1:防止登录被暴力破解
2:防止机器人恶意操作
验证码认证流程
1:客户端请求登录页面,后台生成验证码
后台使用算法生成图片,并将图片响应给客户端
同时将算法生成的值全局赋值存到SESSION中
2:校验验证码
客户端将认证信息和验证码一同提交
后台对提交的验证码与SESSION里面的进行比较
3:客户端重新刷新页面,再次生成新的验证码
验证码算法中一般包含随机函数,所以每次刷新都会改变
客户端验证码是个啥
由于题目是“验证码绕过(on client)”,所以可以列出客户端验证码的常见问题:
使用前端js实验验证码(纸老虎)
将验证码在cookie中泄露,容易被获取
将验证码在前端源代码中泄露,容易被获取
首先先来试试这个页面,账密胡编,测试发现:
不输入验证码会报错
输错验证码会报错
正确输入验证码才会报:用户名或者密码错误
行吧,那就换一种个思路。首先需要明确BurpSuite是一个代理,是客户端浏览器和服务器之间的一个中间人,那么思路就可以是先输入正确的验证码跳出浏览器客户端,进入到BurpSuite中,再由Burpsuite篡改验证码,去验证服务器端是否有验证码验证。
方案1:修改验证码
发现服务器不管验证码错误
方案2:删除验证码
发现服务器不管验证码丢失,操作同上。大致可以判断,是如下逻辑:
我这里选择方案2,执行直接爆破,操作内容同基于表单的暴力破解
,不再赘述
验证码没有及时销毁,导致存在绕过
先来说一下服务端验证码常存在的问题
验证码在后台过期时间太长,导致验证码可以长期被使用
验证码校验不严格,逻辑出现问题
验证码以明文的形式出现在HTTP响应包里面
验证码设计的太过简单,存在规律,可以被猜到
来看一下目标站点,长这个样子
测试发现,验证码为空,验证码填写错误都会报错,正确填入验证码之后,BurpSuite更改验证码或者删除验证码都会出错,说明服务器和客户端都做了验证码校验,那么首先考虑验证码的可用时长问题。
BurpSuite中的包不要管了,停止截断,浏览器那边手动刷新验证码,获取一个新的验证码之后就不要再动浏览器了,拿着这个新的验证码写到BurpSuite中试着连发几个包,证明是否存在验证码有效期问题
通过更改账密发现服务器返回的是username or password is not exists~
说明验证码没有过期,那就爆破
再次爆破成功
实验的逻辑如下:
来看一下题目,token在这里是不能防爆破的,i see you here
先用BurpSuite重放试试,发现更改账密时,服务器的响应中有新的token,那其实可以拿每次失败后返回的新的token去做下一次测试,那这样是话是可以爆破的
1:把截断下来的内容发送到Intrude
模块,注意选择的攻击模式!
为了方便实验,这里只选择密码和token作为对象。
2:来到Options
模块,使用Grep - Extract 通过正则提取返回信息中的内容,如下图所示,先勾选,然后点add
发现弹出的页面是空白的话再点一下Refetch response
就能看到响应包了,确认目标之后选中即可,然后复制一下token
值,就可以点击ok
关闭页面了
3:设置为Always
4:线程设置为1
5:第一个payload是密码字典,第二个payload就是token值,粘贴上刚才复制的token值
6:填一下Grep - Match
,方便一会找出答案!!!其中login success
是在前面的实验中发现的,只要登录成功就会返回这个信息
7:发起攻击
8:于是,很轻松的找出了密码
防爆破的一些手段
设计安全的验证码(安全的流程+复杂而又安全的图形)
对认证错误给出次数限制,超出次数就锁定账户一段时间
使用双因素认证
参见:https://www.yuque.com/u1881995/xwfvho/vd1kiy#gC6Kg
参考:https://xz.aliyun.com/t/11419#toc-2
介绍了使用CSRF Token Tracker、定义宏、宏+Extractor
如果token防爆破中,第一个数据包的响应体中出现token,第二个数据包的请求体中携带token。如何联动2个数据包呢?这就用到宏了,参见:https://medium.com/numen-cyber-labs/using-burp-suite-to-bruteforce-anti-csrf-token-based-forms-f0832fe147c1
在线演示靶场:DVWA https://www.yunyansec.com/#/experiment/securitydetail/55/0/
此处演示的是最简单的场景:两个数据包的参数名称一致!
即:响应包给你token值的参数名,和你请求包中的token值的参数名是一致的!
一个数据包获取token
另一个数据包使用token登录网站
2.1 准备运行一个宏
2.2 添加一个宏,一旦点击之后有2个弹窗
2.3 找到有csrf的那个请求数据包,选中它,然后点击“确认”
2.4 告诉bp,你要获取这个数据包的哪个数据
找到它之后,点击“确认”按钮即可
2.5 现在已经看到设置好的参数值和参数名了。点击“确认”按钮
现在,我们已经有一个宏了,点击右下角“确认”按钮
2.6 设置作用范围
由于我没有添加scope(范围),因此,我设置宏对所有的 url 生效,点击右下角“确认”按钮,完成设置。
每发送一次请求,token值就会发生一次变化,说明宏已经生效
这里演示的是某授权地址(需要IP加白才能访问):【禁止公开】
有些网站如果网站不存在 cookie 就不会验证验证码
正常情况下访问如下:
经过测试发现,一旦删除掉cookie(验证码verify也删了),多次重放数据包,得到的都是“密码错误或不存在该管理员”,与存在cookie时验证码错误的页面不同。
于是,爆破的方式就是删除掉cookie。
phpmyadmin 是 mysql 的一个 web 管理工具,可以通过这个工具穷举 mysql 用户的账号和密码。
这里使用的是“phpMyAdmin暴力破解v1.3.exe”,指定URL、账密,一旦成功,会出现 result.txt。
软件缺点是速度比较慢。
访问webshell,然后抓包。
访问的方法自然是GET,连接webshell自然是POST,所以更改一下方法。
设置POST传参内容,一旦成功破解,输出“passwordright”
pass=execute("response.clear:response.write(""passwordright""):response.end")
嫌弃上面的命令太长,也可以换成phpinfo。这里不知道怎么回事,响应码500了。
思路完全同上,直接截图。
POST传参内容: echo "password right";
抓包,修改方法,“cmd”起到占位符作用
思路完全同上,直接截图。
POST传参内容:cmd=Response.Write("password right");
cheetah 是针对一句话后门的穷举工具
python cheetah.py -u http://orz/orz.php
python cheetah.py -u http://orz/orz.jsp -r post -n 1000 -v
python cheetah.py -u http://orz/orz.asp -r get -c -p data/pwd.list
python cheetah.py -u http://orz/orz -w aspx -s iis -n 1000
python cheetah.py -b url.list -c -p pwd1.list pwd2.list -v
cheetah.py -u http://www.c1moon.com/a.php -n 1000 -v -p data/pwd.list
cheetah.py -u http://www.c1moon.com/a.asp -n 1000 -v -p data/pwd.list
cheetah.py -u http://www.c1moon.com/a.aspx -n 1000 -v -p data/pwd.list
支持 asp php .net jsp 后门
┌──(rootkali)-[/home/kali/test/cheetah]
└─# tree
.
├── cheetah.py
├── data
│ ├── big_shell_pwd.7z
│ ├── find.list
│ ├── pwd.list 【密码本位置】
│ ├── url.list
│ └── user-agent.list
├── images
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ └── logo.jpg
├── LICENSE
├── README.md
├── README_zh.md
├── requirements.txt
└── update.py
例子
python cheetah.py -u http://www.c1moon.com/cmd.php -r post -n 1000 -v
wordpress 是知名的博客系统,在互联网上的占有量很大,所以一定要知道这套系统的弱口令穷举的方法。
首先到这个网站注册账号和密码,注册后获取 token。https://wpscan.com
设备网络,让kali访问到靶机
wpscan --url http://www.redteam.com/ -e u -P /home/kali/test/top1000.txt --api-token QYbHH6fbNDIi6Op3MQuvg85fD4fhNiB4RKJsVOMVp6w
访问连接获取用户信息,在网址后面添加/wp-json/wp/v2/users
如http://www.vtmoon1.com/wp-json/wp/v2/users,获取信息可以再进行指定用户爆破
知道用户名之后,纯粹爆破密码的话,无需再提供API
wpscan --url http://www.redteam.com/ -U moonsec -P /home/kali/test/top1000.txt
验证码干扰像素太少很容易就会被一些工具识别出来。如图片提取文字工具。
这里使用“Codex验证码后台爆破辅助工具v2.1.exe”进行测试。
如下图,对着验证码鼠标右键获取验证码的地址,然后到验证码测试工具中,测试验证码识别效果,发现还不错
实验步骤:
首先使用BP获取登录的数据包,然后丢给验证码爆破工具,再提供一个密码本即可。