Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Kolejne hackme – wejściówka na „Atak i obrona”

01 października 2013, 11:55 | Aktualności | komentarze 72
Tagi:

Kontynuując tradycję sekurakowych hackme, dzisiaj chcemy Was zaprosić do konkursu, w którym główną nagrodą jest bezpłatna wejściówka na warszawską konferencję „Atak i obrona”. Dodatkowo mamy również dwie nagrody pocieszenia.

Jeśli chodzi o samą konferencję,  organizatorzy proponują dość świeże podejście – nie skupiają się na dziesiątkach różnych tematów, tylko całe wydarzenie budują wokół dwóch „gorących” tematów: DDoS oraz APT. Osobiście interesuje mnie co będą mieli do powiedzenia prelegenci w tematach związanych z DDoS – mimo upływu czasu, sprawdzone metody ochrony przed różnymi wariantami tego ataku cały czas nie są dobrze opisane czy zbadane.

Na całej imprezie nie zabraknie też prezentacji sekurakowej, związanej dla odmiany z tematyką APT. W każdym razie zapraszam do przejrzenia programu i miejmy nadzieję do zobaczenia pod koniec listopada w Warszawie ;-)

aioSekurak

Przechodząc do konkursu, tym razem zadanie dostępne jest tutaj, a celem jest wydobycie nazwisk dowódców (komandorów) statków – jest ich trzech; a następnie przesłanie tych danych na adres: sekurak@sekurak.pl

Wejściówka na atak-obrona.pl będzie dla pierwszej osoby, która prześle prawidłową odpowiedź, dla dwóch kolejnych osób mamy po jednej rocznej licencji na ESET Smart Security (dziękujemy firmie Dagma).

Podziękowania dla naszego czytelnika – Pawła Maziarza – za przygotowanie tego hackme!

Aktualizacja: Mamy pierwsze osoby które rozwiązały zadanie:

  • Sebastian Gilon – pierwsze miejsce (wejściówka)
  • Radosław Rydel – drugie miejsce (licencja eset)
  • Marcin Nowak – trzecie miejsce (licencja eset)
  • Wojciech Płoskonka – czwarte miejsce

Gratulacje i czekamy na dalsze odpowiedzi!

PS

Zadanie jest raczej z kategorii łatwiejszych, choć nie jest do końca oczywiste. Spróbujcie też nie stosować automatów – mamy wdrożoną testową ochronę przed próbami automatycznymi (czasowa blokada komunikacji z serwisem hackme).

