Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  16 1434
Hei,

Jeg holder på med et gåtespill hvor oppgaven lyder som følgende:

"This script is not that safe. The username and password is embedded into the javascript function."

Problemet mitt er at jeg er svært dårlig i javascript, men har prøvd å lese meg opp på det, men får dessverre ikke til. Hele login scriptet er dette:

Kode

var flro,
a57492e,
g77uik="3c63656e7465723e0d0a3c666f726d206d6574686f643d22706f7374223e200d0a3c6c6162656c3e​557365726e616d653c2f6c6162656c3e3c6272202f3e0d0a3c696e70757420747970653d22746578​7422206e616d653d227573657222202f3e3c6272202f3e0d0a3c6c6162656c3e50617373776f7264​3c2f6c6162656c3e3c6272202f3e0d0a3c696e70757420747970653d227465787422206e616d653d​227061737322202f3e3c6272202f3e0d0a3c696e70757420747970653d227375626d697422206e61​6d653d227375626d6974222076616c75653d224c6f67696e22202f3e0d0a3c2f666f726d3e0d0a0d​0a3c212d2d200d0a2533432532312532442532442532302533362533342533382533392536312536​31253333253334253341253635253438253535253738253446253437253435253736253635253434​2536422533302532302532442532442533450d0a2d2d3e";
a57492e='';
for(flro=0;flro<g77uik.length;flro+=2){a57492e+=unescape('%'+g77uik.substr(flro,2));}document.write(a57492e);
Såvidt jeg vet kan man gjøre følgende. Sette flro,2 til flro,1 , eller ta javascript:alert(a57492e);

Da ender man opp med:

Kode

center>

<form method="post"> 

<label>Username</label><br />

<input type="text" name="user" /><br />

<label>Password</label><br />

<input type="text" name="pass" /><br />

<input type="submit" name="submit" value="Login" />

</form>



<!-- 

%3C%21%2D%2D%20%36%34%38%39%61%61%33%34%3A%65%48%55%78%4F%47%45%76%65%44%6B%30%20%2D%2D%3E

-->
Altså hele loginscriptet er i javascript. Jeg kjører %3C%21%2D%2D%20%36%34%38%39%61%61%33%34%3A%65%48%55%78%4F%47 %45%76%65%44%6B%30%20%2D%2D%3E gjennom HEX to ASCII, og ender opp med følgende: <!-- 6489aa34:eHUxOGEveDk0 -->

Der sitter jeg fast, jeg vet ikke hvordan jeg får videre. Det er klart at det orginale brukernavnet og passordet er i funksjonen et sted, men jeg klarer ikke manipulere den slikt at jeg får riktig brukernavn/passord. Noen som kan hjelpe meg, hadde dette blitt satt stor pris på!
Sist endret av lillekrek; 16. juni 2011 kl. 10:22.
Spurte ikke du om dette for omtrent et år siden? Jeg kjenner i alle fall igjen det "brukernavnet" siden sist, men alt bak kolon-tegnet har endret seg. Står fortsatt på mitt om at det er snakk om et brukernavn:passord-par. Passordet virker som om det er base64-enkodet.
Sist endret av Dyret; 16. juni 2011 kl. 10:46.
Trådstarter
95 4
Når jeg så på den forrige tråden i ettertid, ble jeg flau over hva jeg hadde skrevet. Så da lagde jeg likegodt et nytt Men jeg har prøvd å sjekke om det er base64-enkodet og dessverre var det ikke det
Sist endret av lillekrek; 16. juni 2011 kl. 11:01.
Det jeg sa den gangen var at vi manglet nok kontekst til å kunne gjette hva dette gikk ut på, og det virker som om du holdt tilbake vital informasjon. Hvordan vet du at det kun er brukernavnet som er kryptert? Hvordan løste du det at det er opptil flere (8) spørsmålstegn i strengen? Er disse hint til noe? Hvorfor trodde du at Adler-32 var en grei algoritme å begynne med? Det er rett og slett noe "mystisk" over hele denne gåten, og du må nesten legge alle kortene på bordet om jeg skal kunne ha en sjanse til å hjelpe. Det kan hende det er løselig slik du har formulert den nå, men jeg vil ikke sitte og stange hodet i veggen i timesvis fordi det viser seg at du har utelatt noe.
Trådstarter
95 4
Hei,

