Pikachu靶场是一个用于学习和测试网络安全的练习平台,主要用于Web安全漏洞的实践和研究。它包含了一系列常见的Web安全漏洞。
Brute Force
暴力破解
基于表单的暴力破解
直接爆破
验证码绕过(on server
)
这种同上面一样,直接爆破
验证码绕过(on client
)
填写正确的验证码后劫持请求包,在Repeater
模块中将验证码参数设置为空后发送,服务器返回正常信息,

然后将请求包发送到Intruder
模块,正常暴力破解即可。
token
防爆破
这种抓包后,可以发现多了一个token
参数,需要同时爆破两个参数,可以利用Pitchfork
攻击模式。

password
的payload
设置正常加载字典,token
的payload
设置为Recursive grep
(递归搜索)类型

在Options
模块下:
在Request Engine
中设置线程数为1

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


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

然后开始爆破
XSS
跨站脚本
漏洞测试流程
- 在目标站点找到输入点,比如查询接口,留言板等;
- 输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理。
- 通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行JS代码的条件(构造闭合),是否在
p
标签中; - 提交payload,成功执行则存在xss漏洞。
反射型xss(get)
先输入<script>111
提交,然后查看源码,搜索找到输入的<script>111
,联系上下文可以确定这是一个xss
漏洞。

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

再次注入代码

payload
:
<script>alert(1)</script> |
反射型xss(post)
与get
型的区别是,get
会在url
中显示我们注入的代码,该类不会显示。
存储型xss
存储型与反射型的区别在于,存储型会将每次输入的数据都保留在数据库中,后一次输入的数据不会覆盖前一次输入的数据。

DOM
型xss
DOM XSS
的XSS
代码并不需要服务器解析响应的直接参与,触发XSS
靠的就是浏览器端的DOM
解析,可以认为完全是客户端的事情,无法通过WAF
防护。
分析一下前端网页代码,可以发现输入框里的参数会被传递给a
标签中的href
属性,所以我们输入payload
后点击a
标签也就是网页上的what do you see?
即可。

输入
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>

payload
:
javascript:alert("1") |
xss
之盲打
XSS盲打不是一种漏洞类型而是一种xss漏洞的利用方式,攻击者可以在网站留言板、反馈建议等功能点提交恶意的xss payload,如果该网站存在xss漏洞,当管理员在后台查看用户留言页面时就会执行xss payload,xss盲打最主要的目的是通过加载外部的恶意js文件(通过xss盲打平台生成)获取管理员后台的Cookie信息,攻击者就可以使用管理员的身份访问网站后台从而进一步发动攻击
该类攻击的过程是找到xss
漏洞的注入点,然后将通过XSS平台得到的恶意js
文件在漏洞点注入,登录管理员后台使恶意代码执行,便能在XSS
平台上得到cookie
值。
在XSS平台上,创建项目,查看配置代码

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

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

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

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

xss
之过滤
<>
可以正常打印出来
<script>
被过滤
尝试双写<scrscriptipt>
同样被过滤
尝试大小写<ScrIpt>
,绕过成功
猜测是script
关键字被过滤,尝试<svg/onload=confirm(1)>
和<img src=1 onerror=alert(3)>
都可成功
xss
之htmlspecialchars
htmlspecialchars
htmlspecialchars
函数会把' " & < >
等字符转换为实体,也就是过滤了。但是该函数默认情况下是不会过滤'
的,只有quotestyle
选项被设为ENT_QUOTES
时才会过滤'
。
<a>
标签和href
属性
<a>
是"anchor"
的缩写,用于定义超链接,可以将用户导航到另一个页面、页面上的某个部分,或者任何其他URL
。href
属性指定了超链接的目标URL
。
随便输入123,发现输入的数据给了href
属性

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

成功了,我们还可以用其他payload
,只要能绕过过滤即可
payload
javascript:alert('1') |
xss
之href
输出
直接用javascript:alert(1)
即可。
xss
之js
输出
输入123

这里有一个小技巧,我们可以利用'
和//
构造在$ms='123'
可以执行的语句。
输入123';//
,拼接后:$ms='123';//';
所以现在我们输入123';alert(2);//
即可
CSRF
跨站请求伪造
CSRF(get)
攻击方:vince
被攻击方:allen
被攻击方原个人信息:

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

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

可以发现,该页面是通过GET
传参方式对数据进行修改的
右键选中Engagement tools->Generate CSRF PoC
,生成CSRF Poc
代码

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

将当前请求包Drop
掉,关闭bp
拦截,直接退出登录,vince
信息并未被修改
被攻击方
被攻击方allen
登录自己账号,然后来到前面burp
生成的网站,点击Submit request
,此时被攻击方的个人信息已被成功修改

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

攻击成功,过程不再赘述

RCE
exec"ping"
通过一些命令连接符如||,&,&&
,来拼接IP
地址和命令,执行我们想要执行的命令。
exec"eval"
这种是直接通过eval()
将输入的字符串当作代码来执行。
文件包含
文件包含函数:include(),include_once(),require(),require_once()
防范措施
- 在功能设计上尽量不要将文件包含函数对应的文件放给前端进行选择和操作。
- 过滤各种
./.
,http://
,https://
- 配置php.ini配置文件:
allow_ url_open = off
,Allow_ url include= off
,magic quotes_ gpc=on
//gpc
在 - 通过白名单策略,仅允许包含运行指定的文件,其他的都禁止。
本地文件包含
这种是仅对服务器本地的文件进行包含,因为服务器上的文件并不是攻击者可以自己控制的,所以该种攻击通常是包含系统的配置文件(如密钥文件),或是配合文件上传漏洞去利用。
先随便提交一个数据,然后看url
可以发现,filename=
这个参数存在文件包含漏洞,我们可以通过这个参数访问本地上的其他文件
在本地查看当前目录,其下有一个file6.php
文件,看一下里面的内容,该靶场应该是将该文件作为一个敏感文件

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

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

文件上传
getimagesize
PHP
中的getimagesize()
函数是一个内置函数,用于获取图像的大小。getimagesize()
返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。
介绍两个绕过方法:
- 直接伪造头部
GIF89A
- 用
copy 1.php/a+1.jpg/b 2.jpg
命令合成,然后上传2.jpg
,再配合文件包含漏洞执行2.jpg
中的代码
Over Permission
越权
越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
下面来简单认识一下越权操作:
水平越权
在登录页面登录用户lili
的账号

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

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

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

垂直越权
先获取超级用户添加用户的URL

登录pikachu
用户

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

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