Finde die Sicherheitslücke ;)

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Finde die Sicherheitslücke ;)

Beitrag von cloidnerux » Mi Jan 16, 2013 2:32 pm

Man kann es mit Strg+C abwürgen?

Edit: Strg+X->Strg+C
Redundanz macht wiederholen unnötig.
quod erat expectandum

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Finde die Sicherheitslücke ;)

Beitrag von nufan » Mi Jan 16, 2013 2:47 pm

cloidnerux hat geschrieben:Man kann es mit Strg+X abwürgen?
Nein?! ^^ Wie gesagt gehts darum in das beschriebene if zu kommen. Stell dir vor, dass im if vor dem return irgendwelche Daten aus einer Datenbank gelesen und ausgegeben werden. Es geht nicht darum das Programm zu beenden, sondern die primitive Sicherheitsprüfung zu umgehen.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Finde die Sicherheitslücke ;)

Beitrag von Dirty Oerti » Mi Jan 16, 2013 4:11 pm

Ich sehe im Moment nur 1 Problem, vielleicht kommt man darüber ja näher an die Lösung?

Und zwar: Wenn ich bei der Frage nach dem Passwort (also der zweiten, die erste Abfrage die das Passwort setzt ist ja sozusagen schon getan, wenn ich meinen "Angriff" durchführe) ein Null-Byte als Antwort eingebe, dann müsste ich von strlen(input) den Wert 0 bekommen, würde also input [ 0 - 1] bzw input [ -1] auf 0 setzen.

Praktisch wäre natürlich, wenn an der Stelle im Speicher password[0] sitzen würde ... das ist aber nun nicht der Fall. Bin ich auf dem richtigen Weg?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Finde die Sicherheitslücke ;)

Beitrag von Dirty Oerti » Mi Jan 16, 2013 4:15 pm

Ok:
CTRL - D tut den Job :D
Nur so ganz verstehe ich noch nicht, warum ^^

*edit*
Doch nicht, funktioniert nur, wenn die EIngabe das Password + weitere Zeichen ist. Das hilft mir jetzt ja aber nicht weiter ...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Finde die Sicherheitslücke ;)

Beitrag von mfro » Mi Jan 16, 2013 5:04 pm

Dirty Oerti hat geschrieben:Bin ich auf dem richtigen Weg?
Das ist schon mal nicht ganz falsch, aber noch nicht die Lösung.

Die liegt in den (nicht korrekt verwendeten) Typen vergraben ;).
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Finde die Sicherheitslücke ;)

Beitrag von nufan » Mi Jan 16, 2013 5:50 pm

Dirty Oerti hat geschrieben:Bin ich auf dem richtigen Weg?
Nein ^^ Vergiss nicht, dass du normal noch ein Newline-Zeichen im String hast. Also diese ganzen Versuche mit dem Index -1 sind nicht richtig. Und selbst wenn man auf Index -1 kommt, könnte man dadurch nicht das if ausführen.
mfro hat geschrieben:Die liegt in den (nicht korrekt verwendeten) Typen vergraben ;).
Naja... eventuell wenn du eine seeeehr weite Definition von "(nicht korrekt verwendeten) Typen" hast, sonst eher nicht ^^

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Finde die Sicherheitslücke ;)

Beitrag von Dirty Oerti » Mi Jan 16, 2013 6:17 pm

dani93 hat geschrieben: Nein ^^ Vergiss nicht, dass du normal noch ein Newline-Zeichen im String hast.
Tut mir Leid, aber das stimmt nicht. Wenn du die Eingabe mit CTRL-D abbrichts (gleich beim ersten mal), dann steht in input NUR 0-Zeichen. Dein strlen liefert also den Wert 0.
Guck:
[daniel@camino problem1]$ gdb screenlock
GNU gdb (GDB) 7.5.1
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/daniel/Projekte/c/security/problem1/screenlock...done.
(gdb) break
break break-range
(gdb) break screenlock.c:27
Breakpoint 1 at 0x4007d4: file screenlock.c, line 27.
(gdb) run
Starting program: /home/daniel/Projekte/c/security/problem1/screenlock
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
----- Vulnerable Screen Locker -----
Enter password: test

Screen locked


Enter password to unlock:
Breakpoint 1, main (argc=1, argv=0x7fffffffe2c8) at screenlock.c:27
27 inputLength = strlen( input );
(gdb) info locals
password = "test", '\000' <repeats 1019 times>
input = '\000' <repeats 1023 times>
inputLength = 0
passwordLength = 4
(gdb) step
28 input[inputLength - 1] = '\0';
(gdb) info locals
password = "test", '\000' <repeats 1019 times>
input = '\000' <repeats 1023 times>
inputLength = 0
passwordLength = 4
(gdb) step
29 --inputLength;
(gdb) info locals
password = "test", '\000' <repeats 1019 times>
input = '\000' <repeats 1023 times>
inputLength = 0
passwordLength = 4
(gdb) step
30 if( passwordLength == inputLength && strcmp( input, password ) == 0 )
(gdb) info locals
password = "test", '\000' <repeats 1019 times>
input = '\000' <repeats 1023 times>
inputLength = -1
passwordLength = 4
(gdb)
dani93 hat geschrieben:Also diese ganzen Versuche mit dem Index -1 sind nicht richtig. Und selbst wenn man auf Index -1 kommt, könnte man dadurch nicht das if ausführen.
Damit hast du aber wahrscheinlich Recht :D Ich ändere damit ja höchstens etwas im Stack Frame von main, und das wirkt sich erst beim return aus. Und zu dem komme ich natürlich nur wenn ich das if ausgeführt bekomme.

Aber ich überlege mal weiter ^^
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Finde die Sicherheitslücke ;)

Beitrag von mfro » Mi Jan 16, 2013 6:23 pm

dani93 hat geschrieben:
Dirty Oerti hat geschrieben:Bin ich auf dem richtigen Weg?
Nein ^^ Vergiss nicht, dass du normal noch ein Newline-Zeichen im String hast. Also diese ganzen Versuche mit dem Index -1 sind nicht richtig. Und selbst wenn man auf Index -1 kommt, könnte man dadurch nicht das if ausführen.
mfro hat geschrieben:Die liegt in den (nicht korrekt verwendeten) Typen vergraben ;).
Naja... eventuell wenn du eine seeeehr weite Definition von "(nicht korrekt verwendeten) Typen" hast, sonst eher nicht ^^
Sorry, ich war nach (zu) flüchtigem Lesen auf dem falschen Pfad (dachte, inputLength könne negativ werden, aber das stimmt nicht).

Dafür kenne ich jetzt das Passwort. Es beginnt mit einem Sonderzeichen...
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Finde die Sicherheitslücke ;)

Beitrag von nufan » Mi Jan 16, 2013 6:29 pm

Dirty Oerti hat geschrieben:
dani93 hat geschrieben: Nein ^^ Vergiss nicht, dass du normal noch ein Newline-Zeichen im String hast.
Tut mir Leid, aber das stimmt nicht. Wenn du die Eingabe mit CTRL-D abbrichts (gleich beim ersten mal), dann steht in input NUR 0-Zeichen. Dein strlen liefert also den Wert 0.
Jop, hab ich schon gemerkt, sorry. Aber das mein ich nicht und es bringt dir nicht wirklich was.
mfro hat geschrieben:Dafür kenne ich jetzt das Passwort. Es beginnt mit einem Sonderzeichen...
?

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Finde die Sicherheitslücke ;)

Beitrag von mfro » Mi Jan 16, 2013 6:30 pm

dani93 hat geschrieben: ?
Nein. Ein anderes: %
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Antworten