Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem hadanka c.4 - najdi heslo

tak a znova ma hackli. 3-[ chcel som byt poriadny geek a urobil som si autentifikaciu v jazyku C. myslel som, ze som zvolil celkom dobre heslo:

if (strcmp(buffer, "123") == 0)

, ale asi moc dobre nebolo. :-( ok, vsak som nejaky geek, tak som si dal total brutal neprelomitelne heslo a napisal som si na stranku: teraz ma hacknite vy loseri! a tesil som sa, ako som im to nandal. 8-) na druhy den som bol znovu hacknuty a napisali mi: you are lamer!. este mi napisali cosi ako BFU alebo BOF alebo BAF, uz si presne napamatam, tak ma to rozrusilo. takze, ak by ste mi mohli pomoct, ako sa im to podarilo, bol by som velmi vdacny.;-) tu je kod:

#include <string.h>
#include <stdio.h>

char testuj_udaje(char* heslo)
{
//  char* hash="_y66v!**";
  char je_heslo_OK = 'N';
  char buffer[15];

  strcpy(buffer, heslo);
  if (strcmp(buffer, "*******************") == 0) 
    je_heslo_OK = 'A';
return je_heslo_OK;
}

int main(int argc, char* argv[])
{
 if (argc<2)  { 
   printf("musis zadat heslo, sklerotik!\n"); 
   return 1; 
 }
 if (testuj_udaje(argv[1]) == 'A')  
   printf("OK, vstup pane\n"); 
 else
   printf("koho chces hackovat, loser?\n");
return 0;
}

otestovat heslo si mozte tu: level4.php
a binarka na testovanie je tu: heslo.zip
hall of fame je tu: halloffame.php