michal.sajdak<at>sekurak.pl

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. pecetq

    Jestem tu nowy i mam głupie pytanie: czy publikujecie rowiązania po zakończeniu hackme? Bawię się tym ciastkiem, ale widzę, że jeśli chodzi o SQL to jestem cienki jak lura w podziemnym barze na dworcu zachodnim.

    Odpowiedz
    • Nie publikujemy. A to dla tego żeby każdy na spokojnie mógł zrobić bez spoili poprzednie hackme (patrz tag hackme), dla niektórych jest zrobione całkiem spore teoretyczne intro.

      Odpowiedz
  2. Marcin

    Jak tam, są już jakieś poprawne odpowiedzi? ;)

    Odpowiedz
  3. a ma ktoś chociaż wskazówkę jak się za to wziąć ?:)

    Malutka podpowiedź ?

    Odpowiedz
  4. Zonni

    via cookie sql injection

    Odpowiedz
  5. OiSiS

    Tak, sql przez cookie. Pewnie jutro dokoncze. Automatu nie znam do tego ale recznie sie da.

    Odpowiedz
  6. zmieniam cookie na status:broken’ or 1=1# ale lipa zero odzewu hmmm

    Odpowiedz
    • a jakieś inne pomysły na testowanie / wykrywanie SQLi? ;)

      Odpowiedz
  7. pecetq

    Pobawię się jutro w robocie. Rozbudziliście moją ciekawość.

    A co do waszych materiałów to szacun, fajnie że komuś chce się po polsku zrobić coś porządnego!

    Odpowiedz
  8. marcin

    a może
    :broken’ AND '1’=’1
    :broken’ AND '1’=’2

    ;)

    Odpowiedz
  9. env

    Wrzućcie przykład jak można rozbudować wyrażenie filters=status:broken, żeby select zwrócił jakiś wynik.

    Odpowiedz
  10. marcin, Twoje nie hula,

    Kombinuję… AAA proste? :p

    Odpowiedz
  11. Niby można status:broken’ or '1’=’1 ale i tak nie wiem jak pokazać zawartość kolumny która nie jest podana w select :) coś wykombinuję :p

    Odpowiedz
  12. Ja obstawiałem raczej time based, zrobiłem testy trochę automatycznie (sorry, nie chce mi sie wklepywać wszystkich zapytań recznie) niestety nie dało rezultatu . Jestem przeogromnie ciekaw rozwiązania, może sekurak coś podpowie bo widzę wszyscy idą po standardowemu:)

    Odpowiedz
  13. A jeśli by nawet wykorzystać union to skąd wiedzieć jak się nazywa kolumna i nazwa bazy ? hmm

    Odpowiedz
  14. OiSiS

    Widze ze „marcin” doszedl tam gdzie ja. Oprocz tego co napisales doszedles dalej? Dodam tylko ze nie jest to raczej taki sam typ ataku jak poprzednio, czyli sql injection integer based.

    Odpowiedz
  15. qlfonix

    Mam

    Odpowiedz
  16. Powiem tak, myślę, że nawet wykonując status:0 wyświetla całość na stronie, bynajmniej jak wyświetlić więcej informacji niż zapisane jest to w php?

    Jak pokazać result z innej kolumny? I nie pytam tutaj o składnię union, bo nie mam skąd wziąć nazwy ani bazy, ani tabeli. Stronie nie wyświetla błędów sql_error…

    Dajcie jakąś wskazówkę…

    Odpowiedz
  17. qlfonix

    Wskazówka jest następująca:
    NIGDY SIĘ NIE PODDAWAJ!

    i głosuj na KNP

    Odpowiedz
  18. Mała aktualizacja – mamy 3 pierwsze osoby które rozwiązały zadanie! (szczegóły w treści postu).

    Odpowiedz
  19. sekurak, skoro już mamy winerów, to może jakaś lepsza podpowiedź bazująca na tym co już z chłopakami napisaliśmy ?

    Thx

    Odpowiedz
    • Dobra. Podpowiedź- co jest nie tak ze spacjami we wstrzyknięciu?

      Odpowiedz
  20. Teraz pytanie w którym?

    status:available’ or '1’=’1

    ?

    Odpowiedz
  21. %20 ?

    cookie o wartości:
    status:0’%20or%20’1’=’1

    Zwraca to samo co 0

    Może nie powinienem bazować dalej na przeglądarce, nie wiem czego oczekuję, żeby mi wyświetliła wyniki kolumn? skoro pewnie php przetwarza result i wyświetla tylko dane z kolumn zadeklarowanych?

    Znając życie inni znają jakieś narzędzie do podejrzenia result i wyciągnięcia całości. sqlmap ? patrzyłem na argumenty, nic nie pomogło mi tego przeskoczyć, zaczynam się irytować… grrr…

    Odpowiedz
    • %20 niewiele da bo http serwer i tak to odkoduje do „normalnej” spacji.
      narzędzia – są tutaj blokowane – a przynajmniej znacznie ograniczana ich szybkość ;)

      Odpowiedz
  22. No to nie Pomogłeś :))

    Odpowiedz
  23. qlfonix

    /*
    * 'Nigdy się nie poddawaj!’
    */

    Odpowiedz
  24. No dobra, Hakerki, to może ktoś w końcu zdradzi o co chodzi ze spacjami? :) sekurak :) i tak się skończył już konkurs – zaraz wyłysieje, nie mam pomysłu :p

    Odpowiedz
  25. Miya

    Wykorzystałam już chyba wszystkie pomysły i niestety postępów zbyt wielkich nie zrobiłam. Wiem ile tabela posiada kolumn, lecz nie mogę tej wiedzy wykorzystać. Niby proste hackme, ale… :)
    Może niektóre słowa kluczowe są filtrowane w jakiś sposób?

    Odpowiedz
  26. marcin

    nawiasy, komentarze powinny pomóc

    Odpowiedz
    • tak, to duża i dobra podpowiedź :)

      Odpowiedz
  27. Globalna podpowiedz: zastanówcie się z jaką DB możemy tu mieć do czynienia?

    Odpowiedz
  28. Mysql ? :)

    Odpowiedz
  29. qlfonix

    Wg mnie NAJWYŻSZY CZAS podać statystyki: ile osób, kiedy, itd
    i przygotować następne hackme :)

    Odpowiedz
    • qlfonix: statsy niebawem. nowe hackme – tym razem bardziej sieciowe i z fajną nagrodą główną – za ok tydzień.

      Odpowiedz
  30. qlfonix

    A propos DB, to byłam moja piąta próba zaraz po Gadfly :)

    Odpowiedz
  31. No i oczywiście pokazać rozwiązanie. Z nieba pustej kartki nikt się nie nauczy ;]

    Odpowiedz
  32. Marcin

    ! niczego na razie nie publikujcie bo walka dalej trwa ;)

    Odpowiedz
  33. Lukasz

    mozecie chociaz powiedziec czy funkcje typu substr,length,select,union,… sa poblokowane czy jest mozliwe ich uruchomienie w jakis magiczny sposob?

    Odpowiedz
  34. env

    Funkcje select i union działają normalnie. Można zrobić wstępny rekonesans bazy przy pomocy sqlmap, tylko konieczne jest ustawienie kilku dodatkowych parametrów.

    Odpowiedz
  35. No właśnie właśnie, tylko nie mogę odnaleźć jakiegokolwiek przykładu na użycie sqlmap gdy zapytania są zagnieżdżone w cookie…

    Odpowiedz
  36. Lukasz

    @env dzieki za podpowiedz bardzo sie przydala. Odpowiedz wyslana.

    @webster:
    jak stare przyslowie mowi: „when all else fails… check the manual”
    https://github.com/sqlmapproject/sqlmap/wiki/Usage
    Tam znalazlem wszystko co potrzebne zeby zrobic to hackme.

    Odpowiedz
  37. OiSiS

    SQLMap się sprawdzi. Spróbujcie dodać coś takiego:
    –cookie=’filters=status:available’ -p „cookie”

    Odpowiedz
  38. Sulej

    jesli chodzi o ciastko to
    –cookie=”ciastko=xxx” -p ciastko

    Odpowiedz
  39. python ./sqlmap.py -u „http://training.securitum.com/7/” –cookie=’filters=status:0’ -p cookie –param=”;” –level=2 –risk=2

    No i gdzieś muszę mieć coś nie tak – Wniosek? – Bo nie działa… ;]

    Odpowiedz
    • Generalnie odradzam stosowanie automatów – mniej się można nauczyć :P

      Odpowiedz
  40. OiSiS
    Odpowiedz
  41. Sekurak – ja wiem, że brakuje nam wiedzy i niestety że tak to powiem z nieba już jej nie weźmiemy :) Próbowałem ręcznie modyfikować cookie i jedyne co udało mi się uzyskać to wyświetlenie selecta z obu argumentów przy pomocy filters=status:0. Wszystkie próby użycia union kończyły się błędem strony.

    Czas chyba na konkretne wskazówki bez owijania w bawełniaka :)

    Odpowiedz
  42. OiSiS- Nie Czujecie, że nic nie Wnosicie nowego w dyskusję? Podaliście linka do sqlmap o którym mowa od samego początku tej zabawy. Dla mnie to puste posty. Manuala czytałem i nie przyniosły mi żadnego rezultatu.

    Poza tym, jestem zdania jak Sekurak, że stosowanie automatów nie uczy. Osobiście chcę zrozumieć dokładne działanie tego hackme, co jak i dla czego. Wszystkie sposoby które znałem nie przyniosły mi żadnego rezultatu a jedynie wykrzaczyły stronę. Może źle robię, że zakładam iż baza to Mysql, jednak widocznie brak mi wiedzy i doświadczenia by to ogarnąć. Raz spróbowałem zgryźć to hackme sqlmap’em i byłem na siebie wściekły, że jak dziecko neostrady używam Kali/Backtracków Lame narzędzi.

    Grrr, jestem wściekły na siebie, że nie mogę tego rozgryźć… masakra

    Odpowiedz
  43. OiSiS

    Webmaster odezwij sie do mnie na maila oisis(at)o2.pl dam jakies wskazowki. Tutaj po za sprawdz manuala nie chce wychodzic bo bedzie to spoiler. Dzieci neostrady uzywaja Havija :).

    Odpowiedz
  44. SebaVegas

    @webster: źle zakładasz, że to mysql

    sposób na rozwiązanie:
    1. Znajdź miejsce injekcji
    2. Wylicz kolumny zapytania
    3. Wyświetl nazwy kolumn atakowanej bazy danych
    4. Wyświetl wyniki

    i trzeba pamiętać o magicznej spacji
    nie potrzeba automatów, wszystko z palca zrobisz w 2 min.

    Odpowiedz
  45. qlfonix

    @webster
    W jakim miejscu jesteś?
    Czy umiesz już stworzyć ciastko które zmodyfikuje tak zapytanie aby wyświetlić tylko informacje o jednym statku?
    Czy potrafisz zwrócić dwa wiersze informacji o statkach: jeden z „available” drugi „broken”?
    Najlepiej nic nie zakładaj tylko sprawdź czy funkcje specyficzne dla danej DB poprawnie modyfikują wyniki.

    Może zrób dla wprawy poprzednie hackme :)

    Odpowiedz
  46. 1. status:broken’+OR+’1’=’1
    2. status:broken’+OR+’1’=’1’+LIMIT+’1 # jednak wywala się i nie zwraca nic

    Mam problem z budowaniem składnie, union nie działa tak jak widać limit również.

    Bawię się, ale raczej ta zabawa do niczego nie prowadzi. Brakuje mi „światełka”

    Odpowiedz
  47. qlfonix

    A co robimy jak limit nie działa?

    Odpowiedz
  48. env

    O tym, że spacje są filtrowane i można zastąpić je komentarzami już było w komentarzach. Jeżeli nie działa klauzula LIMIT trzeba poszukać jej odpowiednika dla innych DB.

    Wyniki można ograniczyć w następujący sposób:
    [moderacja]

    To już chyba spoiler ;)

    Odpowiedz
  49. Udało się dzięki OiSiS

    Niestety sqlmap, teraz siedzę i ogarniam to z manuala, ale powiem szczerze że średnio wiem od czego zacząć. Niby sqlmap wyrzuca z jakich linii korzysta, ale są mocno przesadzone…

    Ktoś ma linie na wyświetlenie nazw kolumn ?

    Odpowiedz
  50. według man jest problem, bo limit występuje od razu po SELECT.

    np.
    SELECT FIRST int SKIP int kolumna where kolumna = 'zmienna’

    tak ogólnie. Injection wstrzykujemy w miejsce zmiennej co utrudnia sprawę. Próbowałem wcisnąć ją po zmiennej tak jak order by, ale nie zaskoczyło.

    Nie mam też pomysłu na rozsądne union zakładając, że nie znamy nazw kolumn – no przecież nikt nie korzystał z sqlmap’a…

    Odpowiedz
  51. Zjadłem po
    „SKIP int” FROM

    mam nadzieję że Wybaczycie

    Pozdr.

    Odpowiedz
  52. env

    @webster kombinujesz jak koń pod górę :) Domyślam się, że wiesz już z jaką DB mamy tutaj do czynienia, więc:
    1. Ustal liczbę kolumn tabeli.
    2. Przy pomocy klauzuli UNION wyświetl nazwy wszystkich tabel dostępnych w DB (istnieje tabela systemowa, która takie informacje przechowuje). Nazwa jednej tabeli będzie naprawdę interesująca.
    3. Przy pomocy klauzuli UNION wyświetl nazwy wszystkich pól wszystkich tabel dostępnych w DB (istnieje tabela systemowa, która takie informacje przechowuje). Nazwa jednego z pól tabeli będzie naprawdę interesująca.
    4. Przy pomocy klauzuli UNION, interesującej nazwy jednego z pól tabeli i interesującej nazwy jednej z tabel wyświetl nazwiska dowódców statków.

    Odpowiedz
  53. RDB$RELATION_NAME nie działa w UNION. Zauważyłem, że sqlmap zastępuje ją w kosmiczny NULL,blebleblebleble, kosmo_warunek,bleble sposób który działa do wyświetlenia nazwy tabeli

    Znalazłem również w necie linię do wyświetlenia nazw tabel i również bazuje na RDB$RELATION_NAME, tutaj nie hula…

    hmm ?

    Odpowiedz
  54. Trochę się rozpiszę, mam nadzieję, że Sekurak Wybaczysz delikatny spoiler.

    [sekurak: niestety nie wybaczy ;-) To znaczy chciałem coś przepuścić, ale niestety komentarz już bardzo mocno naprowadza, czy prawie pokazuje finalne rozwiązanie ;-)]

    Odpowiedz
  55. baza to firefox albo fajerindehol :D:D:D

    Odpowiedz
  56. Dobra, rozgryzłem całość, all linie z łapy, bez pomocy jakiś automatów, ale ale…

    Brakuje mi informacji teoretycznej …
    1. dla czego Aby wyciągnąć nazwy kolumn RDB$FIELD_NAME wystąpiło w przed ostatniej pozycji NULL?
    2. dla czego Aby wyciągnąć zawartość, nazwy kolumn wystąpiły w drugiej pozycji NULL ?

    Proszę nie uznać tego za spoiler… :)

    Odpowiedz
  57. Kiedy kolejne hackme ? :)

    Odpowiedz
    • Przyszły tydzień w końcu. To znaczy hackme jest gotowe, ale jeszcze chwilę czekamy ;)

      Odpowiedz
  58. :))) No to czekamy :)

    Odpowiedz
  59. sekurak Przyjacielu, kiedy next hackme ?:)

    Odpowiedz
    • @webster – when it’s done ;-)

      Odpowiedz
  60. ok :)

    Odpowiedz
  61. OiSiS
    Odpowiedz
    • :)

      My mamy nowe hackme gotowe – tylko jeszcze czekamy na decyzję sponsora kiedy ruszać ;)

      Odpowiedz

Odpowiedz