niedziela, 11 maja 2008

No i jazda z trzecią edycją ;-)

Hackme 3.0 - level #1

Wszystko zapisane jest w tej linijce:
if (cos==document.title) {alert('Haslo poprawne!');
Czyli hasłem jest tytuł strony, który brzmi "hackme"
Forward do: hackmex.htm

Hackme 3.0 - level #2

Znowu prościzna. Jedna linijka mówi już nam hasło:
if (liczba*liczba==1550025) {alert('Dobrzeeeeee... :P');
Odwracając to hasłem jest pierwiastek z tej liczby, który wynosi 1245
Forward do: 1245q3.htm

Hackme 3.0 - level #3

Trzeba rozwiązać substring, licząc od zera. Wychodzi wiola.
Forward: wiola.htm

Hackme 3.0 - level #4

piątek, 2 maja 2008

Czas na wersję nr 2

http://www.uw-team.org/hm2/index.htm

Hackme 2.0 - level #1
hasełko jest w kodzie w drugim ukrytym formularzu, który ma wartość "text".
Zapisując kod na dysk i wyrzucająć parametr hidden wszystko ładnie widać.
Forward do: text.htm

Hackme 2.0 - level #2

Jak będę miał czas, to zajrzę w kod.
Wszystko, co trzeba zrobić to zamienić ciąg "%62%61%6E%61%6C%6E%65". Wychodzi nam, ż zadanko było banalne.
Forward do: banalne.htm

Hackme 2.0 - level #3

Wystarczy przekleić do Opery.
Forward do 1234.htm

Hackme 2.0 - level #4

Podobnie jak w poprzednim. Później odpalamy kalkulator i jako dec dajuemy 258, klikamy hex i mamy 102. Forward 102.htm

Hackme 2.0 - level #5

Nie potrzeba znać hasła do tego :)
Wystarczy przekazać w adresie zmiennym wartości, które mają przyjąć (?has=1&log=1)

Forward do: url.php

Hackme 2.0 - level #6

Jak ja lubię Operę :)
Wyświetla wszystko z ciasteczek :)

Nie bardzo wiem jak to legalnie rozwiązać nie używając ostatniego ciacha z linkiem

Forward: ciastka.htm

Hackme 2.0 - level #7

Wystarczy dobrze wczytać się w kod skryptu, a właściwie wystarczą dwie linijki :)


src="include/'+haslo+'.js"
else location.href=strona; }

Wychodzi na to, że hasło kieruje nas do pliku w katalogu. Trzeba znać jedynie nazwę pliku, czyli hasło. Warto wykorzystać funkcję serwera apache, która pokazuje listning plików w folderze (Index of ...). Po przejściu do /include ukazuje nam się plik cosik.js Eureka!
Forward: listing.php

Hackme 2.0 - level #7
Jak by tu obejśc banalne zabezpieczenie?
Wyłączyć obsługę JavaScriptu ? :P

Lookamy teraz w źródełko :)
Dochodzimy do etapu: listing.php?haslo=kxnxgxnxa
Forwardujemy się do pokaz.php i mamy Matrix :P

Coś jest zapisane w Rot13 (przesunięcie o 13literek w prawo). Szukamy więc dekoderka :)
Google nie umarło, więc dostajemy np. adres: http://free.of.pl/k/krzbia/javascript/rot13.htm

Po zdekodowaniu pierwszej linijki dowiadujemy się, że poniższa jest z przesunięciem o 2.
Druga linijka to adres: www.sitinthecorner.com/binary/binary.php
Szkoda, że ten nie działa, ale szukamy innego. Google -> binary to text
Kod: bezkvu6r

HM v2.0 zaliczone!

czwartek, 1 maja 2008

Let's Get This Party Started!

http://hackme.pl/viewpage.html?page_id=3
www.uw-team.org/hackme/index.htm HACKME 1.0

Level #1
Prościzna - przewijamy stronke na doł i mamy: (haslo.value=='a jednak umiem czytac') :P
Forward do: ok_next.htm

Level #2

Ciekawie wyglada druga linijka ;-P

parametr src ustawia nam zrodelko
otwieramy stronke /haselko.js i okazuje sie, że has to nasza taka mała zmienna, a wszystko to było za proste :P
Forward do: formaster.htm

Level #3

Kolejna łatwa sprawa - wyciaganie znaczkow ze stringa :)
var dod='unknow';
var literki='abcdefgh';
ost=literki.substring(2,4)+'qwe'+dod.substring(3,6);

i w końcu haslo.value==ost
Google nie gryzie - Metoda substring zwraca podciąg ciągu string rozpoczynający się od znaku o indeksie indeks1 i kończący się przed znakiem o indeksie indeks2.
W innzch jezykach chyba lapie takze ostatnią literę? Przykład: var tab = "abcdefg".substring(2, 5);
da w wyniku ciąg cde.

ost = 'cd' + 'qwe' + 'now' = "cdqwenow"
I jedziemy dalej. Forward do cdqwenow.htm

Level #4

Źródełko, źródełko, powiedz nam hasełko :)
Googla nie wyłączyli, więc szukamy co robi funkcja IsNaN.

Ta funkcja zwraca wartość false, jeżeli parametr wartość przedstawia wartość liczbową, lub true, w przeciwnym razie. A zatem wykonanie instrukcji:
isNaN("abc")
spowoduje zwrócenie wartości false, a:
isNaN("123")
zwrócenie wartości true.


Trochę mało...
Kolejna porcja wiedzy:

