【Pikachu靶场】安装部署通关详解超详细!!!(持续更新)

安装部署

Pikachu靶场,是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。使用世界上最好的语言PHP进行开发-_-,数据库使用的是mysql,因此运行Pikachu你需要提前安装好"PHP+MYSQL+中间件(如apache,nginx等)"的基础环境。

1、下载

把下载下来的pikachu文件夹放到web服务器根目录下

[root@iZf8z2tte7i7r0cdyrk919Z html]# wget https://github.com/zhuifengshaonianhanlu/pikachu/archive/refs/heads/master.zip
[root@iZf8z2tte7i7r0cdyrk919Z html]# unzip master.zip (放在/var/www/html目录下)
简写文件名称[root@iZf8z2tte7i7r0cdyrk919Z html]# sudo mv pikachu-master/ pikachu


2、修改配置文件

根据实际情况修改inc/config.inc.php里面的数据库连接配置

修改配置文件(写入数据库密码)修改这个文件 ==> /var/www/html/pikachu/inc/config.inc.php


3、初始化安装

访问http://x.x.x.x/pikachu,会有一个红色的热情提示"欢迎使用,pikachu还没有初始化,点击进行初始化安装!",点击即可完成安装。

//如果此步骤遇到空白页面无法初始化,需要下载插件。

[root@iZf8z2tte7i7r0cdyrk919Z /]# yum install php-mysqli

 刷题记录

一、暴力破解

“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!

1、基于表单的暴力破解

1)使用Burp Suite抓取登录过程表单,发送至爆破模块intrder。

2)设置攻击载荷(集束炸弹)

  • 有效载荷1导入用户名字典
  • 有效载荷2导入密码字典

观察长度,三个账号被爆破出来

登录测试,登录成功。

2、验证码绕过(on server)

验证码不过期,可以被重复利用

1)随便输入内容抓包,测试多次修改密码发现验证码为改变,存在验证码不过期情况。

2)登录包发送至爆破模块intrder(集束炸弹)。

3)爆破出账号和口令。

3、验证码绕过(on client)

前端校验

1)随便输入,点击登录,出现弹窗,很有可能是前端校验

方法一:

  • 前端通过调试器删除验证码模块
  • 集束炸弹暴力破解

方法二:

  • 浏览器禁用JS模块
  • 集束炸弹暴力破解

方法三

  • 直接在数据包删除验证码字段
  • 集束炸弹暴力破解

用方法一,找到验证码校验模块 并删除,然后进行暴力破解。

爆破登录成功

4、token防爆破?

Token是一种用于身份验证和授权的令牌。通常由服务器生成并返回给客户端,在客户端持久保存并在每次请求时发送给服务器。

1)随便输入抓包,多了一个token值。

2)通过重发器修改口令重发数据包,系统提示token错误,每一次登录的返回包会带有token相关数据用于下一次的登录认证。

3)暴力破解

  • 草叉模式爆破
  • 正则匹配返回数据加入爆破

选择爆破模式-草叉模式,有效载荷-口令、token

设置口令字典

设置burp,intruder-options-grep extract,搜索下token,找到对应的值,双击自动填充表达式 

将抓包的token值填加进去

设置线程为1

爆破口令成功

二、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攻击的字符输入;
  输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

1、反射型XSS (gest)

1)输入长度有限,不能插入一句完整的JS代码。

2)直接在 URL中插入JS代码or修改源代码可输入的长度值。

<script>alert(1)</script>
  • 直接在 URL中插入JS代码

  • 修改源代码可输入的长度值之后可以插入完整的JS代码,JS代码被执行出现弹窗。

2、反射型XSS (post)

1)根据提示,先登录系统。

2)插入JS代码被执行,出现弹窗。

<script>alert(1)</script>

3)根据作者提示,我们可以尝试登录后尝试用payload注入爆出cookie。

<script>alert(document.cookie)</script>

3、存储型xss

1)输入1点击submit,数据会存储在页面。

2)插入JS代码被执行,因为数据会存储,所以每次点击这个页面都会执行JS代码。

4、DOM型XSS

DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。HTML的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中的所有结点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。

DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。

  • 插入到属性里

先随便输入个1,F12看“what do you see?”处回显了我们输入的内容,考虑是DOM型XSS,我们在标签a处植入代码测试,出现弹窗复现成功。

javascript:alert(1)

 5、DOM型XSS-X

与上一个类似,先随便输入一个1,观察回显将XSS代码插入到标签中,出现弹窗复现成功。

javascript:alert(1)

6、XSS之盲打

  • 这一关不是攻击类型而是一个攻击场景。
<script>alert(1)</script>

1)随便输入些什么,发现没有回显,根据提示考虑是登录后台后执行JS代码。

2)插入JS代码,然后登录后台查看,果然出现了弹窗,复现成功。

 7、XSS之过滤

1)输入“<script>alert(1)</script>”,观察页面回显只显示“>”,<script>标签被过滤,尝试其他标签,绕过成功,出现弹窗。

