Pikachu靶场通关记录(一)

综合性靶场,方便整体复习,直接开搞

1.暴力破解

1.1 基于表单的暴力破解

测试,直接bp抓包,放intruder模块爆破,搞个字典直接进去爆,看返回长度判断

得知为admin和123456,成功登录

1.2 验证码绕过(on server)

验证码的生成代码写在了前端,因此只需要正确输入验证码后再抓包,然后把验证码参数去掉就行了

(lz是直接把抓到的包丢到intruder模块也成功了,没有删除验证码的参数)

抓包,爆破,跟1.1相同

1.3验证码绕过(on client)

争对后台不刷新验证码的情况,抓到包后不要放,该验证码就会一直有效

跟1.2相同的步骤,成功登录

1.3 token防爆破?

抓包时发现参数中多了一个token

继续爆破,仍然成功登录。

有点懵,感觉不对劲,再爆一次

有趣,居然失败了,看来要学到新知识了


token相当于个一次性的令牌,客户端需要携带token通关服务端的验证。

可以简单理解为每一次请求的时候都产生了一个随机数,并且需要携带这个正确的随机数才能通过验证

那应该去哪儿找这个"随机数"呢?而且每次都不一样,即每次都需要从某处拿到更新后的"随机数"

bp里恰好就有这个功能,叫 递归提取(Recursive grep,递归grep载荷)

该方法会用上一次 HTTP 响应的正则提取结果 ,作为下一次请求的 Payload,请求前后存在依赖关系

因此爆破时需要选择Pitchfork鱼叉攻击的方式

通过图示过程得到http相应结果,即"随机数"

有两个地方需要注意,一是该页面最下方的重定向需要设定为always

二是最大线程数需要设置为1

然后开爆

成功登录。

第一次成功的原因是在我的字典里,正确的密码放在了第一个,正好满足了(ˉ▽ˉ;)...

关于该题更加详细的解答可以参考:

【Pikachu 靶场精讲】Token 防爆破

bp英文界面可以参考:

PIKACHU 暴力破解之token防爆破

2. Cross-Site Scripting(XSS)

夹带私货!!

关于xss-labs-master靶场的通关记录可以参考lz的另外两篇帖子(●'◡'●)

xss-labs-master通关记录(1-10)

以及

xss-labs-master通关记录(11-20)

2.1 反射型xss(get)

直接尝试标签法:

复制代码
<script>alert(1)</script>

发现输入长度受限

xss作为一个纯前端的漏洞,直接尝试修改html源码中的长度

f12打开开发者模式,查找max字符

修改为40,再次尝试标签法,成功

2.2 反射型xss(post)

包含username和password,一眼就想用万能密码,但那是sql的内容了

尝试admin和123456,登陆成功,再用标签法<script>alert(1)</script>,成功弹窗

(??发生什么事了)

点开提示发现是要获取cookie,用户和密码是直接给了的。。。

重新来一遍

登录之后,通过payload

得到cookie

2.3 存储型xss

开局一个留言板,没有提示,直接尝试标签法

<script>alert(1)</script>

过关

2.4 DOM型xss-x

DOM型XSS(Document Object Model Cross-Site Scripting)是一种基于文档对象模型(DOM)的跨站脚本攻击类型。它通过在客户端操作DOM来实现恶意脚本的注入和执行,而无需与服务器进行交互。

标签法失效了,出现一个无用链接,但输入内容没有消失,f12查看代码并搜索alert(1)出现的位置

发现前面接的是href,即伪协议法,于是输入javascript:alert(1)>test</a>

发现test标签未生效,仍然采用的的是what do you see的标签,尝试javascript:alert(1)">test</a>手动闭合也没成功

还是老老实实用题目给的标签吧(ˉ▽ˉ;)...注入javascript:alert(1)后点击链接即出现弹窗

2.5 DOM型xss-x

注入上一题代码javascript:alert(1)出现一个链接,点击链接后出现了第二个链接

