Zum Inhalt wechseln

Als Gast hast du nur eingeschränkten Zugriff!


Anmelden 

Benutzerkonto erstellen

Du bist nicht angemeldet und hast somit nur einen sehr eingeschränkten Zugriff auf die Features unserer Community.
Um vollen Zugriff zu erlangen musst du dir einen Account erstellen. Der Vorgang sollte nicht länger als 1 Minute dauern.

  • Antworte auf Themen oder erstelle deine eigenen.
  • Schalte dir alle Downloads mit Highspeed & ohne Wartezeit frei.
  • Erhalte Zugriff auf alle Bereiche und entdecke interessante Inhalte.
  • Tausche dich mich anderen Usern in der Shoutbox oder via PN aus.
 

   

Foto

[H] Stimmt das Ergebnis?

- - - - -

  • Bitte melde dich an um zu Antworten
4 Antworten in diesem Thema

#1
Alpha63

Alpha63

    Hacktivist

  • Premium Member
  • Likes
    6
  • 70 Beiträge
  • 3 Bedankt

Hallo,

 

 

ich schreibe demnächst eine Prüfung und ich habe hier paar Aufgaben zum lernen.

Doch irgendwie verwirrt mich zwei Aufgaben extrem die aber eigentlich total einfach sein sollten.

 

1. Problem:

Aufgabenstellung:
#define XY(a)((a)*(a)+(a))
char vBuf[128];
Was geschieht bei dem Ausdruck:
erg=XY(atoi(fgets(vBuf, 128, stdin)); ?

Meine Erklärung:

Als erstes definieren wir ein Marko. Anschliesend ein char namens vBuf welches 128 groß ist.

Danach soll durch einlesen über die stdin (Konsole in diesem Fall) vBuf mit Werten belegt werden die anschließend von char zu int Konvertiert werden. Anschließend wird das Marko Belegt mit dem Wert der eingegeben wurde. Das Ergebnis vom Marko wird anschließend in das int Element erg gespeichert.

 

Bsp:

a wird mit 2 Belegt.

2*2+2=6

 

Jetzt habe ich mir ein Programm dazu geschrieben. Das Fragt mich aber nach 3 Parametern und gibt was völlig falsches aus.

Warum?

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

#define XY(a)((a)*(a)+(a))

int main(int argc, char** argv) {
   char vBuf[128];
   int erg;
   erg= XY(atoi(fgets(vBuf, 128, stdin)));
   
   printf("%d", erg);
	return 0;
}


#2
Alpha63

Alpha63

    Hacktivist

  • Premium Member
  • Likes
    6
  • 70 Beiträge
  • 3 Bedankt

Ich habe nun die Antwort doch selber gefunden in einem Buch. Wahnsinn^^

 

und zwar wird das was in XY in der Klammer steht für alle a eingesetzt.

 

Das heißt das in dem Makro befehl 3 mal fegts eingefügt wird.

 

Daraus folgt ((eingabe fgets)*(erneute eingabe fgets)+nocheine eingabe von fgets)

 

Simpel.


  • lolorollo und Cube gefällt das

#3
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt

"Anschliesend ein char namens vBuf welches 128 groß ist."

 

Du hast ein Char Array, ein char ist immer 1 Byte. :)

 

 

 

Ich weiss nicht ob das Macro es vorm Exploiten schuetzt aber (ansich) atoi() ist unsicher:

Please Login HERE or Register HERE to see this link!

 

#include <stdio.h>
#define XY(a)((a)*(a)+(a))

main()
{
    char vBuf[128];
    int erg=XY(atoi(fgets(vBuf, 128, stdin)));
    printf("%i\n",erg);
    
}
 

$ gcc a.c

$ ./a.out
122222222222222222222222
2
1
ffffffff

$ ./a.out
1073741824107374182410737418241073741824107374182410737418241073741824
1073741824
2
-1073741822

$ ./a.out
1073741824107374182410737418241073741824107374182410737418241073741824107374182410737418241073741824107374182410737418241073741824
1073741824107374182410737418241073741824107374182410737418241073741824107374182410737418241073741824107374182410737418241073741824
-825
 

...



#4
Alpha63

Alpha63

    Hacktivist

  • Premium Member
  • Likes
    6
  • 70 Beiträge
  • 3 Bedankt

Naturlich habe ich ein char array vBuf was 128 groß ist. durch fgets gebe ich an das nur 128 zeichen eingelesen und belegt werden dürfen.

 

aber ja ein char ist 1 byte groß.


was sagn mir deine minus zahlen? buffer overflow oder? was kann man dann mit der info machen? bin nich so fit in exploiting^^



#5
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt

Wie gesagt atoi() ansich ist anfaellig, nicht speziell der Code. Ich konnte ihn z.B. nicht exploiten ;).

 

Es muesste dann ein Integer Overflow sein.

Please Login HERE or Register HERE to see this link!

Please Login HERE or Register HERE to see this link!


Bearbeitet von pdr0, 02 February 2015 - 23:42 Uhr.




  Thema Forum Themenstarter Statistik Letzter Beitrag

Besucher die dieses Thema lesen:

Mitglieder: , Gäste: , unsichtbare Mitglieder:


This topic has been visited by 70 user(s)


    , , Alpha63, AnonymES, Ar@m!s, B1nary, biosmanp, Blackhook, BlackZetsu, Born2Hack, Bypass, Ch!ller, CL54Y, confick.ini, corkscrew, Cranky, Cube, darkman36, DeepWater, Denver, DieHinata, DonArox, EiLafJu, Emalik Xantier, fakkerbizz, Framerater, gravel, hackeris, Imperial, italyrex, JohnR, Julius K9, Juri, Kingside, kiwitone, kotzbroedchen, Laggy, LarSep, lion., lolorollo, luvar, mantwohouse, Mk3E, mktool, most_uniQue, n1nja, Neonxen, Netwxrk, nischke, notfound, Osed28, pam123, pdr0, pr0legend, Prodigy, R3s1stanc3, RellicX, romiro, SAR, Seldos, smc2014, Stanley, Take1T, Tittler, TooL, Toskom4n, Unkiii, Xenio, xVirtu, zepsus
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.