[C] Ip address probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, ik ben bezig met de OSCP security training en heb voor een lab (meteen een disclaimer dus: nee ik doe niks illegaals, dit is mijn werk) een exploit gevonden. Ik heb 'm hier en daar wat aangepast met die zeer gelimiteerde kennis van programmeren die ik helaas nog heb...

Nu loop ik tegen een probleem aan... Hier volgt een stukje code van een publieke exploit van CUPS:

http://sebug.net/paper/Ex...s/0301-exploits/sigcups.c

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
#define BUF_SIZE    4096

#define die(a) { perror("[!] "a); exit(-1); }

int     verbose = 0;
char        *host = "127.0.0.1";
int     port = 631;
unsigned long   retaddr = 3232239841; /* exploit: *($retaddr * 4) = $address_of_shellcode */

char greet[] = "POST /jobs HTTP/1.1\nContent-type: application/x-www-form-urlencoded\nContent-length: %d\n\n";
char evilmsg[] = "-%u=";

/*


Hierin heb ik het originele retaddr vervangen van 805289688 naar 3232239841 (de int waarde van 192.168.16.225)

Als Ik de code nu compile lijkt die waarde nu te groot te zijn voor "unsigned long"?

Hoe krijg ik dit nu toch aan de praat zonder dat het impact heft op the hele lijn code (incl erachter)?

de error:

gcc ./cups.c
./cups.c:38:1: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]

[ Voor 0% gewijzigd door NMe op 07-05-2015 17:23 ]


Acties:
  • 0 Henk 'm!

  • Caballeros
  • Registratie: November 2008
  • Niet online
Das heel geen error, dat is een warning.

Nu nog even lezen wat er staat: Kijk uit deze constante is unsigned

Ik denk dat je toch wat meer in programmeren moet verdiepen
de waarde in retaddr is zo te zien niet echt een ip

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

(Ik heb je code even in een [code=c] tag gezet, dat leest toch wat makkelijker :))

Het probleem is dat een int literal in C99 nooit unsigned is, tenzij je er een 'u' postfix achter plakt. Dit was ten tijde van C90 nog niet zo, en daarom krijg je die warning.

Je code zal verder prima werken, want wat er gebeurt is dat de bits van de long long int gewoon worden getruncate, dus uiteindelijk zal retaddr de juiste waarde krijgen. Als je van de warning af wil, dan kun je simpelweg een u direct achter het getal zetten.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Caballeros schreef op donderdag 07 mei 2015 @ 14:12:
Das heel geen error, dat is een warning.

Nu nog even lezen wat er staat: Kijk uit deze constante is unsigned
Ik suggereer dat je zelf even leest wat er staat: Kijk uit, deze constante is alléén unsigned in C90.
Ik denk dat je toch wat meer in programmeren moet verdiepen
de waarde in retaddr is zo te zien niet echt een ip
Beide opmerkingen hier slaan echt kant noch wal 8)7
.edit: en ik moet ook beter lezen ;)

[ Voor 4% gewijzigd door .oisyn op 07-05-2015 14:28 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op donderdag 07 mei 2015 @ 14:16:
(Ik heb je code even in een [code=c] tag gezet, dat leest toch wat makkelijker :))

Het probleem is dat een int literal in C99 nooit unsigned is, tenzij je er een 'u' postfix achter plakt. Dit was ten tijde van C90 nog niet zo, en daarom krijg je die warning.

Je code zal verder prima werken, want wat er gebeurt is dat de bits van de long long int gewoon worden getruncate, dus uiteindelijk zal retaddr de juiste waarde krijgen. Als je van de warning af wil, dan kun je simpelweg een u direct achter het getal zetten.
Ok thanks voor de hulp!

Inderdaad, verdiepen in programmeren wordt de volgende stap. Er is zoveel te doen... :)

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Verwijderd schreef op donderdag 07 mei 2015 @ 14:01:

Hierin heb ik het originele retaddr vervangen van 805289688 naar 3232239841 (de int waarde van 192.168.16.225)
retaddr is geen IP adres maar een geheugen adres waar naar verwezen wordt. Dus het veranderen naar de int waarde van 192.168.16.225 zal niet veel opleveren.

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:51
.oisyn schreef op donderdag 07 mei 2015 @ 14:16:
(Ik heb je code even in een [code=c] tag gezet, dat leest toch wat makkelijker :))
Helaas heb je ook z'n [b]bold[/b] tags meegenomen; dat is minder geslaagd.
Het probleem is dat een int literal in C99 nooit unsigned is, tenzij je er een 'u' postfix achter plakt.
...en als je het helemaal goed wil doen, ul (of UL om verwarring tussen 1 en l te voorkomen), aangezien het resultaat unsigned long moet zijn.

[ Voor 34% gewijzigd door Soultaker op 07-05-2015 17:12 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hoeft niet. Het getal impliceert een unsigned long.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:51
TIL.
Pagina: 1