查看网页源码,直接搜出现的链接名称"就让往事都随风。。。。"

明白和上一题结构一致,注入javascript:alert(1)后点击后出现的标签即可出现弹窗

2.6 xss之盲打

源码中搜提交看看有没有线索

点开提示发现让我们登陆后台

登陆后台后发现是刚刚上传的信息

提示显示"被弹了吗",说明后台是出发xss的地方,前面输入后面触发,看看代码

注入标签法<script>alert(1)</script>,成功实现弹窗

2.7 xss之过滤

标签法注入后未生效

发现内容只剩下一个>了,换个方法,既然内容会在下面显示出来,尝试用图片的形式让其触发

<img src=abc onerror=alert(1)>

解释:让浏览器去请求名为abc的图片文件,当文件不存在或报错时触发onerror中的代码

成功弹窗

2.8 xss之htmlspecialchars

看到名字就蒙了,搜一下

htmlspecialchars定义:将 HTML 中有语法意义的特殊符号转义为 HTML 实体字符 ,浏览器只会把转义后的内容当成纯文本渲染,不再解析成 HTML 标签、JS 事件,从输出层面防御反射型、存储型 XSS

试试之前的payload:<script>alert(1)</script>

查看源码

href标签,直接配合格式注入javascript:alert(1)

成功弹窗

2.9 xss之href输出

与2.8的payload一致:javascript:alert(1)

实现弹窗

2.10 xss之js输出

提示让输入tmac试试,弹出一张图片

无语,好像是整活的,注入payload:<script>alert(1)</script>,去代码里找找出现在哪儿了

确实是个整活的(ˉ▽ˉ;)...。看来是标签闭合的问题,要先把前半个script闭合了

尝试根据原格式构造对应payload:

</script><script>alert(1)</script>

成功弹窗

3.CSRF  

csrf(Cross-Site Request Forgery)跨站请求伪造

攻击者诱导你在已登录目标网站的浏览器,在不知情的情况下自动发起非自愿请求,利用你的登录身份执行操作

核心本质:浏览器会自动带上目标站点的 Cookie、登录凭证,网站只校验 "请求带了登录 Cookie",没验证这个请求是不是用户本人主动发起。

3.1 CSRF(get)

提示中告知一些账号,直接登录

修改个人信息,该点然后bp抓包

利用bp自带的模块生成CSRF的攻击载荷,先在proxy中的intercept模块中选择action,

然后修改成自己想改的内容

生成后将链接打开,提交请求后发现内容已经成功修改

3.2 CSRF(post)

仅仅传参方式不同,步骤与3.1完全一致

3.3 CSRF(Token)

跟前面token防爆破原理是一样的

但是在bp的csrf模块里怎么拿到更新后的token呢?

lz尝试用之前的方式,即把包发去爆破模块,在那里拿到新的token后再手动替换

但失败了,猜测是在生成csrf网页时也产生了新的token。

看看别的大神们怎么做的。。。。

发现其他帖子里提到该机制无法绕过?!好像还是真的。。。

话虽如此,但在一通寻找后lz还是在一位大佬的帖子中发现提到可以用bp中的CSRF插件CSRF Token Tracker来绕过

尝试一下。

插件配置如图

其中value的值为从网页代码中复制的token

然后在抓的包中修改参数,全部改为token,发包,居然成功了(装插件前直接修改包中的内容是不会成功的,说明后台会对token进行校验)

因为CSRF Token Tracker会自动识别到的Token值,之后每次提交的重放都会自动识别并填充token值来实现绕过的目的

继续深入发现intruder也能实现,尝试一下居然也成功了!不过需要设置第二个变量,才能有具体的爆破次数,

这里随便设置一个要修改的变量内容就行了

依旧还是那两个注意点,一是重定向选为总是,二是最大并发数改为1

这里第一个元素设置的从1到10,第二个就是递归提取(Recursive grep,递归grep载荷)详细见前面1.3节

最后的结果是10,即每一次都修改成功了o(* ̄▽ ̄*)ブ