Logowanie na zewnetrzne forum za pomocą cURL'a

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ść?

1

musisz pokazac kod

0

Ok kod wyglada tak

<?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

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.

1

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

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).

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

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

$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.

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).

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

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

$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.

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:

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.

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

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

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/

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

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.

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).

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źć.

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.

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