Уважаемые античатовцы!
Нужна помощь в реверсинге и объяснения бага Unserialize в PHP. Имею скрипт с такой функцией
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]retrieveFromCacheArray[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$identity[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$validtime[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]) {
if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]activated[/COLOR][COLOR="#007700"]) return[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$thisFile[/COLOR][COLOR="#007700"]= empty([/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"]) ?[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]jCacheDir[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$identity[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]".php"[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]jCacheDir[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"/"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$identity[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]".php"[/COLOR][COLOR="#007700"];
if (!empty([/COLOR][COLOR="#0000BB"]$validtime[/COLOR][COLOR="#007700"])) {
[/COLOR][COLOR="#0000BB"]$lastMod[/COLOR][COLOR="#007700"]= @[/COLOR][COLOR="#0000BB"]filemtime[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$thisFile[/COLOR][COLOR="#007700"]);
if ([/COLOR][COLOR="#0000BB"]time[/COLOR][COLOR="#007700"]() > ([/COLOR][COLOR="#0000BB"]$lastMod[/COLOR][COLOR="#007700"]+([/COLOR][COLOR="#0000BB"]$validtime[/COLOR][COLOR="#007700"]*[/COLOR][COLOR="#0000BB"]60[/COLOR][COLOR="#007700"]))) return[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]= @[/COLOR][COLOR="#0000BB"]fopen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$thisFile[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"r"[/COLOR][COLOR="#007700"]);
if ([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]&& @[/COLOR][COLOR="#0000BB"]flock[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]LOCK_SH[/COLOR][COLOR="#007700"])) {
[/COLOR][COLOR="#0000BB"]$contents[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];
while ([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]fread[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4096[/COLOR][COLOR="#007700"])) {[/COLOR][COLOR="#0000BB"]$contents[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]; }
[/COLOR][COLOR="#0000BB"]$contents[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$contents[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]fclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]);
return[/COLOR][COLOR="#0000BB"]unserialize[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$contents[/COLOR][COLOR="#007700"]);
}
@[/COLOR][COLOR="#0000BB"]fclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]);
return[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"];
}[/COLOR][/COLOR]
Пытался разобраться в материалах
http://www.xakep.ru/post/51883/default.asp
http://www.xakep.ru/post/52128/default.asp
но не понимаю куда смотреть - толи на UNSERIALIZE то ли на эту функцию
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]__construct[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$mask[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]null[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$prefix[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"general"[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$yyyymmdd[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]date[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"Ymd"[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$_conf[/COLOR][COLOR="#007700"]= array([/COLOR][COLOR="#DD0000"]'mode'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]0775[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'timeFormat'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'%Y-%m-%d:%H:%M:%S'[/COLOR][COLOR="#007700"]);
if (![/COLOR][COLOR="#0000BB"]is_dir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]VANDA_LOGDIR[/COLOR][COLOR="#007700"])) @[/COLOR][COLOR="#0000BB"]mkdir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]VANDA_LOGDIR[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0755[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]TRUE[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$_logFile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]VANDA_LOGDIR[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$prefix[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"_"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$yyyymmdd[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]".log"[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]_log[/COLOR][COLOR="#007700"]= &[/COLOR][COLOR="#0000BB"]Log[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]singleton[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'file'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_logFile[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$prefix[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_conf[/COLOR][COLOR="#007700"]);
if (isset([/COLOR][COLOR="#0000BB"]$mask[/COLOR][COLOR="#007700"]))[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]_log[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]setMask[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$mask[/COLOR][COLOR="#007700"]);
}[/COLOR][/COLOR]
и как они между собой должны быть связаны.
Вообщем хотелось бы поработать со спецом, который смог бы объяснить и помочь раскрутить эту багу в моем скрипте (если бага там есть).
Естественно, готов оплатить затраченное время на такой урок (за помощь).
Если кто готов помочь с этим - пожалуйста в личку скиньте асю или жабу.
Или давайте разберем пример тут
Всем огромное спасибо!
|