[Invisible/150] Appel au boycott.

Ce weekend j’ai encore tenté d’aider maigrement l’équipe de Big-Daddy au CTF Forbidden Bits. Ce n’est pas facile de résoudre un chall sans qu’une des brutes de l’équipe ne le finisse avant vous. Heureusement je suis tombé sur le chall (Invisible/150) où ils avaient manifestement renoncés :). L’énoncé est ici : blank.html

Comme on peut le constater c’est une page vide. Si on regarde dedans on constate que ce vide est plein de tabulations, d’espaces et de retour chariots.

$ hexdump real.html | head
0000000 2020 0920 0909 0920 0909 200a 2020 090a
0000010 090a 2020 0920 0a20 0909 0909 2020 0a09
0000020 2009 0920 2020 0920 0920 0a0a 0a20 0920
0000030 2020 2020 0909 0a0a 2020 0920 2020 0920
0000040 0920 200a 2020 0909 2009 0920 0a09 2020
0000050 0a20 0a09 2009 2020 2009 090a 0909 2009
0000060 0920 090a 2020 2009 2020 0909 0a09 200a
0000070 200a 2009 2020 0920 0a09 200a 2020 2009
0000080 2020 0909 0a09 2020 0920 2009 0909 2020
0000090 200a 2020 090a 090a 2020 0920 0a20 0909

Et c’est là que ce genre de chall sombre dans ce que je n’aime pas du tout; le non sens.

On regarde si c’est pas du Morse… On regarde si c’est pas du Snow… (Snow est une méthode de stéganographie élaborée qui se base sur les espaces). Toujours rien…

Là on se tourne vers DuckDuckGo, pour “WhiteSpace” on découvre qu’il y a aussi un language de programmation éponyme (Le language Whitespace pas le language éponyme :) )

 https://en.wikipedia.org/wiki/Whitespace_(programming_language)

Et là on se dit “Non Quoi”… J’ai trouvé sur un site de fan un interpreteur perl déja tout cuit. Au premiers abords le truc est pas content.

$perl whitespace.pl real.htlm
[stuck]^c
$perl whitespace.pl < real.html
wrong

Ne comprenant pas d’où sort ce “wrong” je trouve l’option qui debug le programme. On se rend compte que oui c’est bien un script Whitespace.  Me voici enfin avec le debug suivant.

