2017-10-26 5 views
0

Ich arbeite an einem System Sicherheitsprojekt mit dem Thema: Buffe Roverflow-Angriff. Ich habe ein Programm und den Quellcode, mit dem ich root-Berechtigungen erhalten sollte. Ich habe das Problem durch einen Zufallsgenerator Kanarienvogel verursacht wird, zu Beginn ot das Programm des Zufallszahlengenerator initialisiert wird:Pufferüberlauf-Angriff, um einen zufälligen Kanarienvogel zu regenerieren?

srand(time(NULL)^(getpid() << 16)); 

später auf dem Kanarienvogel von

canary = rand(); 

Meine Frage gesetzt wird: Ist Kann man den Kanarienvogel regenerieren? Ich möchte das Salz neu generieren (Zeit (NULL) gibt die Zeit seit 1970 in Sekunden zurück und pid ist konstant, wie das Programm startet) und dann den Kanarienvogel durch den Aufruf von rand() erhalten. Ich bin mit keiner Skriptsprache vertraut und habe nicht viel Linux-Erfahrung, also hoffe ich, keine Zeit mit einer Lösung zu verschwenden, die niemals funktionieren würde. Vielen Dank im Voraus! :)

Antwort

0

Ja, es ist möglich. Alles, was Sie wissen müssen, ist die Startzeit und die Prozess-ID des Programms. Sie können diese Informationen über die Befehlszeile abrufen, indem Sie ps -eo pid,cmd,lstart | grep «program-name» eingeben. Angenommen, das Programm, das Sie interessiert sind, ist test genannt:

$ ps -eo pid,cmd,lstart | grep test 
    26798 ./test      Thu Oct 26 22:03:52 2017 

Die Zahl zu Beginn der Ausgangsleitung ist der Prozess-ID und der Zeitpunkt, an das dieser Prozess am Ende der gestartet ist Linie. Sie können dies leicht zu einem Unix-Zeitstempel konvertieren:

$ date --date='Thu Oct 26 22:03:52 2017' '+%s' 
1509055432 

ich die letzte Mal überprüft wurde PHP immer noch den gleichen Zufallszahlengenerator verwendet wird. So können Sie PHP verwenden, den Kanarienvogel zu berechnen: (. Wenn Sie nicht PHP haben, können Sie ganz einfach Ihre eigene C-Anwendung rollen könnte für Sie diese Berechnung zu tun)

$ php -r 'srand(1509055432^(26798 << 16)); echo rand()."\n";' 
1670313680 

Es sollte recht sein offensichtlich, dass srand(time(NULL)) ist überhaupt nicht von Nutzen, wenn Sie Werte generieren möchten, die schwer zu erraten sind. Ein besserer Ansatz wäre, stattdessen Bytes von \dev\urandom zu holen.

+0

Sind Sie sicher, dass PHP und C den gleichen Rand-Generator verwenden? Wenn ich es mit meiner eigenen geschriebenen C-Anwendung versuche, funktioniert es, aber mit PHP tut es nicht. – C4ptainC4mp

+0

Die Implementierung von 'rand()' scheint plattformabhängig zu sein. In Debian bekomme ich die gleichen Ergebnisse mit C und PHP. In OS X gibt das C-Programm ein anderes Ergebnis. Sie sollten in Ordnung sein, solange Sie Ihr Programm mit der gleichen Bibliothek wie die Zielanwendung kompilieren. –

Verwandte Themen