Metoda round zwraca wartość wynikającą z zaokrąglenia parametru wartość do najbliższej liczby całkowitej, np.:
Math.round(4.49)
da w wyniku wartość 4, natomiast
Math.round(4.51)
da w wyniku wartość 5.


No to jedziemy z tą matematyką:
(6%2)*(258456/2))+(300/4)*2/3+121
6 modulo 2 =0
0 razy cokolwiek = 0
300/4 = 75
75* 2 = 150
150/3 = 50
121 + 50 = 171

Wklepujemy 171 i... zostalismy przekierowani na stronkę go171.htm :)P

Level #5

Post mi się skasował od tego miejsca ;(
A Blogger się chwali, że ma auto zapisywanie...
Wracając do zadanka, chyba czas na trochę nauki.

Metoda getMinutes zwraca liczbę sekund czasu reprezentowanego przez obiekt data.

Praktycznie rzecz biorąc wszystko jest w jednej linijce:
ile=((seconds*(seconds-1))/2)*(pomoc.value%2); , a ile ma wynosić 861
zmienna pomoc jest brana z pola tekstowego, a nastepnie mnożona kilka razy. Jeżeli mnożenie, to wynik modulo nie może dać zera. Tak więc liczby parzyste odpadają na dzień dobry. Już wiemy, ze należy wprowadzić jakąkolwiek liczbę nieparzystą.

Zostało nam do rozwiążania równanie:
861 = ((seconds*(seconds-1))/2)*1;
861 = ((seconds*(seconds-1))/2);
861*2 = seconds*(seconds-1);
1722 = seconds*(seconds-1);

Możemy to przekształcić:
1722 = seconds*seconds - seconds;
1722+seconds = seconds*seconds;

Możemy rozwiązać równanie kwadratowe postaci:
seconds^2 - seconds - 1722 = 0

albo zauważamy, ze kwadrat 41 = 1681 - trochę mało.
kwadrat 42 = 1764
1764-42=1722 Bingo!

Należy wpisać jakąkolwiek liczbę nieparzystą i kliknąć w 42. sekundzie. :)
Forward na: 42x.htm

Level #6
Weźmiemy się za to w wolnym czasie

I czekają na nas kolejne literki :P

var lit='abcdqepolsrc';
var licznik=0;
for (i=1; i<=5; i+=2){
licznik++;
if ((licznik%2)==0) {znak='_';} else {znak='x';}
hsx+=lit.substring(i,i+1)+znak;
}
hsx+=hsx.substring(hsx.length-3,hsx.length);


pierwsze, co zauważamy, i będzie miało trzy wartośći: inicjującą 1,3,5.
startujemy z pierwszym obrotem pętli.
licznik=1, więc modulo = 1, wartosc z if false, pierwszy znak 'x';
hsx.substring(1,2)= 'b'; hsx = 'bx'
Drugi obrot petli:
i=3,licznik=2, znak='_';
hsx.substring(3,4) = 'd';
hsx = 'bxd_';
Trzeci obrót:
i=5,licznik=3, znak='x';
hsx.substring(5,6) = 'e';
hsx = 'bxd_ex';
Wychodzimy z petli.
Teraz wykonuje się instrukcja:
hsx+=hsx.substring(hsx.length-3,hsx.length);
hsx = hsx + hsx.substring(3,6);
hsx = 'bxd_ex' + '_ex';
hsx = 'bxd_ex_ex';

Hurra, lvl 7 :)
Forward do: bxd_ex_ex.htm

Level #7

Zerkając na kod aż się rzuca w oczy, że wystarczy plxszn_xrv wkleić do adresu, dodać htm i już jesteśmy w lvl8.
Ale bądźmy bardziej uczciwi :)

plxszn_xrv = spróbujmy to odkodować
podstawiając to do prawej strony i odczytując lewą wychodzsi nam hasełko="kocham cie" :P

Level #8

Ale fajny kodzik :)

Nawet część jest hexadecymalnie :)
Szczególnie ładnie wygląda linijka:
document.write('<\s'+'c'+'r'+'i'+'p'+'t src="%7A%73%65%64%63%78%2E%6A%73"><\/s'+'c'+'r'+'i'+'p'+'t'+'>');
Nie bardzo nam się chce odkodowywać zapis hexadecymalny, więc wpisując w Operę dostajemy: zsedcx.js


ax=eval(2+2*2);
bx=eval(ax/2);
cx=eval(ax+bx);
get=0;


Odkodowanie %70%61%73%73%77%64 z końca źródła strony daje ciekawy wynik :P
Więc zabieramy się za liczenie...
var roz='dsabdkgsawqqqlsahdas'; var tmp=roz.substring(2,5)+roz.charAt(12);
Pamiętając o indeksacji od zera tmp = 'abdq';

metoda eval zwraca nam obliczoną wartość przekazaną w parametrze, lub wykonuje tak jak u nas zmienne.


function sprawdz()
{
zaq=haslo.value; wyn='';
alf='qwertyuioplkjhgfdsazxcvbnm';
qet=0;
for (i=0; i<=10; i+=2)
{
get+=10;
wyn+=alf.charAt(qet+i);
qet++;
}
wyn+=eval(ax*bx*cx);
if (wyn==zaq) {self.location.href=wyn+'.htm';} else {alert('Zle haslo!');}
}


Trzeba to policzyć :(

Nie bardzo mi się chce :P
Zapis na dysk, mały alert i mamy pasełko "qrupjf162"

You win!

Gratulacje!
Wlasnie przeszedles gre Hackme 1.0 by Unknow!
Gratuluje cierpliwosci

HackMe 1.0 zaliczone! Bierzemy się za kolejne.