0%

pikachu靶场通关记录

Pikachu靶场是一个用于学习和测试网络安全的练习平台,主要用于Web安全漏洞的实践和研究。它包含了一系列常见的Web安全漏洞。

Brute Force暴力破解

基于表单的暴力破解

直接爆破

验证码绕过(on server)

这种同上面一样,直接爆破

验证码绕过(on client)

填写正确的验证码后劫持请求包,在Repeater模块中将验证码参数设置为空后发送,服务器返回正常信息,

image-20241011155625971

然后将请求包发送到Intruder模块,正常暴力破解即可。

token防爆破

这种抓包后,可以发现多了一个token参数,需要同时爆破两个参数,可以利用Pitchfork攻击模式。

image-20241011160629228

passwordpayload设置正常加载字典,tokenpayload设置为Recursive grep(递归搜索)类型

image-20241011161617335

Options模块下:

Request Engine中设置线程数为1

image-20241011161720097

Grep-Extract中提取响应中的有用信息,到攻击结果表中,这里是token

image-20241011161903701 image-20241011162304789

Redirections中设置如何遵循重定向为Always

image-20241011162347048

然后开始爆破

XSS跨站脚本

漏洞测试流程

  1. 在目标站点找到输入点,比如查询接口,留言板等;
  2. 输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理。
  3. 通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行JS代码的条件(构造闭合),是否在p标签中;
  4. 提交payload,成功执行则存在xss漏洞。

反射型xss(get)

​ 先输入<script>111提交,然后查看源码,搜索找到输入的<script>111,联系上下文可以确定这是一个xss漏洞。

image-20241011191329652

试着输入<script>alert(1)</script>,发现输入字节数被限制。
F12找到设置字数的参数maxlength

image-20241011192735750

修改maxlength

image-20241011192958868

再次注入代码

image-20241011193044360
payload
<script>alert(1)</script>
<svg/onload=confirm(1)>
<img src=1 onerror=alert(3)>

反射型xss(post)get型的区别是,get会在url中显示我们注入的代码,该类不会显示。

存储型xss

​ 存储型与反射型的区别在于,存储型会将每次输入的数据都保留在数据库中,后一次输入的数据不会覆盖前一次输入的数据。

image-20241011195802223

DOMxss

DOM XSSXSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析,可以认为完全是客户端的事情,无法通过WAF防护。

​ 分析一下前端网页代码,可以发现输入框里的参数会被传递给a标签中的href属性,所以我们输入payload后点击a标签也就是网页上的what do you see?即可。

image-20241011214756139
  • 输入javascript:alert(1),插入数据后的a标签为:<a href='javascript:alert(1)'>what do you see?</a>

  • 输入' onclick="alert(1)">,输入的'会把href属性构造成一个闭合,然后再通过onclick也可以实现跟上面一样的功能。

前:<a href=''>what do you see?</a>
后:<a href='' onclick="alert('1')">'>what do you see?</a>

image-20241011220439496

payload

javascript:alert("1")
' onclick="alert('1')">

xss之盲打

XSS盲打不是一种漏洞类型而是一种xss漏洞的利用方式,攻击者可以在网站留言板、反馈建议等功能点提交恶意的xss payload,如果该网站存在xss漏洞,当管理员在后台查看用户留言页面时就会执行xss payload,xss盲打最主要的目的是通过加载外部的恶意js文件(通过xss盲打平台生成)获取管理员后台的Cookie信息,攻击者就可以使用管理员的身份访问网站后台从而进一步发动攻击

该类攻击的过程是找到xss漏洞的注入点,然后将通过XSS平台得到的恶意js文件在漏洞点注入,登录管理员后台使恶意代码执行,便能在XSS平台上得到cookie值。

XSS平台上,创建项目,查看配置代码

image-20241012170823583

将第二个代码注入漏洞点,提交

image-20241012170947388

注入恶意代码后,再次登录后台,代码就会被执行

image-20241012172214641

然后在XSS平台上查看记录,要等一会儿才能看到

image-20241012172423588

然后就可以利用获得的cookie值登录管理后台了

image-20241012172949880

xss之过滤

<>可以正常打印出来

image-20241012175326553

<script>被过滤

image-20241012175401883

尝试双写<scrscriptipt>同样被过滤

尝试大小写<ScrIpt>,绕过成功

image-20241012180032520

猜测是script关键字被过滤,尝试<svg/onload=confirm(1)><img src=1 onerror=alert(3)>都可成功

xsshtmlspecialchars

htmlspecialchars

htmlspecialchars函数会把' " & < >等字符转换为实体,也就是过滤了。但是该函数默认情况下是不会过滤'的,只有quotestyle选项被设为ENT_QUOTES时才会过滤'

<a>标签和href属性

<a>"anchor"的缩写,用于定义超链接,可以将用户导航到另一个页面、页面上的某个部分,或者任何其他URLhref属性指定了超链接的目标URL