$ perl whitespace.pl < real.html -d
command list: AAABBBABBBCAAACBCBAAABACBBBBAABCBAABAAABABCCACABAAAABBCCAAABAAABABCAAABBBAABBCAAACBCBAAABACBBBBAABCBAABAAABBBCCACABAAAABBCCAAABAAABBBCAAABBABBAACAAACBCBAAABACBBBBAABCBAABAABAAACCACABAAAABBCCAAABAABAAACAAABBAAAABCAAACBCBAAABACBBBBAABCBAABAABAABCCACABAAAABBCCAAABAABAABCAAABBABBBACAAACBCBAAABACBBBBAABCBAABAABABACCACABAAAABBCCAAABAABABACAAABBAABBBCAAACBCBAAABACBBBBAABCBAABAABABBCCACABAAAABBCCAAABAABABBCAAABABABAACACABCAAAAABBABAAACACABCAAAAABBAABABCACABCAAAAABAAAAACACABCAAAAABBABABBCACABCAAAAABBAABABCACABCAAAAABBBBAABCACABCAAAAABAAAAACACABCAAAAABBABAABCACABCAAAAABBBAABBCACABCAAAAABAAAAACACABCAAAAABABABBBCACABCAAAAABBAABABCACABCAAAAABABBBBBCACABCAAAAABBAAAABCACABCAAAAABBBAABACACABCAAAAABBAABABCACABCAAAAABABBBBBCACABCAAAAABAABBBACACABCAAAAABBAAAABCACABCAAAAABBBAABBCACABCAAAAABBBABABCACABCAAAAABBBAABBCACABCAAAAABAABCACABCAACCCCCCCAAABAAAABBCAAABBBABBBCBCAAAAABBBAABACBCAAAAABBABBBBCBCAAAAABBABBBACBCAAAAABBAABBBCBCAACCC
posiiton: 0     command: AAn push_number 119
posiiton: 11     command: AAn push_number
posiiton: 15     command: BCBA read_char
posiiton: 19     command: AAn push_number
posiiton: 24     command: BBB retrieve
posiiton: 27     command: BAAB subtract
posiiton: 31     command: CBAl jump_ifzero ABAAABAB
posiiton: 43     command: CACl jump ABAAAABB
posiiton: 55     command: CAAl set_label ABAAABAB
posiiton: 67     command: AAn push_number 115
posiiton: 78     command: AAn push_number
posiiton: 82     command: BCBA read_char
posiiton: 86     command: AAn push_number
posiiton: 91     command: BBB retrieve
posiiton: 94     command: BAAB subtract
posiiton: 98     command: CBAl jump_ifzero ABAAABBB
posiiton: 110     command: CACl jump ABAAAABB
posiiton: 122     command: CAAl set_label ABAAABBB
posiiton: 134     command: AAn push_number 108
posiiton: 145     command: AAn push_number
posiiton: 149     command: BCBA read_char
posiiton: 153     command: AAn push_number
posiiton: 158     command: BBB retrieve
posiiton: 161     command: BAAB subtract
posiiton: 165     command: CBAl jump_ifzero ABAABAAA
posiiton: 177     command: CACl jump ABAAAABB
posiiton: 189     command: CAAl set_label ABAABAAA
posiiton: 201     command: AAn push_number 97
posiiton: 212     command: AAn push_number
posiiton: 216     command: BCBA read_char
posiiton: 220     command: AAn push_number
posiiton: 225     command: BBB retrieve
posiiton: 228     command: BAAB subtract
posiiton: 232     command: CBAl jump_ifzero ABAABAAB
posiiton: 244     command: CACl jump ABAAAABB
posiiton: 256     command: CAAl set_label ABAABAAB
posiiton: 268     command: AAn push_number 110
posiiton: 279     command: AAn push_number
posiiton: 283     command: BCBA read_char
posiiton: 287     command: AAn push_number
posiiton: 292     command: BBB retrieve
posiiton: 295     command: BAAB subtract
posiiton: 299     command: CBAl jump_ifzero ABAABABA
posiiton: 311     command: CACl jump ABAAAABB
posiiton: 323     command: CAAl set_label ABAABABA
posiiton: 335     command: AAn push_number 103
posiiton: 346     command: AAn push_number
posiiton: 350     command: BCBA read_char
posiiton: 354     command: AAn push_number
posiiton: 359     command: BBB retrieve
posiiton: 362     command: BAAB subtract
posiiton: 366     command: CBAl jump_ifzero ABAABABB
posiiton: 378     command: CACl jump ABAAAABB
posiiton: 390     command: CAAl set_label ABAABABB
posiiton: 402     command: AAn push_number 84
posiiton: 413     command: ACA duplicate_last
posiiton: 416     command: BCAA print_char
posiiton: 420     command: AAn push_number 104
posiiton: 431     command: ACA duplicate_last
posiiton: 434     command: BCAA print_char
posiiton: 438     command: AAn push_number 101
posiiton: 449     command: ACA duplicate_last
posiiton: 452     command: BCAA print_char
posiiton: 456     command: AAn push_number 32
posiiton: 466     command: ACA duplicate_last
posiiton: 469     command: BCAA print_char
posiiton: 473     command: AAn push_number 107
posiiton: 484     command: ACA duplicate_last
posiiton: 487     command: BCAA print_char
posiiton: 491     command: AAn push_number 101
posiiton: 502     command: ACA duplicate_last
posiiton: 505     command: BCAA print_char
posiiton: 509     command: AAn push_number 121
posiiton: 520     command: ACA duplicate_last
posiiton: 523     command: BCAA print_char
posiiton: 527     command: AAn push_number 32
posiiton: 537     command: ACA duplicate_last
posiiton: 540     command: BCAA print_char
posiiton: 544     command: AAn push_number 105
posiiton: 555     command: ACA duplicate_last
posiiton: 558     command: BCAA print_char
posiiton: 562     command: AAn push_number 115
posiiton: 573     command: ACA duplicate_last
posiiton: 576     command: BCAA print_char
posiiton: 580     command: AAn push_number 32
posiiton: 590     command: ACA duplicate_last
posiiton: 593     command: BCAA print_char
posiiton: 597     command: AAn push_number 87
posiiton: 608     command: ACA duplicate_last
posiiton: 611     command: BCAA print_char
posiiton: 615     command: AAn push_number 101
posiiton: 626     command: ACA duplicate_last
posiiton: 629     command: BCAA print_char
posiiton: 633     command: AAn push_number 95
posiiton: 644     command: ACA duplicate_last
posiiton: 647     command: BCAA print_char
posiiton: 651     command: AAn push_number 97
posiiton: 662     command: ACA duplicate_last
posiiton: 665     command: BCAA print_char
posiiton: 669     command: AAn push_number 114
posiiton: 680     command: ACA duplicate_last
posiiton: 683     command: BCAA print_char
posiiton: 687     command: AAn push_number 101
posiiton: 698     command: ACA duplicate_last
posiiton: 701     command: BCAA print_char
posiiton: 705     command: AAn push_number 95
posiiton: 716     command: ACA duplicate_last
posiiton: 719     command: BCAA print_char
posiiton: 723     command: AAn push_number 78
posiiton: 734     command: ACA duplicate_last
posiiton: 737     command: BCAA print_char
posiiton: 741     command: AAn push_number 97
posiiton: 752     command: ACA duplicate_last
posiiton: 755     command: BCAA print_char
posiiton: 759     command: AAn push_number 115
posiiton: 770     command: ACA duplicate_last
posiiton: 773     command: BCAA print_char
posiiton: 777     command: AAn push_number 117
posiiton: 788     command: ACA duplicate_last
posiiton: 791     command: BCAA print_char
posiiton: 795     command: AAn push_number 115
posiiton: 806     command: ACA duplicate_last
posiiton: 809     command: BCAA print_char
posiiton: 813     command: AAn push_number 9
posiiton: 821     command: ACA duplicate_last
posiiton: 824     command: BCAA print_char
posiiton: 828     command: CCC end
posiiton: 831     command: CCC end
posiiton: 834     command: CAAl set_label ABAAAABB
posiiton: 846     command: AAn push_number 119
posiiton: 857     command: BCAA print_char
posiiton: 861     command: AAn push_number 114
posiiton: 872     command: BCAA print_char
posiiton: 876     command: AAn push_number 111
posiiton: 887     command: BCAA print_char
posiiton: 891     command: AAn push_number 110
posiiton: 902     command: BCAA print_char
posiiton: 906     command: AAn push_number 103
posiiton: 917     command: BCAA print_char
posiiton: 921     command: CCC end
ABAAAABB = 846
ABAAABAB = 67
ABAAABBB = 134
ABAABAAA = 201
ABAABAAB = 268
ABAABABA = 335
ABAABABB = 402
position=0
 stack=
