pikachu漏洞练习平台
暴力破解
在web攻击中,一般会使用这种手段对应系统的认证信息进行获取。其过程就是使用大量的认证信息在认证接口进行尝试登录,知道得到正确的结果,为了提高效率,暴力破解一般会使用带有字典的工具进行自动化操作。
1. 基于表单的暴力破解
- 随意输入用户名和密码
- 抓包
- 在Intruder中进行暴力破解
- 发现一个用户名为
admin
,密码为123456
的账号 尝试登录,成功
2. 验证码绕过(on server)
- 随意输入用户名、密码和验证码
- 抓包,发送到Intruder,进行暴力破解
- 验证码后台不过期,所以只要输入正确的验证码即可
- 发现用户名和密码分别为
admin
和123456
尝试登录,成功
3. 验证码绕过(on client)
- 按F12查看源码发现,该验证码是在本地生成、本地校验的,所以可以在抓到的包中对验证码那一项删除,也可以成功发包
- 随意填写用户名、密码和正确的验证码
- 抓包,删除其中的验证码字段,正常爆破
- 发现用户名和密码为
admin
和123456
尝试登录,成功
4. token防爆破
- 采取token防爆破
无法获取token,无法破解
XSS
XSS是一种发生在前端浏览器中的漏洞,所以危害对象是前端用户。形成XSS漏洞的狐妖原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前段时被浏览器当作有效代码解析执行从而产生危害。
1. 反射型xss(get)
- 随意输入内容后提交,发现网址栏message信息有提交的内容,在message信息后提交xss代码
<script>alert(1)</script>
,提交,弹窗成功 在对话框内提交xss代码,发现有字数限制,不成功
2. 反射型xss(post)
- 首先使用暴力破解得到用户名和密码
- 在对话框中尝试输入xss代码
<script>alert(1)</script>
,提交后弹窗,成功 或者抓包后在包里修改提交内容,放行后成功弹窗
3. 储存型xss
- 将输入的内容储存到后台的文件或者数据库中,前端显示时会将xss代码解析为JavaScript语句来执行
在输入框输入xss代码
<script>alert(1)</script>
,提交刷新后,该xss代码被永久储存到留言列表中,每次打开该页面即可出发xss4. DOM型xss
随意输入字符后,出现一个超链接,查看超链接源码,发现可以对a标签中的herf进行闭合,然后输入xss代码
#"onmouseover=alert(1)>
即可,将鼠标移到超链接上,弹窗成功。- 通过一个script函数对对话框的参数进行了过滤,只能将对话框的字符提交为超链接,所以不能尝试
<script>
直接弹窗
- 通过一个script函数对对话框的参数进行了过滤,只能将对话框的字符提交为超链接,所以不能尝试
同上面一样,对输入的字符进行了过滤,所以不能直接使用
<script>
弹窗- 随意输入字符后,点击button,出现超链接,点击超链接后,出现下一级超链接,第二个超链接点击可以触发xss
- xss代码为
'><img src="#" onmouseover="alert('xss')">
- 不知道为什么
"
和'
结果不一样,查看源码也没发现过滤,但是"
会成为字符串的一部分,'
会成为dom的一部分
5. xss盲打
- 在每个对话框输入
<script>alert(1)</script>
登录后台后,被弹窗,盲打成功
6. xss过滤
- 尝试
<script>alert(1)</script>
发现被过滤 尝试大小写绕过,
<scRIpt>alert(1)</scRIpt>
成功弹窗7. xss之htmlspecialchars
- 尝试
<script>alert(1)</script>
查看源码发现<>
被实体编码 - 尝试
"onmouseover="alert(1)"
发现不弹窗,检查元素发现被按字符串处理 尝试
'onmouseover='alert(1)'
成功弹窗8. xss之href输出
herf标签可以直接输出js代码,所以输入
javascript:alert(1)
即可,点击超链接,弹窗成功9. xss之js输出
- 尝试随意输入后检查源码,发现输入的内容会在
<script>
中做一次判断,所以可以在判断这里进行xss 根据源码,尝试
'</script><script>alert(1)</script>
,提交,发现弹窗成功CSRF
在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击这个请求,整个攻击就完成了。所以CSRF攻击也称为“one click”攻击。
- xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造
- 甲点击黑客的链接,并且甲登录过敏感网站
- 甲被黑客获取敏感网站信息
1. CSRF(get)
- 登录成功后,然后修改信息,抓包获取GET的url
修改获取的url信息,重新进入获取的url,发现个人信息已经变成第二次修改过的信息。
2. CSRF(post)
- post登录不在url回显,所以需要先伪造一个post提交的网页
- 登录成功后,修改信息,抓包获取POST提交的数据,然后根据POST提交的数据修改伪造的网页
点击伪造的网页,即可修改个人信息
3. CSRF Token
使用了token,目前无法绕过
SQL注入
SQL注入漏洞主要系形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。从而导致数据库受损(被拖裤、被删除、甚至整个服务器权限沦陷)
1. 数字型注入(post)
- post提交查询,所以先抓包,因为是数字型注入,所以先尝试
1 or 1=1
提交后发现可以显示所有id对应的信息 - 在burp中尝试
1 union select 1,2,3
网页显示没有这么多列,尝试1 union select 1,2
显示成功,可以在1,2上注入 尝试
1 union select 1,group_concat(schema_name)from information_schema.schemata
显示所有数据库信息,可以注入2. 字符型注入(get)
- get提交查询,首先获取get提交的url,在url中对name进行注入
-1'order by 2--+
显示正常,输入-1'order by 3--+
报错,所以该数据库有2个字段 输入
-1'union select 1,group_concat(schema_name)from information_schema.schemata--+
显示所有数据库信息,可以注入3. 搜索型注入
- 模糊搜索,sql语句用的是like,语句构成是
%name%'
尝试查询后发现有三个字段 构造语句
l%' union select 1,2,group_concat(schema_name)from information_schema.schemata#
显示所有数据库信息,可以注入4. xx型注入
- 不知道注入类型,尝试构造语句
'union select 1,2#
显示报错,报错中显示闭合为')
- 构造语句
')union select 1,2,3#
显示没有这么多列,尝试')unioin select 1,2#
成功显示 尝试
')union select 1,group_concat(schema_name)from information_schema.schemata#
显示所有数据库信息,可以注入5. “insert/update”注入
代码错误,无法测试
6. “delete”注入
代码错误,无法测试
7. “http header”注入
- 登录后会显示登录ip、UA、http accept以及使用的端口,所以可以通过抓包来修改这些信息,以实现sql注入
抓包后再UA处使用
' and extractvalue(1,concat(0x7e,(select @@version),0x7e)) and 'a'='a
实现sql注入8. 盲注(base on boolian)
- 尝试后发现没有报错信息,只能尝试盲注
输入
kobe' and ascii(substr(database(),1,1))=112#
后返回kobe的信息,如果更改112
这个信息,则会返回您输入的username不存在,请重新输入
9. 盲注(base on time)
尝试输入
kobe' and sleep(5)#
测试,发现等待5秒后才会显示,这里可以延时注入。10.宽字节注入
- 随意输入后,抓包修改输入的内容为
kobe%df' or 1=1#
- 网页显示当前数据库的所有信息
RCE
- RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
- 远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口 远程代码执行
因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,这就造成了远程代码执行漏洞。不管是使用了代码执行的函数,还是使用了不安全的反序列化等。1. exec"ping"
- 输入ip后会返回该ip的ping
- 输入
127.0.0.1 & whoami
显示ping的回显并显示出当前用户 输入
127.0.0.1 & ls
显示ping的回显并显示当前目录下的所有文件2. exec"evel"
- 随意输入字符后提交,报错
- 该报错显示这里可以执行php函数
在对话框输入
phpinfo();
提交后显示PHP信息file inclusion(文件包含漏洞)
- 文件包含是一个功能。在各种开发语言中都提供了内置的文件包含函数,其中可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。
- 大多数情况下,文件包含函数中包含的代码文件时固定的,因此也不会出现安全问题。但是有时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传递进来,这种情况下,有可能会引发文件包含漏洞。攻击者会指定一个文件让包含函数去执行,从而造成恶意操作。
- 本地文件包含漏洞
仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从而读取系统的敏感信息。 远程文件包含漏洞
能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码1. file inclusion(local)
- 选择需要查询的人,即可查询相应的资料
抓包后修改提交的部分,修改为
../fileinclude.php
显示概述部分的内容2. file inclusion(remote)
- 抓包修改提交的内容,修改参数为
http://xss.com
提交,发现包含成功
不安全的文件下载
文件下载功能在很多web系统上都会出现,一般我们点击下载链接后会向后台发送一个下载请求,一般这个请求会包含一个需下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
1. 不安全的文件下载
- 点击下载的图,然后进行抓包,修改下载路径为
../../sqli/sqli.php
获得下载的sqli文件
不安全的文件上传漏洞
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断,比如指定的类型、后缀名、大小等,然后将其按照设计的格式进行重命名后储存在指定的目录。如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击者可能会上传一些恶意的文件
1. 客户端检查
- 将文件名改为jpg后缀,上传的时候抓包
- 将包中的jpg后缀修改为php,上传成功
打开phpinfo的网址,显示phpinfo信息
2. MIME校验
- 将phpinfo.php上传,并抓包
- 修改Content-Type的值为
image/jpeg
上传成功,访问phpinfo的网址,显示phpinfo信息
3. getimageszie校验
- 上传一个图片马
- 使用文件包含漏洞访问该图片马
显示phpinfo信息
越权
- 如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。
- 水平越权就是用别人的卡
垂直越权是用一万的卡刷一个亿
1. 水平越权
- 根据提示登录lucy的账号,点击查看个人信息
在url中出现
username=lucy
字段,修改为username=lili
即可查看lili的个人信息2. 垂直越权
- 使用admin账号登录获取cookie
- 在admin账号下添加用户,并抓包
- 使用pikachu账号登录,获取cookie
- 将添加用户的包的cookie修改为pikachu的cookie
刷新页面,发现添加成功
目录遍历漏洞
- 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能更加灵活。当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。在这个过程中,如果后台没有对前端传来的值进行严格的安全考虑,则攻击者可能会通过
../
这样的手段让后台打开或者执行一些其他的文件 通常的绕过方法有:
- 加密参数传递的数据
使用base64编码 - 编码绕过
url编码 - 目录限定绕过
00截断 - 绕过文件后缀过滤
使用某些特殊符号~
绕过 绕过来路验证
修改HTTP referer1. 目录遍历
- 加密参数传递的数据
- 点击网页中的随意一个url,发现网站的url中包含
title=jarheads.php
对这个title赋值为
../../../test/phpinfo.txt
即可查看网站的phpinfo信息敏感信息泄露
- 由于后台人员的疏忽或者不当的设计,导致不应该出现在前端的数据被轻易的访问到。
比如:
- 通过访问url下的目录,直接列出目录下的文件列表
- 输入错误的url参数后报错信息里包含操作系统、中间件、开发语言的版本或者其他信息
- 前端的源码中包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码
1. 敏感信息泄露
- 查看源码,发现源码中包含测试账号,登录成功
- 要求是找到abc,直接尝试url中输入abc.php,成功
帐号和密码错误信息分别显示,可以暴力破解
PHP反序列化
- 序列化就是把一个对象编程可以传输的字符串
- 反序列化就是把被序列化的字符串还原成为对象,然后在接下来的代码中继续使用
序列化和反序列化本身没有什么问题,但是如果反序列化的内容时用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题
1. 反序列化
xml外部实体注入漏洞(XXE)
1. XXE漏洞
URL重定向
- 不安全的url跳转
如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而有没有做判断的话就可能发生“跳错对象”的问题。
1. 不安全的URL跳转
- 对四个超链接进行点击
- 测试发现第三个可以跳转页面
- 抓包,将跳转的url修改为其他网站
跳转成功
服务器端请求伪造(SSRF)
形成原因大都是由服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
1. SSRF(curl)
- 点击超链接,发现SSRF的url
对url中的地址进行修改,即可跳转到其他网站
2. SSRF(get_content)
- 点击超链接,修改file地址
- 加载该地址,即可访问相应的文件
- GET请求可以被缓存
- GET请求保留在浏览器历史记录中
- GET请求可被收藏为书签
- GET请求不应在处理敏感数据时使用
- GET请求有长度限制
- GET请求只应当用于返回数据
- POST请求不会被缓存
- POST请求不会保留在浏览器历史记录中
- POST请求不能被收藏为书签
- POST请求对数据长度没有要求
- 盲打就是不知道后台有没有xss的情况下,尽可能多的输入xss代码留言,如果后台有人登录,那么就可以获得后台的cookie或者其他权限
- MySQL在使用GKB编码的时候,会认为两个字符为一个汉字。
- 宽字节注入主要是吃掉
\
,所以一般时候加一个%df
或者加奇数个%df
即可。
《pikachu靶机练习》链接:https://xdym11235.com/archives/19.html
具体版权规定详见侧栏版权说明页面