Pikachu靶场全通关思路


暴力破解

一、基于表单的暴力破解

本题打开后为一个简单的登录界面

无论是用户名还是密码我们都是无从知晓的,所以需要通过BP来爆破出其各自的值

先随便输入用户名和密码通过BP抓包

然后发送给BP的Intruder(测试器),利用其中的Clusterbomb(集束炸弹)分别对用户名和密码进行爆破,得到用户名和密码分别为admin/123456

不过本题也不只这一个用户名和密码。

二、验证码绕过(on server)

本题在原本的用户名和密码上多了一个验证码,同样的先用BP进行抓包,

通过抓包重发,发现只要验证码可以重复使用,即当第一次验证码输对以后,只需要去爆破用户名和密码即可,为方便即默认用户名为admin(也可以选择和第一题一样),

得到密码为123456,登录成功

三、验证码绕过(on client)

先进行BP抓包,

由于本题是前端验证,所以即使我们将vcode那一处给删除掉,回显仍然判断为用户名和密码不存在

所以接下来只需要去爆破出密码即可

四、token防爆破

发现当修改密码再发送时会出现另一种回显

即每个数据包都被添加了token验证机制,尝试使用Intruder(测试器)中的Pitchfork(音叉)

然后在选项中进行修改

找到Grep-Extract进行添加

即从 value:” 开始到 “ />\n\n 结束

然后再重定向中选择 总是

转到有效载荷,有效负载集为1时即为爆破密码

有效负载集选为2,并在有效载荷类型中选择 Recursive grep(递归搜索)

开始攻击

Cross-Site Scripting (XSS)

一、概述

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写”CSS”冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;

​ XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
​ XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
​ 形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
​ 因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
​ 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
​ 输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

二、反射型xss(get)

本题有着长度限制,不过可以通过F12进行修改,或者先随便输入

然后通过上方url中的message构成XSS恶意语句,得到弹窗

三、反射性xss(post)

首先他想让你登录,不过用户名和密码就是暴力破解时得到的,登录成功后,直接在输入框中构造XSS恶意语句

或者 输入此构造伪链接

四、存储型xss

本题直接在留言版上写下XSS恶意语句,然后每次点开后就会出现弹窗

千万不要在留言板上写这个

不然后面你每次点开存储型XSS就会自动跳转百度

五、DOM型xss

在源码中我们可以找到这个语句

document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";

即我们输入框中的内容就是str,所以我们需要在输入框中输入一个内容,使之达到闭合,以此出现弹窗

构造语句 ‘onclick=alert(‘我是弹窗’)>

构造后的语句为

点击下方蓝体,得到弹窗

六、DOM型xss-x

和第五题一样,在输入框中输入 ‘onclick=alert(‘我是弹窗’)>

然后下面出现的蓝体文字多点几下就出弹窗了

七、xss之盲打

有框你不打?

然后本题有着后台登录地址,登录进去看看

然后就会被弹了

盲打的本意就是我们也不知道这个是否会触发,而当管理员打开后台后自动执行xss出现这个弹窗这说明盲打成功

八、xss之过滤

xss过滤绕过技巧

1、改变大小写

2、关闭标签

3、使用hex编码绕过

4、绕过magic_quotes_gpc

5、利用<>标记注射Html/Javascript

6、利用HTML标签属性值执行XSS

7、空格/回车/Tab

8、对标签属性值进行转码

9、产生自己的事件

10、利用CSS跨站剖析
这里不做赘述,如果想要了解,可以访问[大佬博客](XSS篇——XSS过滤绕过技巧_xss <被过滤了怎么构造命令_free_xiaochen的博客-CSDN博客)

本题经过尝试是字母大小写绕过

这样修改一下就可以触发弹窗

九、xss之htmlspecialchars

htmlspecialchars定义和用法

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

  • & (和号)成为 &
  • “ (双引号)成为 "
  • ‘ (单引号)成为 ‘
  • < (小于)成为 <
  • > (大于)成为 >

