[NISACTF 2022]babyserialize slackmoon的WriteUp

75 阅读1分钟

[NISACTF 2022]babyserialize slackmoon的WriteUp

(1)eval反推到__invoke 这⾥先看到eval,⽽eval中的变量可控,所以肯定是代码执⾏,⽽eval⼜在__invoke魔术⽅法 中。 __invoke魔术⽅法是对象被当做函数进⾏调⽤的时候所触发 这⾥就反推看哪⾥⽤到了类似a()这种的 (2)__invoke反推到__toString 在Ilovetxw类的toString⽅法中,返回了return $bb; __ToString⽅法,是对象被当做字符串的时候进⾏⾃动调⽤ (3)__toString反推到__set 在four的__set中,调⽤了strolower⽅法。如果不清楚,可以具体看下⽂档。 (4)从__set反推到__call __set:对不存在或者不可访问的变量进⾏赋值就⾃动调⽤ __call:对不存在的⽅法或者不可访问的⽅法进⾏调⽤就⾃动调⽤ 这⾥反推到Ilovetxw中的__call⽅法,⽽__call⽅法⼜可直接反推到TianXiWei中的__wakeup

整体流程思路 :Class NISA -> __invoke()Class Ilovetxw -> __toString()Class four -> __set()Class Ilovetxw -> __call()Class TianXiWei -> __wakeup()由于上⾯的思路是倒推出的,所以编写POC的时候,要反着编写;

CTF1.png