Vi var flere som arbeidet sammen forrige gang, og han ene som hadde klart den sa at adler-32 var veien å gå. Det viste seg senere at han ikke pratet sant. Så når jeg laget tråden nå tok jeg all informasjonen som er i oppgaven. Nå er all konteksten med. Holder ikke tilbake noen informasjon denne gangen, alle kortene er på bordet. På grunn av begrensende javascript kunnskaper trodde jeg det kun var brukernavnet som var kodet to ganger.

Men når jeg ser på funksjonen

Kode

for(flro=0; flro<g77uik.length; flro+=2)
{
a57492e += unescape( '%' + g77uik.substr(flro,2));
}
Dette er en loopende funksjon, altså den gjentas av lengden på g77uik delt på 2. Ettersom funksjonen dekoder en hex (g77uik), prøvde jeg å få den til å dekode min hex, men fikk det dessverre ikke til. Klarer ikke helt hvordan jeg skal gjøre det, eller så er det bare jeg som failer.
Altså, den lille kodesnutten bare konverterer fra htmlenkoding til ASCII. Hvis du fjerner alle spørsmålstegnene (hvorfor er de der?) så ender du opp med den formen du presenterer i førsteposten din.

Om du kjører den lille hexkoden gjennom der, eller om du konverterer den manuelt, er ett fett og det gir uansett "<!-- 6489aa34:eHUxOGEveDk0 -->". Skal du derimot kjøre den gjennom funksjonen du lister over må du ikke plusse på en '%' foran, da dette allerede er med.

"eHUxOGEveDk0" *kan* være base64-enkodet og blir til "xu18a/x94". Det foran kolon *kan* være brukernavnet, og xu18a/x94 *kan* være passordet, men det er helt umulig å si når jeg ikke vet hva slags passord man vanligvis får i dette spillet ditt. Hvis passordene på tidligere levler har vært noe i samme gata så er det greit å vite. Hvordan oppgavene løses er også greit å vite. Går det mest i krypto? Er det obskure greier? Kan det hende at f.eks. posisjonene til spørsmålstegnene tilsvarer posisjoner i alfabetet som til syvende og sist sier koden? Det kan liksom være hva som helst i hele verden, og dette er litt frustrerende at du ikke sier.
Sist endret av Dyret; 16. juni 2011 kl. 11:28.
Trådstarter
95 4
Aaah, oppgavene er veldig varierende. Det er alt fra svært lette funksjoner til svært omfattende operasjoner. Jeg ser ingen spørsmålstegn i min post, så jeg skjønner ikke helt hva du mener med det. Det jeg mente med at jeg hadde prøvd base64 dekryptingen var akkurat slikt som du sa; men det funket ikke. Noen av oppgavene kan være svært obskure ja. Noen passord er helt vanlige chars, mens andre kan være helt merkelige. Det går en god del i krypto og dette regnes under krypto. Når jeg kjører det gjennom funksjonen min +er jeg ikke på %(tror jeg iallefall). Men så vidt jeg har fått høre skal dette være latterlig enkelt, jeg spurte om hjelp på #javascript @ efnet og de flirte og sa at det var så åpenbart.
Sist endret av lillekrek; 16. juni 2011 kl. 11:43.
Spørsmålstegnene jeg snakker om oppstår visst når jeg kopierer fra forumet, og jeg er litt usikker på hvordan de kom på plass, da posisjon og antall virket helt random. Feilen er altså på min side, og å fjerne dem fikset alt.

Det er "latterlig enkelt og åpenbart" å tråkke gjennom funksjonen som konverterer stringen g77uik til formen du oppgir. Det videre hintet er da å dekode til du sitter med <!-- 6489aa34:eHUxOGEveDk0 --> og herfra blir det litt vanskeligere.

Deler du opp det foran kolon får du "64 89 aa 34", og hverken 89 eller aa (ingenting som starter med a) er gyldige ASCII-verdier, så jeg tror ikke funksjonen din skal brukes til noe videre. Det bak kolon kan "tilfeldigvis" dekodes til gyldig ASCII gjennom base64, og personlig synes jeg dette er litt *for* tilfeldig til at du skal ignorere det.
Sist endret av Dyret; 16. juni 2011 kl. 12:00.
Trådstarter
95 4
Altså det kan hende jeg ikke får frem det jeg prøver å si, så jeg prøver igjen, forhåpentligvis mer forståelig.

