环境安装:
在以下地址把Picachu的安装包下载下来,这是我自己的百度网盘。我这里使用的是phpStudy,把它解压到WWW目录下:
链接:https://pan.baidu.com/s/1bTc0XaSi0GnVcO5VfC8dBQ
提取码:dl16
然后通过火狐浏览器进入:
进入后就发现变更成这个页面,有时候会出现左边那一列消失的情况,这个时候长按ctrl,滚动滑轮就可以缩放页面,左边那一列就出现了:
之后打开文件夹中的pkxss文件夹,选择inc(具体路径如下图),然后用Notepad打开config.inc.php:
打开把数据库的用户名和密码根据自己的实际情况修改为自己的数据库用户名和密码(我这里都修改为root),然后保存:
这是为了打开xss后台,如果不修改数据库用户名和密码,那么在你打开页面最下面的管理工具,进入xss后台就会出问题,点击红字提示,安装初始化后就会出现下图的情况:
但是修改成功后,我们再进入xss后台正常安装初始化,就正常了:
admin/123456登录,可以登录成功:
接下来转回原来的首页,就可以进行Pikachu的操作了。
暴力破解(Burte Force)
在我前面的博客(Sqli-labs和DVWA),已经做过暴力破解的相关模块了,关于暴力破解的介绍,可以去参考DVWA的暴力破解模块,有详细介绍。暴力破解的必要工具中,一定少不了Burp Suite,因为我们需要一个带字典的工具来一直尝试自动化登录,人工尝试太慢了。关于Burp Suite的使用等信息,可以参考我的Sqli labs Less 5-10。
我们先来了解一下Burp Suite,因为下面要用到burp suite,这里先简单介绍一下intruder模块的东西
Target选项:
设置攻击目标,可以通过proxy发送
Pasitions选项:
指定需要暴力破解的参数并设置成变量,同时选择攻击模式
这里面的攻击模式有四种:
Sniper(狙击手):
一个payload,先将第一个变量使用字典进行测试,然后将第二个变量使用字典进行测试
Battering ram(冲撞车):
可以设置多个payload,所有变量一起用字典内容被替换,然后一起尝试
Pitchfork(草叉型):
每个payload设置对应的字典内容,然后按顺序一一对应进行破解
Cluster bomb(焦束炸弹):
为每一个变量设置一个payload,分别使用字典内容组合对变量进行替换
(这四种模式的具体内容可以在以下网址进行进一步了解:
https://www.cnblogs.com/wayne-tao/p/11130158.html)
Payloads选项:
设置字典,并对字典进行统一的策略处理
Options选项:
对扫描的线程、失败重试等进行配置;
对结果设置匹配的flag:通过一个标识符来区别结果,并在结果栏中flag出来
了解之后,我们就开始进行暴力破解。
一、基于表单的暴力破解
在页面左侧选择暴力破解下拉菜单下的”基于表单的暴力破解“:
这是最简单的一种模式,首先测试,随便输入一个用户名密码,和正确的用户名密码,看看它们的返回值有何不同:
错误:123/456
正确:admin/123456
【如果不知道正确的用户名密码,可以点击右上角的提示:
】
既然返回的结果不同,我们就可以根据页面返回的不同数据进行区别来暴力破解,打开浏览器代理后,随便输入一个用户名密码,直接用burp抓包(具体如何代理,请参考我的博客:Sqli labs Less 5-10):
然后发送到intruder模块:
点进Positions,点击Clear $,清除无关的变量,然后选中username和password变量,点击Add $选中,再选择攻击模式为Cluster bomb:
然后我们进入Payloads,在Payload Sets中把Payload set设置为2,因为我们有两个参数需要破解。在Payload Options中点击Load导入字典(其实就是我们提前创建的一个文本文档,里面写好我们猜测的用户名和密码,Brup Suite会根据这个字典,把里面的内容进行尝试,字典存放的路径和命名随意):
最后option可以根据自己需要设置线程,有的好像不支持高并发,然后补充一下grep match这,大多数情况下我们根据返回页面的length不同观察,但是也可以自己设置flag:
点击Start attack,开始暴力破解:
然后我们从返回的结果中寻找Length与其他均不同且独一无二不重复的值,对应的Payload1和Payload2即为用户名和密码:
用admin/123456登录一下(记得解除代理,更方便,不会被抓包,会立即返回):
登录成功。
二、验证码绕过(on client)
这个验证码绕过是在前台,只在前端处理。
打开burp suite,打开PHP study,打开Pikachu,点击on client选项,我们输入错误的用户名密码和正确的验证码(123/456),返回提示用户名或密码错误:
输入正确用户名密码,错误验证码(admin/123456/11111),返回了一个弹窗:
做代理,输入一次正确的验证码,随意输入账号密码,进行抓包(123/456):
选中内容,右键发送至Repeater:
在Raw当中,随意改一下验证码(我改成了11111),点击“Go”,若右侧出现用户名或密码错误,即”username or password is not exists“的字样,而不是验证码错误(直接拖到最后倒着寻找,你会找得更快),则验证码只在前端处理:
所以我们将数据包发到intruder,直接暴力破解,无需考虑验证码,其他的步骤跟基于表单的暴力破解一样了,不再赘述(有一说一这个验证码就是装样子,用js的代码在前台做验证,绕过前台一点用都没有)。
三、验证码绕过(on server)
这个验证码就靠谱多了,我们没法像on client一样绕过前台就能随意爆破,一般来说,后台处理检验的验证码十分可靠,但也有漏洞可以利用。我们来看看源码吧(路径如下):
观察源码,这个是在后端的检测的验证码,我们绕过的思路就是观察他产生的验证码有没有过期设置(用过一次刷新),如果没有默认的session就是24min刷新,可以看到,输入错误的验证码会被检测到,因为检测是在后端完成。看似很严谨了,但是我们输入正确的验证码之后,验证码并没有过期,还可以继续使用。
我们来测试一下,我们希望的结果是,再一次使用正确的验证码,发现返回的结果是用户名或密码错误,即”username or password is not exists“,这就代表验证码可以再次使用。
当然还是需要使用Burp Suite,所以我们还是一样做代理,在文本框内随便输入用户名密码(123/456),但验证码要输入正确,因为模拟真实情况你不会看不到验证码,然后抓包:
然后发送到Repeater,点击Go刷新页面得到新的验证码:
在Raw当中,随意改一下用户名和密码(我改成了137/246),点击“Go”,若右侧出现用户名或密码错误,即”username or password is not exists“的字样,而不是验证码错误,那么说明这个验证码可以继续使用,没有过期:
这就相当要命了,我们可以使用这个验证码暴力破解,步骤参考基于表单的暴力破解,这里只放出结果:
输入文本框登录:
登录成功。
四、token防爆破吗?
什么是token:
简单的说token是由服务端生成的一串字符串,作为客户端向服务端请求的一个标识。在前端使用用户名/密码向服务端发送请求认证,服务端认证成功,那么在服务端会返回token给前端,前端在每次请求时会带上服务端发来的token来证明自己的合法性。
在DVWA中,我们已经通过Burp Suite来获取下一次登录的token,从而破解了用户名和密码,所以答案显而易见:
token不能防爆破!
我们看一下网页的源码,看看token的走向:
发现from表单除了提交username和password之外,还提交了一个hidden属性的token值,这样每次提交要验证token值(每次更新),表面上可以防止爆破。但后端产生的token每次以明文形式传到前端,就有了漏洞
我们做代理抓包,用户名为admin随便输入密码即可,把用户名,密码和token都设置变量,攻击模式选择Clster bomb,options的grep extract添加token(我这里把密码单写了一个字典):
具体的步骤请参考我的博客:DVWA:介绍、环境搭建及全等级暴力破解,High级别中有详细步骤。这里给出最后的结果:
用这个密码登录:
登录成功。