Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zabezpieczenie przed atakami SQLi


Rekomendowane odpowiedzi

Opublikowano

Żaden pucuś nie dał tego jeszcze na mpc jednak to co leży na epvp jest trochę nie do końca pełnym naprawieniem tego exploita z racji tego że naprawia się nie u źródła tylko u pośrednika.
O jaki exploit chodzi?  A o taki że przez questa,komende,pakiet możesz pozbyć się bazy serwera robiąc atak SQLi który był tylko kwestią czasu że w końcu ktoś na to wpadnie, podzielę się z wami moim fixem już dawno wprowadzonym do src (zanim to wyszło) który zabezpieczy wasz serwer przed tego typu atakami bo może być ich więcej w game.
 
Otwieramy db.cpp i szukamy funkcji:
 

void DBManager::Query(const char * c_pszFormat, ...)

 
I podmieniamy ją cała na ten kod:

void DBManager::Query(const char * c_pszFormat, ...)
{
    char szQuery[4096];
    va_list args;

    va_start(args, c_pszFormat);
    vsnprintf(szQuery, sizeof(szQuery), c_pszFormat, args);
    va_end(args);
    std::string sQuery(szQuery);

    m_sql.AsyncQuery(sQuery.substr(0,sQuery.find_first_of(";")==-1?sQuery.length(): sQuery.find_first_of(";")).c_str());
}

Teraz szukamy funkcji:

SQLMsg * DBManager::DirectQuery(const char * c_pszFormat, ...)

Podmieniamy ją całą na :

SQLMsg * DBManager::DirectQuery(const char * c_pszFormat, ...)
{
    char szQuery[4096];
    va_list args;
    va_start(args, c_pszFormat);
    vsnprintf(szQuery, sizeof(szQuery), c_pszFormat, args);
    va_end(args);
    std::string sQuery(szQuery);
    return m_sql_direct.DirectQuery(sQuery.substr(0, sQuery.find_first_of(";") == -1 ? sQuery.length() : sQuery.find_first_of(";")).c_str());
}

 
Wyjaśnienie jak "naprawia" zabezpieczają te zmian: 

 
Jeśli ktoś spróbuje zaatakować serwer poprzez SQLi (np. lista przyjaciół) to fakt wyśle do serwera pakiet i game wykona zapytanie jednak te dwie funkcje po moich zmianach mają dopisane że jeśli znajdzie się w query znak ; (Który zawsze jest przy tych atakach i po nim jest query które ktoś chce wykonać) to do tej pozycji query zostanie ucięte np:
Wywoluję query:

DELETE FROM messenger_list WHERE account='Lycan' AND companion = ''; DELETE FROM quest;

A funkcje wykonają:

DELETE FROM messenger_list WHERE account='Lycan' AND companion = '';

 
Może sam kod tego "zabezpieczenia" nie jest ładny ale wystarczający by gracze nie tracili swoich przedmiotów.

ban.gif

 

Opublikowano

zaraz będą pytania typu jak dodać ten dodatek do root, a nie czy są jeszcze jakieś błędy które robią syf w mysql :lenny:  :lenny:

Opublikowano

Warto dodać że w tym jakże chujowym src jest dużo więcej taki "orzeszków" exploit z grupą, z zapraszaniem do gildii itd. Nie chce "rozlewać mleka" i psuć zabawy więc więcej nie powiem, ale polecam dobrze przejrzeć src.

#EMERYTURA

Opublikowano

Warto dodać że w tym jakże chujowym src jest dużo więcej taki "orzeszków" exploit z grupą, z zapraszaniem do gildii itd. Nie chce "rozlewać mleka" i psuć zabawy więc więcej nie powiem, ale polecam dobrze przejrzeć src.

To wsadź sobie w dupę swoje rady. Jak się ma mózg (którego nie masz) to można zrobić dobre src.

 

 

Zapewniam cie że moje src jest k***a lepsze od twojego, pomimo tego ze pracuje przy nim z doskoku. Nawet ten wielki sqli exploit u mnie nie zadziała chociaż nigdy go nie fixowałem.

T sie ciesz i sprzedawaj je i siebie :)

ps. Ciekawe kiedy bedziesz pisal z multi konta albo udasz sponsora jak bedziesz chcial kupic sklepy.

ban.gif

 

Opublikowano

To wsadź sobie w dupę swoje rady. Jak się ma mózg (którego nie masz) to można zrobić dobre src.

 

Zapewniam cie że moje src jest k***a lepsze od twojego, pomimo tego ze pracuje przy nim z doskoku. Nawet ten wielki sqli exploit u mnie nie zadziała chociaż nigdy go nie fixowałem.

#EMERYTURA

Opublikowano

