Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C/C++ Shellcode per Parameter übergeben

Diskussion: C/C++ Shellcode per Parameter übergeben im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Heyho, ich schreibe gerade ein Mini-Funktion, die die Aufgabe hat Shellcode auszuführen. Der Code soll einfach als Parameter übergeben ...

Antwort
Alt 07.09.11, 23:45   #1 (permalink)
 
Registriert seit: 28.03.10
aldituete Leistung: Facit NTK
Likes: 0
Talking C/C++ Shellcode per Parameter übergeben

Anzeige

Heyho,

ich schreibe gerade ein Mini-Funktion, die die Aufgabe hat Shellcode auszuführen. Der Code soll einfach als Parameter übergeben werden.

Hier ist der Code:

Code:
int main(int argc, char *argv[] ) {
        void (*code)() = (void(*)())argv[1];
        code();
    return 0;
}
Wenn ich das Programm aufrufe:
Code:
programm /x00/x00/x00/x00(Mein Shellcode)
Kommt leider die Meldung, dass das Programm nicht mehr funktioniert. Beim kompilieren kriege ich kein Fehler. Hat vll. jemand eine Idee?

PS: Achja ich hab' nicht den geringsten Schimmer von C/C++. Ich hab' mir den Code nur zusammengereimt.
aldituete ist offline   Mit Zitat antworten
Alt 08.09.11, 10:33   #2 (permalink)
 
Benutzerbild von bad_alloc
 
Registriert seit: 27.12.07
bad_alloc Leistung: 8086
Likes: 39
Standard

Zitat:
Kommt leider die Meldung, dass das Programm nicht mehr funktioniert. Beim kompilieren kriege ich kein Fehler.
Ich nehme mal an, du meinst damit eine Windows 7 Fehlermeldung? Unter Win7 sollte eigentlich DEP (Data Execution Prevention) dafür verantwortlich sein, die den Shellcode erkennt und die Ausführung unterbindet. Afaik kann man die selektiv deaktivieren, wie genau weiß ich aber nicht mehr.
__________________
You shoot yourself in somebody else's foot.|Dann gabs da noch den Mathematiker der P?=NP in O(1) erklärte.
|[A]| = p(·,|[A]|)+1
bad_alloc ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 08.09.11, 12:32   #3 (permalink)
Themenstarter
 
Registriert seit: 28.03.10
aldituete Leistung: Facit NTK
Likes: 0
Standard Mmh

Das witzige ist, dass alles glatt geht, wenn ich den Shellcode direkt imProgramm behalte. Vll. klappt es ja, wenn ich den Code von einer Txt einlesen lasse.

Danke schonmal
aldituete ist offline   Mit Zitat antworten
Alt 08.09.11, 13:42   #4 (permalink)
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

Die Kommandozeile ist ein String.
/x00 wird also zu 0x2F 0x78 0x30
+++ATH0 ist offline   Mit Zitat antworten
Alt 08.09.11, 13:51   #5 (permalink)
Themenstarter
 
Registriert seit: 28.03.10
aldituete Leistung: Facit NTK
Likes: 0
Standard Ooh

Ok das klärt einiges!
Mmh und wie kann ich die Leerzeichen wieder in Backslashes umwandeln?

Code:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;

int main() {
    ifstream fin;
    string buffer;
    buffer.clear();
    fin.open("datei.txt"); 
    getline(fin,buffer,'\n');
    
    std::replace(buffer, buffer + ::strlen(buffer), ' ', '\');
    
    void (*code)() = (void(*)())buffer.c_str();
    code();
    
    fin.close();
    return 0;
}
Leider kriege ich beim kompilieren folgenden Fehler:
Zitat:
15:47: error: cannot convert 'std::string' to 'const char*' for argument '1' to 'size_t strlen<const char*>'
Das Problem ist also hier:
Code:
std::replace(buffer, buffer + ::strlen(buffer), ' ', '\');
Soweit ich weiß ist Buffer aber doch schon ein String und müsste eigentlich gar nicht umgewandelt werden.

?
aldituete ist offline   Mit Zitat antworten
Alt 09.09.11, 17:48   #6 (permalink)
 
Benutzerbild von bad_alloc
 
Registriert seit: 27.12.07
bad_alloc Leistung: 8086
Likes: 39
Standard

strlen ist für alte C-Strings ausgelegt. Du kannst strlen(buffer.c_str()) nutzen. Besser ist es aber das von std::string bereitgestellte buffer.size() zu benutzen. Generell sollte man alte C-Funktionen vermeiden, wenn man C++ Code schreiben will.
__________________
You shoot yourself in somebody else's foot.|Dann gabs da noch den Mathematiker der P?=NP in O(1) erklärte.
|[A]| = p(·,|[A]|)+1
bad_alloc ist offline   Mit Zitat antworten
Alt 15.09.11, 21:21   #7 (permalink)
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Likes: 32
Standard

Zitat:
Zitat von bad_alloc Beitrag anzeigen
strlen ist für alte C-Strings ausgelegt. Du kannst strlen(buffer.c_str()) nutzen. Besser ist es aber das von std::string bereitgestellte buffer.size() zu benutzen. Generell sollte man alte C-Funktionen vermeiden, wenn man C++ Code schreiben will.
... und außerdem sollte sich /x00 im Shellcode nicht mit strlen() vereinbaren lassen, da Interpretation als Null-Terminierung.
Hackse ist offline   Mit Zitat antworten
Antwort

Stichworte
c++, exe, opcode, shellcode
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C/C++ Shellcode per Parameter übergeben
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
C und Parameter an Funktionen übergeben Diokhan Code Kitchen 8 16.09.11 01:21
ASM cdecl-shellcode 90nop Code Kitchen 2 23.02.10 18:43
Einem Timer in VB6 Parameter übergeben?? the.mole Code Kitchen 8 17.10.05 11:18
Shellcode KDSBest Code Kitchen 3 24.12.03 13:25
Shellcode (In)security allgemein 1 17.11.03 15:54


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61