Předmět Autor Datum
Igor přitvrdil, co? :-) Už se těším na nějaký hint, ale i tak si myslím, že s tím nehnu :-|
josephino 21.05.2006 21:28
josephino
a bude uz len horsie. :-p:-)
IgorK 21.05.2006 22:18
IgorK
Ten tvuj EXE poklada argument 24 hvezdicek a vys za spravne heslo :-P
Jan Fiala 21.05.2006 22:04
Jan Fiala
A zrúti sa pritom systém, čo?:-D Takže tak ho hackli. Vyriešené, odfajknuté, hotovo.:-D;-)
msx. 21.05.2006 22:13
msx.
moj exe je specialne upraveny len pre testovanie, takze ... :-p
IgorK 21.05.2006 22:16
IgorK
Zrejme to nie je multiplatformové?;-)
msx. 21.05.2006 22:12
msx.
tato hadanka nemoze byt multiplatformova a ani pre jednu platformu nemusi mat rovnake vysledky, takz…
IgorK 21.05.2006 22:17
IgorK
Ale aspon se ti povedlo to C a PHP sladit, aby se chovaly podobne ;-)
Jan Fiala 21.05.2006 22:26
Jan Fiala
jj, zalezi od mnoha faktorov: platformy, kompilatora, ci je to v debug alebo release mode, atd.. tak…
IgorK 21.05.2006 22:31
IgorK
btw., blahozelam. ;-)
IgorK 21.05.2006 22:37
IgorK
Veď ani nemá, spustil som to a o chvíľu sa mi zrútil Windows.:-D Alebo to zariadil TDX.EXE, ktorý od…
msx. 21.05.2006 22:29
msx.
zrejme tato hadanka je pre teba prilis tazka. :-D
IgorK 21.05.2006 22:32
IgorK
Takže toto je zrejme v poriadku: [bezejmna9cx.gif] Edit: A kde sa mi tento debugger vzal?::)
msx. 21.05.2006 22:40
msx.
Neni nejaka debugovaci knihovna (odchytavani chyb) zahrnuta primo v tom EXE ?
Jan Fiala 21.05.2006 22:59
Jan Fiala
A môžem sa ja čudovať, čo je taký dlhý.:-)
msx. 21.05.2006 23:04
msx.
To msx: ta hlaska je v poriadku, mozes ju brat ako dalsi hint :-p (to myslim vazne :-)). Nikde nie j…
MM.. 22.05.2006 02:38
MM..
Princíp som už pochopil, len neviem ako to tam dostať.
msx. 21.05.2006 23:06
msx.
pokial chapes princip, tak by to mala byt zalezitost max. 1 min. btw., ten exe nie je potrebny ku vy…
IgorK 21.05.2006 23:24
IgorK
Ja ho testujem cez hall of fame, takže ak zaznamenávaš všetky pokusy o správne heslo, tak sa na mne…
msx. 21.05.2006 23:30
msx.
nezaznamenavam to, ale rozmyslal som nad tym. :-D
IgorK 21.05.2006 23:31
IgorK
Ak si pochopil princip tak dalsi hint je: alignment ;-) On ten svina alignment :-D vie narobit probl…
MM.. 22.05.2006 02:54
MM..
Áno už som sa tým začal zaoberať. Ešte som nad tým v robote rozmýšľal a zaplo mi, že toto je konzolo…
msx. 22.05.2006 17:30
msx.
Windows ani DOS s tym nema nic spolocne...
MM.. 23.05.2006 04:27
MM..
zkus se v tom kodu zamerit na radek if (strcmp(buffer, "*******************") == 0) a deklarace pr…
Jan Fiala 23.05.2006 06:34
Jan Fiala
Mna osobne zaujimal len riadok co je nad nim ;-):-) strcpy(buffer, heslo); ptz. bez neho by to n…
MM.. 23.05.2006 11:26
MM..
Ms pravdu, bez toho radku by to neslo hacknout, ale ten radek pod tim mne jako prvni uderil do oci,…
Jan Fiala 23.05.2006 18:13
Jan Fiala
Veď ja viem, o čo tam ide. Len neviem, ako to je uložené. Pre mňa za mňa tu napíšem presný popis a p…
msx. 23.05.2006 17:49
msx.
Pre mňa za mňa tu napíšem presný popis a potom to bude vedieť už pomaly každý alebo to ešte predtým…
MaSo 23.05.2006 19:12
MaSo
Viem teóriu, ale prakticky to neviem dokázať.
msx. 23.05.2006 22:55
msx.
Tak to pak nevim, co vis.:-D
MaSo 23.05.2006 22:59
MaSo
Tu je teda popis (ak moderátori chcú nech to vymažú): Pri kopírovaní reťazca dojde k pretečeniu cez…
msx. 23.05.2006 23:00
msx.
No, dejme tomu. :-p
MaSo 23.05.2006 23:03
MaSo
da sa povedat, ze je ti to jasne ale k ziadnemu presmerovaniu smernikov nedojde a ani neviem, ako si…
IgorK 23.05.2006 23:05
IgorK
Veď to je to, že nemôžem. Teda môžem. Asi rozchodím ten Turbo Debugger s nejakým skúšobným programom…
msx. 23.05.2006 23:11
msx.
zmeni sa obsah smernikov, ale ziadne presmerovanie. ]:) //edit: tak si urob jednoduduchy program v p…
IgorK 23.05.2006 23:13
IgorK
Moje chyby: 1. To pvé som považoval za znak a druhé za reťazec. Reťazec som považoval vlastne za sm…
msx. 23.05.2006 23:33
msx.
:-):beer:
IgorK 23.05.2006 23:35
IgorK
1. ani jedno nie je smernik 2. Znak (char) nema dlzku 2byty :!: Je to posunute kvoli tomu co som ti…
MM.. 27.05.2006 14:35
MM..
1. To mi po čase došlo, lebo smerníky nemusia mať svoj obsah za sebou. 2. Aj toto mi došlo potom, al…
msx. 08.06.2006 17:56
msx.
/0 není za každým znakem, ale až na konci řetězce (null terminated string). poslední
Mečislav Kozel 10.06.2006 20:11
Mečislav Kozel
taky-vam-preteka
MaSo 23.05.2006 23:15
MaSo
Nemenia sa ziadne smerniky, ptz. tam ani ziadne smerniky nie su. char blablabla[15] je pole characte…
MM.. 27.05.2006 14:32
MM..
Pekne:beer: HOF!:))
MaSo 23.05.2006 18:49
MaSo
:-)
IgorK 23.05.2006 22:40
IgorK
btw., a kde mas dvojicku máslo, akoze este nie je v HOF? :-p
IgorK 23.05.2006 22:47
IgorK
Asi je to slabsi kousek. :)):))
MaSo 23.05.2006 22:55
MaSo
tak to vyzera. :-D som zvedavy, co nato on. ]:)
IgorK 23.05.2006 23:00
IgorK
8-)
Máslo 23.05.2006 23:13
Máslo
Super!:beer::beer: Odvolavam co jsem neodvolal.;-)
MaSo 23.05.2006 23:14
MaSo
:beer::beer: Já jsem se zabýval programováním naposledy někdy v r. 1997. Postupně basic, pascal, asm…
Máslo 23.05.2006 23:16
Máslo
uz som :-x. :beer:
IgorK 23.05.2006 23:17
IgorK
pozeram, ze uz je vas celkom dost uspesnych riesitelov. ;-) rozmyslam, ze by som mohol nabuduce urob…
IgorK 23.05.2006 22:40
IgorK
Msx. gratuluji :beer::beer::beer: To byla ale blbost že?
Máslo 23.05.2006 23:26
Máslo
Taky gratuluji! :-)
MaSo 23.05.2006 23:30
MaSo
a ja gratujem vsetkym. :beer::beer::beer: uz chyba iba jednicka z minuleho kola Lrrr. :-p
IgorK 23.05.2006 23:31
IgorK
Tak to bola blbosť. Sa mu ani nečudujem, že ho hackli.]:) Ozaj a čo je ten BFU?
msx. 23.05.2006 23:34
msx.
BFU = Běžný Franta Uživatel.
MaSo 23.05.2006 23:38
MaSo
este existuje aj horsi vyraz: Bloody Fucking User
IgorK 23.05.2006 23:41
IgorK
Mě se nejvíc líbí Brain Free User
Máslo 23.05.2006 23:47
Máslo
jj, to je tiez cool. ]:)
IgorK 23.05.2006 23:48
IgorK
V tom hinte islo o skratku "BOF" - Buffer OverFlow.
MM.. 27.05.2006 14:38
MM..
Pekna hadanka na pretecenie zasobnika... :-)
Intex 27.05.2006 13:17
Intex
Po precitani toho clanku z www.root.cz (vdaka za odkaz MaSo) som na to prisiel i ja. Este by ma zauj…
Andrej 27.05.2006 21:47
Andrej
Pri použití String sa to nedá, pri použití ShortString sa by sa to malo dať pri vypnutí kontroly pre…
msx. 08.06.2006 18:00
msx.