Dzięki, że to udostępniasz. Trochę jednak myślisz o polskiej scenie Metina, bo tego fixa chyba każdy wgra. W dodatku dałeś fajne gui, które zapewni zabawę wielu osobom xD

Opublikowano

Dzięki, że to udostępniasz. Trochę jednak myślisz o polskiej scenie Metina, bo tego fixa chyba każdy wgra. W dodatku dałeś fajne gui, które zapewni zabawę wielu osobom xD

 

Pewnie to ktoś już sprzedaje po 20zł, GUI dalem by mieli motywacje do wgrania.

ban.gif

 

Opublikowano

Poprawa: nie zabezpieczenie przed SQL injection tylko zabezpieczenie przed wywołaniem kolejnego zapytania podczas wykonywania SQL injection. Ten atak nie polega tylko na tym aby dopisywać nowe zapytanie.

Opublikowano

Poprawa: nie zabezpieczenie przed SQL injection tylko zabezpieczenie przed wywołaniem kolejnego zapytania podczas wykonywania SQL injection. Ten atak nie polega tylko na tym aby dopisywać nowe zapytanie.

Na jedno wychodzi. Te zmiany uniemozliwiaja zaatakowanie poprzez sqli

ban.gif

 

Opublikowano

Ogólnie te zmiany można wprowadzić w jednej linijce kodu, zmieniając flag CLIENT_MULTI_STATEMENTS dla funkcji mysql_real_connect w pliku libsql/CAsyncSQL.cpp - funkcja bool CAsyncSQL::Connect(). Tylko te rozwiązanie jest dobre jak nie mamy źródeł, coś dla starszych wersji game. Ponieważ dalej można usunąć wszystkie dane z tabeli messenger_list lub wrzucić jakieś puste pola, powyzywać administrację w nazwach. Lecz już nie przełączymy się między bazami, już nie wyczyścimy innej tabeli. Z źródłami to już inna bajka i większe pole do popisu. :)

 

btw, głupotą też jest ustawiać takie uprawnienia jak drop dla usera mt2. Czyli ograniczamy takie zapytania jak drop item, truncate item. A na zapytania delete from item, może nie starczyć buforu.

Ogólnie fix jak zawsze na plus. :)

307681428489538142351.png

Metin2 Balmora Staff

Opublikowano

Ogólnie te zmiany można wprowadzić w jednej linijce kodu, zmieniając flag CLIENT_MULTI_STATEMENTS dla funkcji mysql_real_connect w pliku libsql/CAsyncSQL.cpp - funkcja bool CAsyncSQL::Connect(). Tylko te rozwiązanie jest dobre jak nie mamy źródeł, coś dla starszych wersji game. Ponieważ dalej można usunąć wszystkie dane z tabeli messenger_list lub wrzucić jakieś puste pola, powyzywać administrację w nazwach. Lecz już nie przełączymy się między bazami, już nie wyczyścimy innej tabeli. Z źródłami to już inna bajka i większe pole do popisu. :)

 

btw, głupotą też jest ustawiać takie uprawnienia jak drop dla usera mt2. Czyli ograniczamy takie zapytania jak drop item, truncate item. A na zapytania delete from item, może nie starczyć buforu.

Ogólnie fix jak zawsze na plus. :)

Tak samo dziala wylaczanie multi statements jak ta funkcja - nie puszcza query dodatkowych wiec "twoj" fix jest tak samo wadliwy jak mowisz o moim. Bambus wiem ze ty jestes niezastapiony.

ps. pozdrow blackyuko

 

 

 

Odważny jesteś.

Dobre i to.

http://metin2priv.pl/

ban.gif

 

Opublikowano

Tak samo dziala wylaczanie multi statements jak ta funkcja - nie puszcza query dodatkowych wiec "twoj" fix jest tak samo wadliwy jak mowisz o moim. Bambus wiem ze ty jestes niezastapiony.

ps. pozdrow blackyuko

Odważny jesteś.

Opublikowano

Tak samo dziala wylaczanie multi statements jak ta funkcja - nie puszcza query dodatkowych wiec "twoj" fix jest tak samo wadliwy jak mowisz o moim. Bambus wiem ze ty jestes niezastapiony.

ps. pozdrow blackyuko

 

 

 

 

Dobre i to.

http://metin2priv.pl/

Ale ja tylko napisałem o tym, że można to zrobić w jednej linijce, bez niepotrzebnego rozpisywania się. Nie pisałem, który sposób jest lepszy, bo to jest prawie to samo.

 

Tylko, że na starszej wersji game dopisanie kodu jest trudniejsze, czasami niemożliwe albo pochłania bardzo dużo czasu. Przez co stworzyłem w ten sposób fixa, na source można to lepiej zabezpieczyć.

btw, o co chodzi z BlackYuko?

307681428489538142351.png

Metin2 Balmora Staff

Opublikowano