提示:要把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。

所以当我们输入xss恶意语句时,会发现被转换为实体符号

所以我们需要构造如下的语句

十、xss之href输出

本题中如果仍使用正常的xss恶意语句,虽可以得到蓝字回显,但点进去却只是403,经测试无论是双写绕过还是大小写等都不可,这里就可以使用另一种方法,js伪协议绕过

构造

十一、xss之js输出

先随便输入,得到回显,然后通过源代码找到这一处位置

<script>
    $ms='';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }


</script>

我们可以得知$ms即是我们在文本框写入的内容, 且此内容在js标签内,所以我们需要闭合一下

构造

得到弹窗

CSRF

一、概述

CSRF(跨站请求伪造)概述

​ Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为”one click”攻击。很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。
CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

​ 因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
​ –对敏感信息的操作增加安全的token;
​ –对敏感信息的操作增加安全的验证码;
​ –对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

二、CSRF(get)

根据提示,得到了几个用户,我们如概述那般,先登录vince用户

修改vince用户的个人信息并利用BP抓包!

发现没有token验证,然后将add修改为chain80

然后复制url /pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=chain80&email=vince%40pikachu.com&submit=submit

我们再登录kobe用户

修改url,kobe的信息被修改

三、CSRF(POST)

与上题差不多,不过此题是以post传参,我们先登一个lili用户

然后利用BP抓包修改一下

因为post无法像get那般,所以我们需要自己创建一个恶意站点,在pikachu文件夹vul/csrf/csrfpost下创建一个html文件,使被攻击用户点击

<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="csrf_post_edit.php">  //这一处因人而异
<input id="sex" type="text" name="sex" value="girl" />
<input id="phonenum" type="text" name="phonenum" value="18656565545" />
<input id="add" type="text" name="add" value="US" />
<input id="email" type="text" name="email" value="lili@pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

然后我们登录vince用户

访问这个html文件

四、CSRF(Token)

由于token回显在每次发送请求都是不一样且完全随机的,且后台会对每次生成的token进行验证, 故我们无法通过伪造URL使被攻击者遭到CSRF攻击,以本人目前能力,无法复现

由此也可见。token保护是一个很好防御CSRF的方法。

SQL注入

一、概述

SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

​ 在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
​ 1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
​ 2.使用参数化(Parameterized Query 或 Parameterized Statement);
​ 3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了”拼接”的方式,所以使用时需要慎重!

二、数字型注入(post)

数字分别代表的就是CSRF中那六个用户,我们直接抓包拼接sql语句

因为只是数字型,直接联合查询就好

三、字符型注入(get)

我们需要判断是单引号闭合还是双引号闭合,

当我们输入双引号时

当我们输入单引号时

构造语句 1’ union select username,password from pikachu.users#

得到回显

四、搜索型注入

本次注入,就是你还需要去判断一下有几个列

当我们判断它有三个列时

判断它有四个列时

所以本题有三个列,则 在第三题的基础上再加修改

构造语句 1’ union select username,password,3 from pikachu.users#

五、xx型注入

根据提示,这题就是不管他是什么型,使你所写的sql语句能闭合上,

即构造 1’) union select username,password from pikachu.users#

六、”insert/update”注入

我们需要先注册一个账号

而根据本题题目 insert和update其实都是sql语句的一种,前者用于添加,后者用于修改

进行BP抓包

然后构造语句进行报错注入,此时不能再在语句后加入注释符

know5’ or updatexml(1,concat(0x7e,database()),0) or ‘

修改个人信息也是如此

七、”delete注入”

点击删除后抓包

由于本题编码问题,所以我们需要用+替换空格,与上题一样,利用报错注入

八、http头注入

即http头的某个值带入sql语句使其注入

进行BP抓包

单引号出现报错,所以构造报错注入

九、布尔盲注

利用substr构造语句,结合我们在刚才注入时已知的那几个用户,可以通过此语句查询到他们的信息