1. Jeg ser ingen spørsmålstegn i posten min, vises dette feil hos deg, kan jeg evt legge ut koden på pastebin.
2. Brukernavn og passordene man kommer frem til i spillet kan være alt mulig forskjellig, altså kan man ikke gjette seg fram til en spesiell formel på hva det kan være.
3.Ingen tidligere javascripts funksjoner har lignet
4. Denne oppgaven heter "encryption 3".
5. pastebin til kodenhttp://pastebin.com/syQ8xPwQ

Ja, jeg er egentlig i bunn og grunn enig med deg, men problemet er at jeg får det ikke til, uansett hva jeg prøver på.
Sitat av Dyret Vis innlegg
Deler du opp det foran kolon får du "64 89 aa 34", og hverken 89 eller aa (ingenting som starter med a) er gyldige ASCII-verdier, så jeg tror ikke funksjonen din skal brukes til noe videre.
Vis hele sitatet...
89 er en gyldig ascii-kode (for stor Y), og AA er med i det utvidede ascii-settet som negasjonstegnet ¬. 6489aa34 kan derfor være strengen @Y¬"
Trådstarter
95 4
Sitat av Provo Vis innlegg
89 er en gyldig ascii-kode (for stor Y), og AA er med i det utvidede ascii-settet som negasjonstegnet ¬. 6489aa34 kan derfor være strengen @Y¬"
Vis hele sitatet...
Dette har du helt rett i Dessverre fungerer ikke dette som brukernavn heller Har prøvd de fleste variasjoner av ascii, base64 og hex, men verken funket: (
Spørsmålstegnene var min feil, og jeg beklager. Noe må ha skjedd da jeg kopierte fra forumet, og jeg gikk da ut i fra at de var lagt til med vilje. Det er flott å vite at det ikke f.eks. er noe fast brukernavn, for da må det jaktes på både brukernavn og passord, og det må kunne antas at hintet du får (6489aa34:eHUxOGEveDk0) inneholder begge deler, sannsynligvis delt på midten med kolon-tegnet. Jeg er ganske sikker på at passordet er "xu18a/x94" og da gjenstår det å gjøre noe med "brukernavnet" (6489aa34).

Ut i fra det jeg ser er det 8 tegn alfanumerisk, og kandidater er derfor adler32, crc32 og crc32b av ulike hashingalgoritmer. Å reversere slike algoritmer er ikke mulig, og du må i beste fall brute-force. Heldigvis er alle disse algoritmene laget for å være ekstremt raske, så så lenge du har en relativt kjapp generator av forskjellige brukernavn så er det fort gjort å sjekke dette. Kan først gjøre en enkel analyse for det enkleste tilfellet i Adler-32:

Resultatet 6489AA34[16] = 1686743604[10] = A + B * 65536
A = summen av alle ascii-verdiene til bokstavene + 1 (modulo 65521) [Sum 1 + D1 + D2 ... Dn mod 65521)
B = n*D1 + (n-1)*D2 ... + Dn + n (mod 65521) hvor n er antall tegn i tekststrengen.

Siden B vokser eksponensielt med n vil den wrappe over 65521 ganske fort, mens A kan antas å være svært liten for mindre strenger. Vi kan dermed anta at A er det tallet vi må trekke fra 1686743604 for at det skal bli delelig med 65536. Dermed er A lik 43572. Hvis vi forenkler det veldig, og sier at en bokstavs ASCII-kode er ca. 100 i snitt vil brukernavnet derfor antageligvis være bortigmot 43 tegn langt. Siden dette er forferdelig langt, kan vi nok anta at B har nådd modulogrensen, og at antagelsen vår var feil. Det kan også bety at det rett og slett er feil algoritme.

Prøv brute-forcing og få f.eks. John The Ripper til å generere input til programmet ditt, så får du se hvor langt du kommer.


Sitat av Provo Vis innlegg
89 er en gyldig ascii-kode (for stor Y), og AA er med i det utvidede ascii-settet som negasjonstegnet ¬. 6489aa34 kan derfor være strengen @Y¬"
Vis hele sitatet...
Vi snakket for øvrig hexadecimalt her på alt det andre, men om vi tolker det decimalt så er jeg med på tankegangen din

Dog litt rart å uttrykke et decimalt tall med hexadecimale bokstaver.
Sist endret av Dyret; 16. juni 2011 kl. 12:27.
Trådstarter
95 4
Ikke dum idè, tenker jeg setter det på nå, men så vidt jeg kan se av koden har den ikke inkorporert adler-32 hashing, iallefall ikke adler-32s public key, men kan hende. Det kan forresten også være Ghash32-3 og Ghash32-5 også.
Sitat av Dyret Vis innlegg
Vi snakket for øvrig hexadecimalt her på alt det andre, men om vi tolker det decimalt så er jeg med på tankegangen din

Dog litt rart å uttrykke et decimalt tall med hexadecimale bokstaver.
Vis hele sitatet...
Beklager. Jeg som blingset i tabellen. Men, for å rette på meg selv, og selv om jeg ikke har et fnugg av tro på at dette stemmer: hvis man bruker en utvidet ASCII-tabell som f.eks. Windows 1252-tegnsettet (som kan være noe far fetched), vil den heksadesimale strengen 64 89 aa 34 gi følgende tekststreng:

d‰ª4
Trådstarter
95 4
Sitat av Provo Vis innlegg
Beklager. Jeg som blingset i tabellen. Men, for å rette på meg selv, og selv om jeg ikke har et fnugg av tro på at dette stemmer: hvis man bruker en utvidet ASCII-tabell som f.eks. Windows 1252-tegnsettet (som kan være noe far fetched), vil den heksadesimale strengen 64 89 aa 34 gi følgende tekststreng:

d‰ª4
Vis hele sitatet...
Haha! Morsomt du skulle si det, jeg har prøvd det også
Min 2-linjers adler-32-løsning i python med John som input klarer i alle fall 3.500.000 ord i sekundet, og dette på én kjerne av kontor-PCen min. Jeg tror derfor ikke at dette burde ta så lang tid.

Regner med at det er ca. tilsvarende tall for andre algoritmer, men Adler-32 er hakket raskere enn CRC32-algoritmene.
Trådstarter
95 4
Sitat av Dyret Vis innlegg
Min 2-linjers adler-32-løsning i python med John som input klarer i alle fall 3.500.000 ord i sekundet, og dette på én kjerne av kontor-PCen min. Jeg tror derfor ikke at dette burde ta så lang tid.

Regner med at det er ca. tilsvarende tall for andre algoritmer, men Adler-32 er hakket raskere enn CRC32-algoritmene.
Vis hele sitatet...
Tusen takk for hjelpen, men driver å runne mot adler-32 her, enda ikke fått riktig output. Tar 16 mill i sekundet her, men går over 2 kjerner.

Men jeg tviler i utgangspunktet på at det er en checksum funksjon.

Har testet småe, store bokstaver + tall og tegn fra 1-6 hittil, ser mørkt ut for Adler-32

Haha! Det var faktisk en checksum, some jeg ikke testet sist gang, og det var CRC-32. Denne er da løst, og jeg takker svært mye for hjelpen Dyret og Provo. Takk for at dere orket å prøve! Kp på dere begge to!

Ps. Den andre delen var ikke base64 enkodet, jeg tror den ikke var det nettop fordi det var så åpenbart

Ser ut som om jeg var for kocky, og nFF bugger seg her hos meg, kan ikke rette tråden min.

6489aa34:eHUxOGEveDk0

6489aa34 dekryptert med CRC-32 = dlV7VA Kan det være crc-32b ? Setter det på nå iallefall
eHUxOGEveDk0 dekryptert med base-64 =xu18a/x94.

Har testet alle muligheter med de nevt ovenfor, funket ikke dessverre : (
Dersom det ikke er CRC-32B eller ghash. noen som har peiling hva som er neste ?

Det var heller ikke CRC-32B som dekryptert ble: D2RwWI.

Testet med kombinasjonene nevt ovenfor.
Sist endret av lillekrek; 16. juni 2011 kl. 12:59.