Ak si pochopil princip tak dalsi hint je: alignment ;-)
On ten svina alignment :-D vie narobit problemy aj v beznom zivote, napr. ak naivny programator (ako ja ked som studoval :-)) uklada obsah struktury o viac premennych do suboru tak ako je (binarne), vsetko funguje len dovtedy kym si niekto tie zdrojaky prelozi napr. 64bit prekladacom na 64bit masine (vtedy to bola u mna DEC Alpha), tak ma ten program zrazu problem precitat datove subory, ktore ten isty program (len prelozeny inym prekladacom) vytvoril u mna doma na 32bit PC :-)

Áno už som sa tým začal zaoberať. Ešte som nad tým v robote rozmýšľal a zaplo mi, že toto je konzolová aplikácia pre Windows, takže to bude trochu inak. Stále som to prepočítaval podľa DOSu. Ale toto mi tiež veľmi nepomohlo (toto moje zistenie), nakoľko netuším ako si to rozhadzuje Windows, takže ešte musím porozmýšľať.

Veď ja viem, o čo tam ide. Len neviem, ako to je uložené. Pre mňa za mňa tu napíšem presný popis a potom to bude vedieť už pomaly každý alebo to ešte predtým nejaký moderátor vymaže, aby to nebol hint pre ostatných.

Edit: V krátkosti len toľko, že keby podporoval jazyk C direktívu $S z Turbo Pascalu, tak pri zadaní hesla by sme skončili s hlásením Runtime errror 202 (to je akože z Turbo Pascalu).

Tu je teda popis (ak moderátori chcú nech to vymažú):

Pri kopírovaní reťazca dojde k pretečeniu cez pole znakov, teda vlastne pretečie zásobník a prepíšu sa obsahy smerníkov. Tým dojde k "presmerovaniu smerníkov" a teda vlastne už bude v premennej, ktorá má obsahovať "N" zmenený obsah na "A". Len dočerta neviem ako to poprehadzovať, aby som prepísal správne smerník.

Veď to je to, že nemôžem. Teda môžem. Asi rozchodím ten Turbo Debugger s nejakým skúšobným programom v Pascale. V Delphi ešte natoľko CPU window nepoznám, ale skúsim aj to. Teraz si ma doplietol. Chceš povedať, že smerníky ostanú nezmenené?::) Moja teória padla.3-[

Moje chyby:

1. To pvé som považoval za znak a druhé za reťazec. Reťazec som považoval vlastne za smerník na reťazec a znak som považoval za konkretny znak. Lenže ešte aj to som sa pomýlil a bral som to naopak a preto som si myslel, že za znakmi reťazca bude nasledovať smerník na znak (totiž som si to v tej rýchlosti pomýlil a presne naopak som to bral) a tesa som myslel, že sa bude prepisovať hodnota smerníka a tým pádom ten smerník ukáže na reťazec "A".

2. Potom som to skúšal tak, že som napísal surovo za heslo písmeno "A". Problém bol v tom, že som všetko urobil dobre, ale zabudol som na to, že v C má znak dĺžku dva bajty. Tak som potom konečne jeden znak pridal (konečne som sa zobudil).

Takže sa chcem poďakovať Igorovi, že toľko som nad tým špekuloval, že som sa opäť voľačo zaujímavé naučil.

1. To mi po čase došlo, lebo smerníky nemusia mať svoj obsah za sebou.
2. Aj toto mi došlo potom, ale niekde som tuším čítal, že nejakom C má znak dĺžku dva byte. Alebo to je tak, že za každým znakom je \0? Pretože inak by to prepísalo niečo v zásobníku a už by ten program nebežal.;-)

Pri použití String sa to nedá, pri použití ShortString sa by sa to malo dať pri vypnutí kontroly pretečenia zásobníka. Delphi nie je ako C, totiž Delphi všetko kontroluje a tým sa program nabaľuje. Aj preto je C bližšie k strojovému kódu a kto programuje v C by mal mať už aký-taký základ v inom jazyku, inak ho pochopenie C bude stáť veľa námahy.

Zpět do poradny Odpovědět na původní otázku Nahoru