position=11
 stack=119
position=15
 stack=119,0
position=19
 stack=119
position=24
 stack=119,0
position=27
 stack=119,0
position=31
 stack=119
position=43
 stack=
position=846
 stack=
position=857
 stack=119
position=861
 stack=
position=872
 stack=114
position=876
 stack=
position=887
 stack=111
position=891
 stack=
position=902
 stack=110
position=906
 stack=
position=917
 stack=103
position=921
 stack=
wrong

La on se dit qu’on pousse beaucoup sur la pile pour n’afficher que “wrong”.  Dumpons la stack .. (en Whitespace mais ou vis t’on !!)

$ perl whitespace.pl < real.html -d 2>&1 | grep push_number | cut -d " " -f 10 | perl -lane "print chr($_)" | tr -d "\n"
wslangThe key is We_are_Nasus   wrong

Bingo ;), Et la en relisant le programme on se dit qu’il eu été plus malin de lire le source avant de le lancer bêtement. On comprend alors rapidement que le programme veut que l’on tape “wslang”

$perl whitespace.pl real.html
wslang
The key is We_are_Nasus

Au final je dit..STOP PLUS JAMAIS de challs en WhiteSpace, en BrainFuck, en Piet, en Haskell :) ou n’importe quel autre language à la Con. Filez une VM de packer PE ca sera beaucoup plus didactique !

This entry was posted in Challenge and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code