随便输入123,发现输入的数据给了href属性

image-20241012184854479

那就先输入javascript:alert(1)试试,如果没有过滤,即可成功

image-20241012185644279

成功了,我们还可以用其他payload,只要能绕过过滤即可

payload

javascript:alert('1')
' onclick='alert(2)'

xsshref输出

直接用javascript:alert(1)即可。

xssjs输出

输入123

image-20241012190623893

这里有一个小技巧,我们可以利用'//构造在$ms='123'可以执行的语句。

输入123';//,拼接后:$ms='123';//';

所以现在我们输入123';alert(2);//即可

image-20241012191615734

CSRF跨站请求伪造

CSRF(get)

攻击方:vince
被攻击方:allen
被攻击方原个人信息:

image-20241022141942627

攻击方

攻击方登录自己账号,点击修改个人信息

image-20241022142028237

填入要修改的内容,点击submit并进行bp抓包

image-20241022142718284

可以发现,该页面是通过GET传参方式对数据进行修改的

image-20241022142845195

右键选中Engagement tools->Generate CSRF PoC,生成CSRF Poc代码

image-20241022143336617

点击Test in browser,复制URL,在浏览器打开

image-20241022143504559

将当前请求包Drop掉,关闭bp拦截,直接退出登录,vince信息并未被修改

被攻击方

被攻击方allen登录自己账号,然后来到前面burp生成的网站,点击Submit request,此时被攻击方的个人信息已被成功修改

image-20241022144414264

CSRF(post)

该类与前类的区别在于,对于关键数据的传参方式不同,攻击过程同上

image-20241022144910205

攻击成功,过程不再赘述

image-20241022145016235

RCE

exec"ping"

通过一些命令连接符如||,&,&&,来拼接IP地址和命令,执行我们想要执行的命令。

exec"eval"

这种是直接通过eval()将输入的字符串当作代码来执行。

文件包含

文件包含函数:include(),include_once(),require(),require_once()

防范措施

  • 在功能设计上尽量不要将文件包含函数对应的文件放给前端进行选择和操作。
  • 过滤各种./.http://https://
  • 配置php.ini配置文件:allow_ url_open = offAllow_ url include= offmagic quotes_ gpc=on //gpc
  • 通过白名单策略,仅允许包含运行指定的文件,其他的都禁止。

本地文件包含

​ 这种是仅对服务器本地的文件进行包含,因为服务器上的文件并不是攻击者可以自己控制的,所以该种攻击通常是包含系统的配置文件(如密钥文件),或是配合文件上传漏洞去利用。

​ 先随便提交一个数据,然后看url可以发现,filename=这个参数存在文件包含漏洞,我们可以通过这个参数访问本地上的其他文件

image-20241013160223589

​ 在本地查看当前目录,其下有一个file6.php文件,看一下里面的内容,该靶场应该是将该文件作为一个敏感文件

image-20241013160634171

那么接下来我们便可以通过设置url中的filename=file6.php来获取file6.php文件里的敏感数据

image-20241013161053618

文件下载

原理:

​ 一般当我们点击下载链接,便会向后台发送一个下载请求,这个请求会包含一个需要下载的文件名称,后
台在收到请求后,会开始执行下载代码,将该文件对应的文件**response** 给浏览器,从而完成下载。
​ 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果攻击者提交的不是一个程序预期的文件名,而是一个精心构造的路径(如../../../etc/passwd),则可能会直接将该指定文件下载下来。从而导致后台敏感信息(密码文件、源代码等)被下载。

防范措施

  • 对传入的文件名进行严格的过滤和限定
  • 对文件下载的目录进行严格的限定

成功下载了flag.txt文件

image-20241013184458217

文件上传

getimagesize

PHP中的getimagesize()函数是一个内置函数,用于获取图像的大小。getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

介绍两个绕过方法:

  • 直接伪造头部GIF89A
  • copy 1.php/a+1.jpg/b 2.jpg命令合成,然后上传2.jpg,再配合文件包含漏洞执行2.jpg中的代码

Over Permission越权

​ 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。

下面来简单认识一下越权操作:

水平越权

在登录页面登录用户lili的账号

image-20241015124201596

成功登录后,点击查看个人信息

image-20241015124215044

此时会向后台提交一个GET请求,并提供了当前用户的用户名,后台便会将当前用户的信息返回到页面

image-20241015124237973

当我们修改URL中的username参数为另一个用户名kobe时,页面便会出现kobe用户的信息,也就是说我们无需密码便得到了kobe的个人信息,实现了水平越权

image-20241015124313480

垂直越权

先获取超级用户添加用户的URL

image-20241015141619677

登录pikachu用户

image-20241015141746803

直接替换当前页面的URL为前面保存的URL

image-20241015141905178

现在已经可以通过pikachu用户添加用户