pikachu靶场:php反序列化漏洞

pikachu靶场:php反序列化漏洞

文章目录

代码审计

像这种反序列化的代码基本都是代码审计出的

php 复制代码
// 定义一个名为S的类,该类有一个属性$test和一个构造函数  
class S{  
    var $test = "pikachu";  // $test是一个属性,它的默认值为"pikachu"  
      
    // 定义一个构造函数,每当创建S类的实例时,都会执行这个函数  
    function __construct(){  
        echo $this->test;  // 输出$this->test的值,即"pikachu"  
    }  
}  
  
  
// 这行代码似乎是尝试序列化和反序列化一个对象,但并未使用结果,且可能存在安全风险  
//O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}  
  
// 初始化一个空字符串变量$html,用来构建HTML输出  
$html='';  
  
// 检查$_POST数组中是否有键为'o'的元素,如果有则执行下面的代码块  
if(isset($_POST['o'])){  
    // 从$_POST数组中获取键为'o'的值,并赋值给变量$s  
    $s = $_POST['o'];  
      
    // 尝试反序列化$s,如果失败则静默失败(不会显示错误信息),成功则赋值给变量$unser  
    if(!@$unser = unserialize($s)){  
        // 如果反序列化失败,则打印出错误信息,并赋值空字符串给$html  
        var_dump($unser);  // 打印出$unser的值(如果反序列化失败的话,会是false)  
        $html.="<p>大兄弟,来点劲爆点儿的!</p>";  // 构建HTML输出,显示一条消息:"大兄弟,来点劲爆点儿的!"  
    }else{  
        // 如果反序列化成功,则构建HTML输出,显示$unser的属性$test的值  
        $html.="<p>{$unser->test}</p>";  // 显示属性$test的值,如果反序列化成功的话,会是"pikachu"  
    }  
}

首先,这段代码中的unserialize()函数可能会导致安全问题。unserialize()函数用于将序列化的字符串转换回原来的对象或值。然而,如果序列化的数据中包含恶意代码,那么在反序列化时,这段恶意代码可能会被执行,从而带来安全风险。

在这段代码中,通过POST请求接收一个序列化的字符串,并将其反序列化为一个S类的对象。如果这个序列化的字符串中包含恶意代码,那么在反序列化时,这段恶意代码可能会被执行,从而造成安全问题。

为了解决这个问题,你可以对反序列化的对象进行限制,只允许符合规定的类或类型被反序列化。另外,你也可以使用其他方法来处理序列化的数据,例如使用json_decode()函数将序列化的字符串转换为JSON格式的字符串,然后对JSON数据进行验证和处理。

另外,这段代码中还使用了@操作符来抑制错误信息。这可能会导致一些错误被忽略,从而使得代码中的问题难以被发现和解决。建议在开发过程中避免使用@操作符,以便及时发现和处理错误。

除此之外,代码中的变量命名也需要改进。例如,变量 h t m l 的命名不够明确,不利于代码的可读性和可维护性。建议使用更具描述性的变量名,例如 html的命名不够明确,不利于代码的可读性和可维护性。建议使用更具描述性的变量名,例如 html的命名不够明确,不利于代码的可读性和可维护性。建议使用更具描述性的变量名,例如responseHtml。

漏洞利用

分析对象进行序列化构造

这个对象名就一个字S,并且只有一个属性,属性名是字符串类型,一共是4个字符,对内容进行恶意构造:

text 复制代码
O:1:"S":1:{s:4:"test";s:49:"<a href="javascript:alert(/xss/)" >onclice me</a>";}

进行攻击

利用完成

相关推荐
持敬chijing1 小时前
CTFshow-WEB-新年好?解题思路
安全·web安全·网络安全·网络攻击模型
treesforest5 小时前
网络安全中的IP地址查询:从日志里的一条线索到溯源的关键证据
网络·web安全·php
未来之窗软件服务5 小时前
自考大学★信息安全●简答题—东方仙盟
安全·web安全·仙盟创梦ide·东方仙盟
wjcroom7 小时前
实现老型号HP打印机手机无线打印的一些步骤和方法
开发语言·智能手机·php
Days20507 小时前
时间胶囊项目正式发布
javascript·gpt·php
DevUp8 小时前
老站往哪搬:织梦、帝国、PHPCMS 的出路
后端·php·cms
卓怡学长8 小时前
w213基于Spring Boot框架的Web安全学习系统的设计与实现
java·spring boot·spring·web安全·intellij-idea
JaguarJack9 小时前
用 Jev 与 Laravel AI SDK 检测垃圾邮件和自动回复
后端·ai·php·laravel·服务端
lie..19 小时前
30天从零开始学AI应用开发(Day 12):像产品一样稳:流式输出、报错重试、花钱控制
开发语言·人工智能·php
郑州光合科技余经理20 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程