<a herf="#" onclick="alert(document.cookie)">

8、xss之htmlspecialchars

1)输入测试XSS代码“<script>alert(1)</script>”,未出现弹窗,但是通过查看源代码发现无论a标签还是herf属性都已做了编码处理。

2)通过观察,a标签的单引号未被过滤。

  • 闭合单引号,使用无尖角字符的JS代码。
#' onclick='alert(1)'

9、xss之href输出

上来还是最简单的JS代码进行测试,页面无回显,查看源代码发现尖角括号和单引号都被编码了。

<a>标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。利用JavaScript协议,出现弹窗。

javascript:alert(document.cookie)

10、xss之js输出

上来还是最简单的JS代码进行测试,页面无回显,查看源代码发现尖角括号和单引号未被编码也未被过过滤。

  • 考虑可以用’;闭合当前语句在用//注释掉老语句遗留下来的’;构造payload,出现弹窗构造payload为
';alert(1);//

回显弹窗,复现成功。

三、CSRF「跨站请求伪造」

CSRF全称Cross-site request forgery,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。

CRSF常常与XSS相混淆,CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

 1、CSRF(Get)

1)先根据提示登录账户

2)点击修改个人信息抓包,请求方法为GET。

3)构造请求URL


http://IP地址/ctf/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678900&add=%E6%9D%AD%E5%B7%9E&email=123%40.com

4)浏览器访问上面构造的URL,然后再刷新我们登录后vince的个人信息,发现已经变成我们构造URL中的信息了,复现成功。

 2、CRSF(Post)

1)在修改个人信息抓包,看到是POST方法传参,用Burp Suite自带插件生成CRSF Poc。

3)复制工具生成的URL

3)访问后发现个人信息已被修改,复现完毕。

3、CRSF(Token)

CSRF token防御CSRF的原理:在用户登录网站时生成一个唯一的token,然后将这个token嵌入到表单或请求中。当用户提交表单或请求时,服务器会验证token是否匹配用户会话中的token,如果不匹配则拒绝请求。这样可以防止攻击者利用用户的身份信息执行未经授权的操作。

抓包看,多了一个Token值,无法进行CRSF攻击。

四、Sql Inject(SQL注入)

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

1、数字型注入(POST)

1)抓包查看,通过修改id参数值,调用数据库的信息,回显不同信息。此处应为注入点。

数据库查询语句应为:

$id=$_POST['id']
select 字段1,字段2 from 表名 where id=1$id

2)使用order by查看列数。

  • order by 3 报错 ---> 不是3列
  • order by 2 没报错 ---> 判断是2列

3)判断显示位,也就是我们输入的内容在哪里被显示出来。这里可以看到第一个查询位显示在第一行逗号后面,第二个查询位显示在第二行逗号后面。id=负数目的是屏蔽id查询到的结果,让页面只显示我们输入的sql语句的内容。

4)查询数据库版本的名称。

id=-1 union select version(),database()

5)查询数据库表名。

group_connect:可以将同一个分组下的行拼接在一起。

table_name:表名

information_schema.tables:储存数据库表中的所有信息,包括表名、所属数据库、表的类型等。

table_schema:数据表所属的数据库名

union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

6)查询列名

column_name:列名

查询users表下的列

union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'

7)查询字段名

union select group_concat(username),group_concat(password) from users

查询username和password字段

8)解密

MD5解密,admin密码为123456。

2、字符型注入(GET)

1)随便输入,直接显示在URL中。

2)使用单引号测试,页面回显错误语句,存在SQL注入漏洞。

3)增加#注释掉后面 ,页面不再报错,判断为字符型注入。

4)order by测试,3报错,2不报错,判断是2列。

5)爆出数据库版本和数据库名

6)这里使用万能公式爆出用户名和口令。

1' or 1=1 #

3、搜索型注入

搜索型常用查询语句一般是

select * from 表名 where username like '%$name%'

1)输入单引号,报错回显。

2)增加注释符号#未报错,判断为字符型注入。

3)使用单引号闭合前面,使用#注释后面,使用万能公式爆出用户名和口令。

1' or 1=1 #

 5、XX型注入

1)单引号回显报错页面。

2)使用')进行闭合 ,和上面的一样。

1') or 1=1 #

4、insert/update注入

insert:存在于用户注册时候的过程,当用户注册新信息并提交服务器的时候,服务端采用insert来将信息插入数据库,下面是扯入数据的语句:

insert into users(username,password)values($username,$password);
                    列1    ,    列2            值1    ,     值2    

update:存在于更新用户的时候,下面是更新用户的语句:

update users set username=$username,password=$password where username=$username;

1)注册用户时抓包。

  • 输入单引号回显报错
  • ')#未报错,考虑是')闭合前面,#用于注释后面。

尝试闭合字段,成功显示注册页面。

payload

1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '

5、 delete注入

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谷要努力~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值