Logowanie na zewnetrzne forum za pomocą cURL'a

Logowanie na zewnetrzne forum za pomocą cURL'a
MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

Witam,

Na wstępie powiem że googlowałem owy temat, nic sensownego nie znalazłem. Zrobiłem prosty skrypt z pomocą curla do zalogowania się z automatu na pewne forum.Skrypt działa poprawnie tzn loguję się do forum, dane logowania są poprawne, ale te forum wywala błąd że "nie mam uprawnień". Kombinowałem już z różnymi parametrami curla definiowanymi w kodzie skryptu.Bez efektu.Forum stoi na silniku IPS.

Edytuję:

Wydaję mi się że ten IPS ma jakieś zabezpieczenie przed takimi działaniami, bo sprawdzałem na phpbb3 i tam nie ma tego problemu. Czy da się to jakoś obejść?

edytowany 3x, ostatnio: Riddle
CH
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 2 lata
  • Postów:449
1

musisz pokazac kod

MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

Ok kod wyglada tak

Kopiuj
<?php
	$data = array(		
            "auth" => "tutajlogindlatejstrony",
            "password" =>"haslodlatejstrony",
			"remember_me" => "1",
			"_processLogin" => "usernamepassword"
        
    );
    $ch = curl_init("adressstronylogowania");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $result = curl_exec($ch);
    curl_close($ch);
    echo $result;
?>

Oczywiście tyczy się to forum postawionego na IPS

edytowany 2x, ostatnio: cerrato
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10055
2
Michu_PL_2000 napisał(a):

Wydaję mi się że ten IPS ma jakieś zabezpieczenie przed takimi działaniami, bo sprawdzałem na phpbb3 i tam nie ma tego problemu. Czy da się to jakoś obejść?

Raczej nie, server to server, daje dostep kazdemu klientowi ktory sie poprawnie zautentykuje.

Michu_PL_2000 napisał(a):

Na wstępie powiem że googlowałem owy temat, nic sensownego nie znalazłem. Zrobiłem prosty skrypt z pomocą curla do zalogowania się z automatu na pewne forum.Skrypt działa poprawnie tzn loguję się do forum, dane logowania są poprawne, ale te forum wywala błąd że "nie mam uprawnień". Kombinowałem już z różnymi parametrami curla definiowanymi w kodzie skryptu.Bez efektu.Forum stoi na silniku IPS.

Czy to forum jest jakies konkretne, np na silniku stackoverflow? Bo jesli jest konkretne, to za pewne ma dokumentacje z ktorej mozesz wyczytac jak powinno przebiegac logowanie.

Jesli forum jest "autorskie" takie jak np 4programmers.net, to trzeba szukac samemu. Np mozesz zgadnac jaki format autoryzacji wymaga, np oAuth, i uzyc tego.

Ciezko Ci cos doradzic bez wiekszej wiedzy nt tego co chcesz zrobic. Moglbys np sprobowac sie zalogowac przez przegladarke, i w narzedziach developerskich podgladnac jakie faktycznie leca requesty, a potem sprobowac zrobic podobne.

CH
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 2 lata
  • Postów:449
1

on zwyczajnie nie podaje tokenu crsf podczas wysylanai curla standard :)

MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

@chomikowski z tokenem też próbowałem. Zbadałem w chrome jakie jeszcze tam requesty idą i wygląda to następująco(zakładka Payload w chromie).

Kopiuj
csrfKey: wartość tokenu crsf
auth: login
password: haslo
remember_me: 1
_processLogin: usernamepassword

Cała tablica z wszystkimi requestami w php wygląda tak:

Kopiuj
$data = array(		
            "auth" => "login",
            "password" =>"haslo",
			"remember_me" => "1",
			"csrfKey" => "wartosc csrf jaka została wybadana w chromie",
			"_processLogin" => "usernamepassword"
        
    );

Mimo że są to wszystkie wartości jakie zbadałem przez Chrome, jakoś dalej nie przechodzi i podczas zalogowania tymi wartościami w tablicy wyświetla info że nie mam uprawnień.
Forum stoi na IPS. Pisałem w pierwszym poście.

edytowany 1x, ostatnio: Michu_PL_2000
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10055
1
Michu_PL_2000 napisał(a):

@chomikowski z tokenem też próbowałem. Zbadałem w chrome jakie jeszcze tam requesty idą i wygląda to następująco(zakładka Payload w chromie).

Kopiuj
csrfKey: wartość tokenu crsf
auth: login
password: haslo
remember_me: 1
_processLogin: usernamepassword

Cała tablica z wszystkimi requestami w php wygląda tak:

Kopiuj
$data = array(		
            "auth" => "login",
            "password" =>"haslo",
			"remember_me" => "1",
			"csrfKey" => "wartosc csrf jaka została wybadana w chromie",
			"_processLogin" => "usernamepassword"
        
    );

Mimo że są to wszystkie wartości jakie zbadałem przez Chrome, jakoś dalej nie przechodzi i podczas zalogowania tymi wartościami w tablicy wyświetla info że nie mam uprawnień.
Forum stoi na IPS. Pisałem w pierwszym poście.

