Ist es möglich, eine Funktion auszuführen, die Code aus einem String auf dem Stack ausführt?

8
%Vor%     
user389094 11.07.2010, 23:54
quelle

3 Antworten

8

Sortieren, aber nicht wirklich, es gibt kein eval() in c, wie in vielen Skriptsprachen .

Was Sie jedoch beschreiben, ist eine Art Buffer Overflow-Exploit .

Wo Sie eine Zeichenfolge verwenden, um "Code" (nicht C-Syntax, aber Maschinencode) in den Adressraum nach dem Puffer zu schreiben. Hier ist ein nettes kleines Tutorial des Themas.

Verwenden Sie diese Informationen nicht zum Schreiben eines Virus: (

    
Stephen 12.07.2010 00:03
quelle
5

Sie können libtcc verwenden, um den C-Quellcode zu kompilieren und auszuführen:

%Vor%

Ein paar Probleme:

  1. Sie können libtcc nur für eine unterstützte Architektur kompilieren.
  2. Sie müssen eine main Funktion haben.
dreamlax 12.07.2010 00:38
quelle
2

Sicher ist es möglich. Pufferüberlauf-Exploits verwenden es.

Siehe Shellcode für welche Art von Strings Sie platzieren können.

Grundsätzlich können Sie den Maschinencode auf den Stapel legen und zur Adresse springen. Dies führt zur Ausführung (wenn das Betriebssystem / die Maschine dies zulässt, siehe NX-Bit ).

Sie könnten vielleicht sogar versuchen, einen Memcpy von einer Funktionsadresse in einen String auf dem Stack zu schreiben und dann versuchen, zu der Adresse auf dem Stack zu springen.

    
Aryabhatta 11.07.2010 23:57
quelle

Tags und Links