Ale ja tylko napisałem o tym, że można to zrobić w jednej linijce, bez niepotrzebnego rozpisywania się. Nie pisałem, który sposób jest lepszy, bo to jest prawie to samo.

 

Tylko, że na starszej wersji game dopisanie kodu jest trudniejsze, czasami niemożliwe albo pochłania bardzo dużo czasu. Przez co stworzyłem w ten sposób fixa, na source można to lepiej zabezpieczyć.

btw, o co chodzi z BlackYuko?

 

Nie orientuję się mocno w CPP więc spytam. Czy jest możliwość w CPP bindowania danych (tak jak np w PHP OOP) dokładniej chodzi mi o PDO?

Opublikowano

Na jedno wychodzi. Te zmiany uniemozliwiaja zaatakowanie poprzez sqli

 

Umożliwia zaatakowanie poprzez sqli, bo jeśli dopiszemy:

' OR '1'='1

To tak czy tak atak sqli zostanie wykonany i nadal pozostaje możliwość usunięcia listy znajomych, jednak to mało istotne.

Ogólnie proponuję zblasklistować apostrofy lub zamienić je na strukturę backslash + apostrof.

Opublikowano

 

To wsadź sobie w dupę swoje rady. Jak się ma mózg (którego nie masz) to można zrobić dobre src.

 

 

T sie ciesz i sprzedawaj je i siebie :)

ps. Ciekawe kiedy bedziesz pisal z multi konta albo udasz sponsora jak bedziesz chcial kupic sklepy.

 

Ten koleś strasznie przypomina Warmupsa aka siwego, kto wie może to i on na 238374378 koncie xp Olać go i tyle.

Dobra robota deco.

qaz3pc.jpgteż was kocham <3

784091427630431250239.png

Regulamin sygnatur

Opublikowano

Umożliwia zaatakowanie poprzez sqli, bo jeśli dopiszemy:

' OR '1'='1

To tak czy tak atak sqli zostanie wykonany i nadal pozostaje możliwość usunięcia listy znajomych, jednak to mało istotne.

Ogólnie proponuję zblasklistować apostrofy lub zamienić je na strukturę backslash + apostrof.

Nagle tacy znawcy sie znalezli, szkoda ze nikt nie ruszyl dupska by to opublikowac.

 

Ten koleś strasznie przypomina Warmupsa aka siwego, kto wie może to i on na 238374378 koncie xp Olać go i tyle.

Dobra robota deco.

Dzieki a ten typ to jakies multi jest

 

 

Chlopie, Ty jesteś jakiś nadpobudliwy czy z czym masz problem? Do każdego od razu ze spiną.

Nigdzie nie pisałem, że znałem ten błąd przed opublikowaniem więc nie wiem dlaczego gadasz głupoty.

Do plebsow,cebul mam i bede mial problem. 

 

 

Chlopie, Ty jesteś jakiś nadpobudliwy czy z czym masz problem? Do każdego od razu ze spiną.

Nigdzie nie pisałem, że znałem ten błąd przed opublikowaniem więc nie wiem dlaczego gadasz głupoty.

 

@ref

 

Ego Cię przerasta, kiedyś się na tym przejedziesz, ale nie uświadomię Ci tego, bo tak je napompowałeś że bujasz w obłokach.

Wracaj do kolegow plebsow

ban.gif

 

Opublikowano

Nagle tacy znawcy sie znalezli, szkoda ze nikt nie ruszyl dupska by to opublikowac.

 

Dzieki a ten typ to jakies multi jest

 

Chlopie, Ty jesteś jakiś nadpobudliwy czy z czym masz problem? Do każdego od razu ze spiną.

Nigdzie nie pisałem, że znałem ten błąd przed opublikowaniem więc nie wiem dlaczego gadasz głupoty.

 

@ref

 

Ego Cię przerasta, kiedyś się na tym przejedziesz, ale nie uświadomię Ci tego, bo tak je napompowałeś że bujasz w obłokach.

Opublikowano

No wszystko fajnie dodaje to o mam 20mb błędów mam dodać jakiś include na czytanie std czy coś? nie tego wina

Jeżeli Ci pomogłem. Kliknij 1387468256-U352037.png, Dzięki :)

  • 1 rok później...
Opublikowano

Mam pytanie @alchemik1, czy po podmianie tego kodu zabezpieczone jest też SQLi przez dodawanie do gildii czego używa np Chungo na swoich filmach?

Opublikowano

Mam pytanie @alchemik1, czy po podmianie tego kodu zabezpieczone jest też SQLi przez dodawanie do gildii czego używa np Chungo na swoich filmach?

Wszystkie query wykonywane bezpośrednio przez game. Jak w queście masz tę starą funkcję to ona dalej jest "niebezpieczna".

  • 1 miesiąc temu...
  • 3 miesiące temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...