Na pewno czegoś nie wysyłasz, jest jakiś parameter, header lub coś innego co jest wysyłane przez przeglądarkę, czego Ty nie robisz.

MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

Badałem w chromie gdzie może być błąd, i wygląda na to że coś z czatboxem jest nie tak. Czatbox odpalany jest z automatu po wejściu na forum, przez
index.php?app=chatbox. Do tego dochodzą requesty:

Kopiuj
app: chatbox
module: chatbox
controller: chatbox
do: tabCount
csrfKey: kluczcsrf

I nie za bardzo wiem co robić, da radę wywalić tego czatboxa żeby się nie odpalał? Bo nie jest on mi do niczego potrzebny w pisanym skrypcie.

CH
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 2 lata
  • Postów:449
1

no a skad bierzesz ten token csrf ? tylko nie mow ze wchodzisz na forum, podgladasz strone i kopiujesz token i potem go wysylasz xDDDDD w curl

MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

No tak, token biore z ze źródła strony. Co do php to dopiero zaczynam przygodę, więc nie siedzę w temacie i niektórych rzeczy nie ogarniam :( Proszę się nie śmiać xD. Co do tokena csrf nie mam pojęcia jak go generować automatycznie w kodzie skryptu. Z tego co widzę za każdym razem jak się loguję do tego forum token csrf ma inną wartość. Jak w takim razie ogarnąć ten token? Nie chce gotowca, ale jakieś wskazówki by się przydały :P

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10055
3
Michu_PL_2000 napisał(a):

Co do tokena csrf nie mam pojęcia jak go generować automatycznie w kodzie skryptu. Z tego co widzę za każdym razem jak się loguję do tego forum token csrf ma inną wartość. Jak w takim razie ogarnąć ten token? Nie chce gotowca, ale jakieś wskazówki by się przydały :P

No jego cały sens przecież polega na tym, że jego się nie da wygenerować w kliencie. To jest dokładnie to zabezpieczenie przed którym się bronią twórcy tej strony. I to jest dokładnie zabezpieczenie przed tym, że jak widać, twórcy tej strony chcą komuś możliwie udaremnić stworzenie takiego klienta jakiego Ty chcesz zrobić.

Ale w skrócie, jedyny sposób żeby wyciągnąć CSRF token to po prostu wczytać stronę i zparsować drzewo. Tutaj masz przykład: https://www.php.net/manual/en/domdocument.loadhtml.php

To zabezpieczenie polega na tym, że jesteś zmuszony dodać w swoim kliencie zależność do widoku strony, bo jeśli np twórca takiej strony zmienić klucz, id, klasę, ułozenie miejsca w którym trzyma ten token, to również Ty będziesz musiał zaktualizować swój program.

Lektura na dzisiaj: https://sekurak.pl/czym-jest-podatnosc-csrf-cross-site-request-forgery/

edytowany 4x, ostatnio: Riddle
66
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:53
1
MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

@666 Sprawdzę to na dniach, wydaje mi się za najlepsze rozwiązanie które w chwili obecnej jest na moje umiejętności :P Mam nadzieję że będzie git, ale ten czatbox mnei trochę niepokoi. Bo tam też jakieś requesty idą, nawet csrf token. Bo jeśli ogarnę temat z logowaniem i wyciągnięciem csrf token z źródła strony to mogę jeszcze mieć problemy z tym czatboxem :(

Ok Panowie udało się, dzięki @666 za podlinkowanie wskazówki, nieco pozmieniałem, dopisałem parę rzeczy. Działa, dzięki wielkie i pozdro :P

edytowany 1x, ostatnio: cerrato
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10055
1
Michu_PL_2000 napisał(a):

Ok Panowie udało się, dzięki @666 za podlinkowanie wskazówki, nieco pozmieniałem, dopisałem parę rzeczy. Działa, dzięki wielkie i pozdro :P

Zamiast podszywać się pod webową wersję, lepiej sprawdź czy ta aplikacja nie udostępnia API.

MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
0

@TomRiddle sprawdzałem w stopce forum, ustawieniach konta, ogólnie wszędzie i nie widzę żadnej informacji, aby owe forum miało API. Na tą chwilę pozostaje mi tylko cURL(niestety).

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10055
2
Michu_PL_2000 napisał(a):

@TomRiddle sprawdzałem w stopce forum, ustawieniach konta, ogólnie wszędzie i nie widzę żadnej informacji, aby owe forum miało API. Na tą chwilę pozostaje mi tylko cURL(niestety).

Aha, w stopce i ustawieniach.

A próbowałeś w dokumentacji? Nie mówiąc już o tym tym że duże aplikacje mają konta użytkowników i konta developerskie, więc w ustawieniach użytkownika też mógłbyś nic nie znaleźć.

MP
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:14
1

Sprawdzałem dokumentację IPS, i faktycznie API jest. Kiedyś jeszcze w C#, pisałem formatkę i przyzwyczajony byłem a raczej myślałem że jak na danej stronie nie ma podlinkowanego API, to tego API nie posiada dana strona. Dzięki za rozjaśnienie, bo dalej bym myślał że jest tak jak pisałem wyżej. Sprawdzę to też, dzięki.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)