lili’ and ascii(substr(database(),1,1))=112#

意思就是判断数据库名称的第一个字符是否等于小写字母p,如果相等,则返回True(即条件成立),否则返回False(即条件不成立)。。

十、时间盲注

时间盲注一般通过if语句,通过延迟的信息进行判断

1’ and if(substr(database(),1,1)=’p’,sleep(5),null)#substr(database(), 1, 1) 是函数 database() 截取第一个字符 **if(substr(database(),1,1)=’p’,sleep(5),null)# ** 如果第一个字符是 ‘p’,则执行 sleep(5) 延迟5秒;反之则返回null

lili’ and if ((substr(database(),1,1))=’p’,sleep=(5),null)#

十一、宽字节注入

使用BP抓包

由于魔术引号的存在,需要在其前面加一个%df

即构造如下语句 1%df’ union select username,password from pikachu.users#

RCE

一、概述

远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上,一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过”自动化运维平台”进行操作。在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的”收获”-_-

远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。

​ 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。

​ 因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。

二、exec “ping”

在后面加上 &whoaimi 就可以执行whoami指令

三、exec “eval”

在上输入phpinfo();指令 得到回显,不局限于这个指令,你system(“ipconfig”)也能在上面回显出内容

File Inclusion(文件包含)

一、概述

文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
这些文件包含函数,这些函数在代码设计中被经常使用到。
大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。攻击着会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。

​ 根据不同的配置环境,文件包含漏洞分为如下两种情况:
1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。

​ 因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

二、File Inclusion(local)

随便点一个提交发现得到回显,

从上面url我们可以发现文件名 file5.php

这些文件一般都是后台存在的文件,但此题是本地文件包含漏洞,我们可以通过修改上方的url来访问

可以通过在前面多个**../**来跳转到根目录

类似于 ../../../Windows/System32/drivers/etc/hosts

按此路径也可以找到文件

或者在pikachu靶场里的include文件夹找到这几个回显出来的php文件

我们在里面建立一个txt文件可以成功访问

三、File Inclusion(remote)

我们先去php.ini文件将allow_url_include改成On

打开后和第一题一样的回显

不过可以在url上看到include

然后我们可以就此修改去访问另一个网站的文件,比如

访问成功

Unsafe Filedownload(不安全的文件下载)

一、概述

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。

如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。从而导致后台敏感信息(密码文件、源代码等)被下载。

所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。切记:所有与前端交互的数据都是不安全的,不能掉以轻心!

二、Unsafe Filedownload

如Notice所说,如果点击图片下方名字即会下载图片,其他无线索,所以我们先点击一个图片,然后通过BP抓包

然后将filename后面的值修改为 ../test.php(这个php文件是我自己创的并放在上级目录)

然后成功下载

Unsafe Fileupload(文件上传漏洞)

一、概述

文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
–验证文件类型、后缀名、大小;
–验证文件的上传方式;
–对文件进行一定复杂的重命名;
–不要暴露文件上传后的路径;
–等等…

二、client check(客户端check)

第一种方法

先上传一个jpg图片里面写着phpinfo()函数,然后点击的一瞬间通过BP抓包

将jpg后缀修改为php后缀并发送

然后访问该地址,得到回显

第二种方法

用F12打开代码页面将onchange删除

然后直接上传php文件

访问得到与上题一样的回显

三、MIME type

本题即是利用将php文件通过BP抓包上传后,改变文件类型为图片类型以此来达到上传目的

我们先BP抓包一个php文件

即将此修改为 image/jpeg 然后上传成功

访问一下

上传成功

四、getimagesize()

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

getimagesize()函数会通过读取文件头部的几个字符串(即文件头), 来判断是否为正常图片的头部

所以我们可以通过文件幻术头来进行图片上传

利用文件包含漏洞解析此图片木马: http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2023/09/05/29522464f71e89dc8e3484901611.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2


文章作者: Know5
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Know5 !
  目录