"We are back" « oc.at

c++ probs mit zeigern!

LakeBodom 01.10.2002 - 14:05 3098 39
Posts

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
naja.

cin >> i1 >> i2;

ist auch nicht wirklich komplizierter.

gut, geht halt nur in c++. nur wenn einem das egal ist, ob scanf unsafe ist, dann ist es kein wunder, dass so viele sicherheitsluecken existieren.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Na welche Sicherheitslücken hast du denn bei einer Usereingabe mit scanf? Würd mich echt interessieren....

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Das ist das simpelste Basic an Sicherheitsluecke ueberhaupt.

Du machst so was:

char buf[512];
scanf("%s", buf);

--> peng

es wird der stack ueberschrieben, und alles ist roger :)

das gleiche geht auch, wenn der puffer per malloc() alloziert wurde. nur ist es dann ein bisschen muehsamer. nichtsdestotrotz existieren tausende exploits auch von dieser sorte.

wie's geht, ist hier nachzulesen:

http://www.phrack.com/show.php?p=49&a=14

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Und wo genau ist da die Sicherheitslücke für eine Usereingabe?

Ich mein für meine Datenbank Applikation die alle Masterpasswörter der Nationalbank ausließt würd ich auch nicht scanf verwenden ;), aber ich würd sagen um eine Eingabe aus stdin auszulesen, und dass schön formatiert reicht es :D

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Jemand weiss, dass du mit dem Programm arbeitest, schickt dir ein File, das du damit oeffnen sollst --> Peng.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Entweder versteh ich hier was falsch, oder du... gehts nicht eigentlich darum eine Eingabe von der TASTATUR einzulesen? Für file öffnen verwendet man sowieso entweder ifstream Klassen oder die f* funktionen....

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Man kann ja auch ein File reinpipen mit <.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
wie meinst das jetzt? Wenn ich ein Programm hab:

Code:
...
printf("Geben sie einen text ein: ");
scanf("%s",text);
....

Kann man eine File reinpipen?

Versteh mich nicht falsch, geb dir schon recht das scanf keine ideale Lösung ist, nur find ich das es für diesen Zweck vollkommen ausreichend ist!

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Naja, musst es ja nur so aufrufen:

programm < boesesfile.txt

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Aso als Kommandozeilen Parameter. Okay das stimmt, Kommandozeilen Parameter einfach mit scanf auslesen ohne gute checks vorher ist wirklich schlecht ;)

Also sind ma uns einig des scanf für einfach 0815 Programme reicht, für sichere Anwendungen allerdings nicht mehr ;)

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
ist schon klar, wenn's so ein 0815 zeug ist, dann ist es egal. aber oft wird dann solcher pfusch irgendwo eingesetzt, wofuer er urspruenglicherweise nicht gedacht war, und dann kracht's. das sollte man halt doch immer im hinterkopf behalten.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Klar, aber solange man es selber besser macht, kann man wenigstens sagen: ich habs ja gsagt, oder beim mir wär das nicht passiert :D

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3242
oda man verwendet an pfusch weiter, weil man sich arbeit ersparen will und hats auch drin und des einlesen is genauso simpel, bis auf das, dass du an buffer brauchst
mit GETS(*buffer) liest ein
und mit SSCANF(buffer,"%d",$i) machst es im prinzip wie bei scanf :)

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11353
Wie man mit gets() ein funktionierendes Programm schreiben kann, ist mir ein Rätsel. Egal was man macht, die Eingabezeile kann länger sein als der Buffer, und schon krachts.

Wenns nach mir ginge, gehört diese Funktion aus der Runtime-Library gelöscht, genauso wie printf und sprintf.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
aja, und was würdest du statt printf verwenden? Wo sind denn dort wieder deine schweren Sicherheitslücken?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz