17:16
21/12/2016

Była północ, kiedy nagle siedzącego przed komputerem Zbyszka oślepił blask bijący od strony okna. Zaciekawiony podszedł bliżej i dyskretnie wyjrzał na zewnątrz. Dostrzegł sąsiada z bloku naprzeciwko, który właśnie w tej chwili testował swoje nowe świąteczne oświetlenie. Zbyszek nienawidził świąt, a jednym z powodów był między innymi wspomniany wyżej człowiek. Przez niego musiał przyzwyczaić się do siedzenia przy zasuniętych żaluzjach, a zasunięte żaluzje sprawiały, że czuł się w pewien sposób ograniczany, nie mówiąc już o tym, że wykonane z metalu znacznie obniżały transfer pożyczanego od sąsiada sygnału sieci Wi-Fi, którą Zbyszek wykorzystywał do pobierania z torrentów …legalnych dystrybucji Linuksa. Nie mogąc uwierzyć, że kolejny rok minął mu tak szybko, westchnął i uruchomił radioodbiornik stojący na biurku. Z głośników rozległo się:

„…Last Christmas, I gave you my heart. But the very next day, you gave it away. This year, to save me from tears, I’ll give it to someone special…”.

— „A więc zaczęło się na dobre…” — pomyślał, kierując swoje kroki do kuchni. Jakby na domiar złego, z telewizora popłynęła reklama kolejnego symbolu świąt:


Do kompletu zwiastunów zbliżających się wielkimi krokami świąt, brakowało jeszcze tylko jednego – e-maili od znajomych, zawierających świąteczne życzenia. Kiedy uświadomił sobie, że lada chwila zacznie otrzymywać żenująco płytkie, skopiowane z internetu świąteczne wierszyki i pozdrowienia, zrobiło mu się słabo. Zawsze wtedy czuł się szantażowany emocjonalnie: z obrzydzeniem odpisać „Dzięki, wzajemnie!”, czy olać i wyjść na gbura.

Uznał, że najlepszą metodą obrony w tym wypadku będzie atak!

Automatyzacja wypisywania świątecznych kartek

W przeciwieństwie do swoich znajomych, Zbyszek był zbyt leniwy żeby wysyłać życzenia (nawet skopiowane z sieci) ręcznie. Przypomniał sobie o swoim koledze pracującym w korporacji w roli Quality Assurance Engineer. Ten, w ramach ciekawostki pokazał mu, jak automatyzuje gry przeglądarkowe za pomocą narzędzia o nazwie Selenium IDE.

Był to prosty plugin do przeglądarki Firefox, który pozwalał nagrywać, a następnie odtwarzać akcje użytkownika. Program nie zachwycał oprawą graficzną –- ale przecież „liczy się wnętrze…” pomyślał Zbyszek i rozpoczął od znalezienia najbardziej żenujących życzeń świątecznych w sieci. Następnie stworzył listę adresów e-mail swoich znajomych. Ta część jego planu wymagała niestety trochę wysiłku, ale stracony czas miał się zwrócić podczas wysyłki życzeń noworocznych i świąt wielkanocnych. W końcu skrypt automatyczny będzie bezobsługowy i możliwy do wielokrotnego wykorzystania przy każdej okazji — wystarczy jedynie zmienić szablon treści życzeń!

Aby dodać szablon życzenia w Selenium, należy jako komendy użyć storeEval, a w polu “target” wpisać treść życzeń i nazwać zmienną np. “życzenia” (w polu “value”).

Teraz wystarczyło znaleźć darmową bramkę do wysyłania wiadomości! Najlepiej taką bez zabezpieczenia CAPTCHA, bo choć istnieją sprawdzone metody na obejście tego mechanizmu, to o tej godzinie nie czuł się już na siłach, aby zmierzyć się z tematem. Po znalezieniu strony, ale przed wejściem na nią, Zbyszek nacisnął w Selenium przycisk “record”. Dzięki czemu narzędzie automatycznie dodało komendę odpowiedzialną za wejście na żądany adres URL, kiedy strona z bramką otwarła się w przeglądarce.

„Prostota i skuteczność – dokładnie czegoś takiego potrzebowałem!” — pomyślał Zbyszek widząc najlepszą na świecie (bo darmową) bramkę mailową.

Dalsze kroki wymagały jednak od niego większego zaangażowania, na szczęście, z Selenium poradzi sobie każdy, nawet średnio rozgarnięty Script Kidd, więc i Zbyszek dał radę. Nacisnął przycisk „Select”, a następnie w przeglądarce kliknął w pole formularza, które planował zautomatyzować. Jako komendę wybrał „Click”, a do parametru Value wpisał swój adres email.

Pola adresat i treść wiadomości zautomatyzował w ten sam sposób. Na końcu, pozostało tylko przepisać ze znalezionego w Internecie przykładu kilka kroków, pozwalających na automatyczne zapętlenie serii zapisanych komend. Zbyszkowi zależało w końcu na tym, aby wszystkie kroki zostały wykonane dla każdego maila z jego listy. Po krótkiej chwili spojrzał z dumą na finalną wersję swojego skryptu:

Pozostało wcisnąć tylko przycisk Run i zobaczyć efekty swojej pracy (kliknij w obrazek, bo GIF):


Zbyszek był wniebowzięty.

„Będę jeszcze tylko musiał dopisać kiedyś skrypt, który pobiera z neta gotowe życzenia w zależności od daty. Selenium ma zdecydowanie większy potencjał…”

W głowie zaczęły mu się pojawiać nowe pomysły na wykorzystanie Selenium. W analogiczny sposób mógł przecież zautomatyzować inne wykonywane przez niego cyklicznie czynności.

Wykorzystanie Selenium do ataków na serwisy internetowe

„Hm… a gdybym tak mógł użyć tego do ataków na strony? Można by na przykład wziać gotową listę payloadów i zacząć wstrzykiwać w pola formularzy w jakimś serwisie.”

Ponieważ robiło się już późno, projekt wykorzystania Selenium do testów bezpieczeństwa postanowił przełożyć na jutro. Po pracy miał już co prawda zaplanowaną lekcję baletu, ale wpadł na pomysł, jak wyrwać się z pracy, aby nikt nie zauważył. Skoro Selenium to narzędzie symulujące ruchy użytkownika, to jutro uruchomi je na swoim firmowym komputerze, dzięki czemu korporacyjny monitoring stacji roboczej nie wykryje, że nie ma go aktualnie przed komputerem. On w tym czasie uda się do toalety i tam odda się swojej nowej pasji.

Na twarzy Zbyszka pojawił się złowieszczy uśmiech. Lista pomysłów rosła z każdą minutą.

W kolejnych dniach fascynacji Selenium, Zbyszek odkrył, że narzędzie to może zostać wykorzystane także do przeprowadzania bardziej skomplikowanych testów bezpieczeństwa serwisów internetowych. A potem trafił na Selenium Webdriver i dopiero się zaczęło… Zbyszek wiedział już, co musi zrobić, aby nauczyć się w pełni wykorzystać możliwości oferowane przez ten framework — wziąć udział w nowym szkoleniu organizowanym przez Niebezpiecznik pt. “Tester bezpieczeństwa“, skierowanym tylko i wyłącznie do testerów QA. Dzięki poruszanym na szkoleniu zagadnieniom i specjalnie przygotowanym przez niebezpiecznikowych pentesterów ćwiczeniom praktycznym, każdy tester QA możę dowiedzieć się jak podnieść swoje kompetencje i wykorzystać znane mu już narzędzia, takie jak Selenium, FireBug, jMeter do przeprowadzenia podstawowych testów bezpieczeństwa.

Ekipa Niebezpiecznika przez ostatnie 10 lat przetestowała setki serwisów internetowych pod kątem bezpieczeństwa. W naszych raportach z testów penetracyjnych regularnie wykazujemy od kilku do kilkuset podatności. Uważamy, że wiele z nich firmy mogłyby z łatwością wykryć już na etapie testowania aplikacji przez wewnętrzne działy testerów (QA), co znacznie ograniczyłoby koszty wytworzenia oprogramowania. Wykorzystywane przez QA narzędzia można łatwo wykorzystać do przeprowadzenia podstawowych testów bezpieczeństwa — niestety, nie każdy tester wie jak. Dlatego właśnie przygotowaliśmy specjalistyczne szkolenie dedykowane pracownikom działów QA. Osoby odpowiedzialne za zapewnianie jakości oprogramowania, dowiedzą się z niego jak niewielkim nakładem dodatkowej pracy, zyskać kompetencje w zakresie wykonywania tak pożądanych obecnie testów bezpieczeństwa. Zainteresowane osoby odsyłamy do pełnej agendy szkolenia. To szkolenie jest jednym z pierwszych działań Niebezpiecznika w obszarze usług dedykowanych kontroli jakości oprogramowania. Niebawem ujawnimy kolejne niespodzianki jakie przygotowaliśmy dla działów QA.

PS. Najbliższy termin to tego szkolenia to 23-24 lutego 2017 w Krakowie. Dajcie znać znajomym testerom i do zobaczenia!

Przeczytaj także:

31 komentarzy

Dodaj komentarz
  1. Majstersztyk
    ;-)

  2. Najwiekszym znakiem zapytania jest jaka to nowa pasje Zbyszek odkryl w toalecie…po namysle, chyba jednak nie chce wiedziec ;-)

    • generalnie pracował – miał dużo TWO_DO w kodzie

    • W toalecie po balecie… jak to cudnie brzmi. :p

  3. O fajnie. Od jakiegoś czasu przy regresji błędów bezpieczeństwa stosuję z powodzeniem, tylko nie IDE a Webdrivera. W końcu błędy bezpieczeństwa to też błędy ;)

  4. Pewnie dlatego od pierwszego kontaktu z testami integracyjnymi na Selenium, to co mi przyszło do głowy było bardzo podobne do Zbyszka. Wiele zastosowań, oj wiele.

  5. Selenium IDE
    Zacytuję …”Only with Firefox…” CIACH
    hmm
    Powershell ewentualnie cokolwiek innego nie uwiązanego do przeglądarki
    Acunetix , Capsa , Metasploit Ew stary poczciwy Teleport i głowa
    Pozdro :)
    Aaaaa i Zdrowych przedewszystkim Zdrowych Świąt Wszystkim :)

    • A kto Ci każe korzystać z (Selenium) IDE.
      (Selenium) Webdriver jest dostępny do wszystkiego co się rusza (MS udostępnił nawet do edge’a) i ma tą przewagę że możesz sobie pisać w swoim ulubionym języku programowania (java, python, ruby, …).

    • działa w najlepszej obecnie dostępnej na rynku przeglądarce, chyba nie jest to jakaś poważna wada?

    • Dzięki, wzajemnie!

    • A czy “najlepsza przeglądarka na rynku” dorobiła się już może:
      1. po 15 latach – zarządzania pamięcią, czy nadal cieknie jak głupia?
      2. po 10 latach – osobnych wątków na kartę, czy nadal sypie się cała?
      3. po 5 latach – jakiegokolwiek sandboxa, czy nadal służy do tego samego, co stary IE?

      uściślijmy dla precyzji przekazu:
      Ad. 1 – pamięć w fx nie tyle cieknie, co się fragmentuje. Więc systemu nie zarzyna, ale sam kończy pracę z allocation failed.
      Ad. 2 – jest osobny wątek dla pluginów, a nawet już chyba z rok jest nawet wydzielone wyświetlanie, nadal jednak odpowiednio zachłanny javascript kładzie całość.
      Ad. 3 – firejail.

  6. może ktoś pomoże: strona portalpasazera_pl/Trasa, chcę sobie zautomatyzować otwarcie strony dla stacji np. katowice, pomimo że w skrypcie Selenium mam name=ko_unique_1_input o wartości “Katowice” a potem click “id=stacjaSzukaj” to nie otwiera się wynik. Muszę ręcznie kliknąć na pole tekstowe i wpisać dowolny znak, żeby lista pasujących stacji każdorazowo pobrała się z serwera. Inaczej nie chce działać. Czy da się to jakoś obejść?

    • Strona, którą próbujesz automatyzować zawiera masę JavaScript’ów = trochę utrudnień na początku. Trzeba pamiętać o wait’ach, żeby wszystko miało czas się wczytać :) Poniżej to, co u mnie zadziałało:

      |open | https://strona_ktora_podales_pl/Trasa | |
      |waitForEval | window.$.active | 0 |
      |sendKeys | name=ko_unique_1_input |Katowice|
      |waitForVisible|id=stacjaInput_option_selected | |
      |click |id=stacjaInput_option_selected | |
      |click | id=stacjaSzukaj | |

      Selenium IDE jest w mojej opinii trochę niewygodne do automatyzowania, ale ma bardzo niski próg wejścia co jest zaletą w tym wypadku :) Wszystkich zainteresowanych m.in. użyciem Selenium WebDrivera do testów bezpieczeństwa zapraszamy na szkolenie!

  7. Ta najlepsza obecnie przeglądarka ma ostatnio 0 daya

    • spoko, to używaj linksa jak wolisz

    • Nawet linksowi zdarzają się 0daye. Prędzej czy później wszystko ma 0daya. :)

  8. Selenium do wysyłania maili? A o protokole SMTP słyszeli?

    • Bo to na faktach autentycznych pisane było i Zbychu pewnie nie słyszał za wiele. Ale o Selenium IDE usłyszał od kolegi.

  9. Genialny post ;) Dobra lekturka do kawy w korpo. W sumie sama się z tym Zbychem utożsamiam. Może i jego pomysł zapożyczę ;)

  10. Zupełnie bez sensu. Po co używać całe narzędzie do automatyzacji przeglądarki jak można po prostu wysłać przez SMTP? A nawet jak się chce bramką, to można curlem.

    • Racja, dziwny przykład, też bym nie pomyślał żeby użyć czegoś innego. W skrypcie wygląda to krótko i łatwo rozbudować.

      s = smtplib.SMTP_SSL(SERVER)
      s.login(USER, PASS)
      s.sendmail(FROM, TO, msg.as_string())
      s.quit()

  11. Do automatyzmów lepiej użyć perla lub php. Ja preferuje php i funkcje mail. Prosty skrypt uruchamiany z shella, tablica adresów e-mail, string z treścią i lecimy. Profesjonalniej, sprawniej i szybciej …

    • I lądujesz w spamie, bo zapomniałeś dodać odpowiednich wymaganych nagłówków, które standardowo wysyła Mozilla lub inne programy pocztowe.

    • Jeżeli preferujesz PHP, to perla …nie umiesz?
      Jeżeli sądzisz, że to ‘profesjonalniej’, to czegoś profesjonalnego …nigdy nie widziałeś?
      Jeżeli sądzisz, że takie maile dochodzą i się wyświetlają poprawnie (bez MASY szlifów), to o SMTP …też pojęcia nie masz?

    • Dlaczego wszyscy uczepili się PHP i SMTP? Selenium jest tu pewnie podane nie bez przyczyny – chociażby dlatego, że jest ono uniwersalnym narzędziem i można w nim zrobić nie tylko automat do rozsyłania maili :) W artykule jest podany tylko przykład zastosowania ;) W PHP nie zrobisz wielu innych rzeczy, które umożliwia Selenium.

  12. Czego bym ja nie dał za nową serię ala Haker Janusz, ale z panem Zbigniewem.

  13. A moze tak dodać jeszcze szkolenia dla programistów, by testerzy QA nie znajdowali az tylu bledow?

    • Takie mamy od dawna i cieszą się niesłabnącym zainteresowaniem, także testerów: https://niebezpiecznik.pl/szkolenia/atakowanie-ochrona-www/ :)

    • Po co te szkolenia, przecież dla polskiej władzy to lepiej, że są dziury. Będzie ich więcej, gdy programiści jednak będą robili te błędy. Dzięki temu historia bankowa, dane osobowe, dane szczególnie chronione będą lądować w darknecie oraz równie często w zwykłym internecie. Te szkolenia miałyby sens gdyby były darmowe i obowiązkowe, ale i to nie gwarantuje dobrej jakości kodu – niektórzy są tak zdemotywowani do pracy, że piszą na odczepnego, inni mają swoje cele w celowym umieszczaniu dziur. Żyjemy w Krainie Grzybów. Jest dobrze, jest bezpiecznie, Kraina Grzybów trwać będzie wiecznie. Nie wierzysz, skoro tak Ci wszędzie mówią? Tak mówi telewizor, więc to nie może być nieprawda /s

  14. Lepszy w te klocki jest iMacros.

  15. >>> kiedy strona z bramką otwarła się w przeglądarce.<<< OTWORZYŁA SIĘ

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: