Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

MySQL „hackinimas“ | Padėjusiam sumokėsiu


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3432 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki. Ant dienų pastebėjau serveryje žaidėją, kuris sugeba bug'inti pinigus, kreditus, atsiblokuoja ir keičia nick'us. Kaip tai įmanoma?

Log'as:

[OFF]: Data: 2014/11/22 14:55:50 | Kenneth_Grahame(IP: **.**.***.**) | Money: 10133 | Bank Money: 450 |

[ON]: Data: 2014/11/22 15:00:01 | Kenneth_Grahame(IP: **.**.***.***) | Money: 10133 | Bank Money: 2000450 |

[OFF] - pinigų kint. reikšmė atsijungiant.

[ON] - pinigų kint. reikšmė prisijungiant.

MySQL atsijungiant išsaugojo 450, užkrovė: 2000450 - tai reiškia, kad bug'ina ne serveryje!

Vakar kažkaip pasikeitė nick'ą ir užsidėjo kreditų - log'e nėra, reiškia tokiu pat būdu (kai buvo atsijungęs). Peržiūrėjau visą mod'ą, visus php failus tinklapyje, kuriuose yra prisijungimas prie serverio PhpMyAdmin - atrodo viskas gerai.

Keylog'o / backdoor'o nebuvau ir nesu pasigavęs. Jeigu žinotu PhpMyAdmin slaptažodį - butu pridirbęs daugiau...

Kas per magija? Kaip ištaisyti?

Padėjusiam sumokėsiu 20 25 50 LTL.

Redaguota , nario ES.^
  • Teigiamai 2
Nuoroda į komentarą
Dalintis per kitą puslapį

Spėju kad GetPlayerNameEx funkcija gražina tik paprastą string?

 

String reikia "escapinti", ankstesnėse MySQL plugin versijose tam buvo funkcija mysql_real_escape_string... Tavo laimei, tu naudoji naują versiją. Kur rašai %s, naudok %e. Tai veiks tol, kol naudosi mysql_format.

 

 

Pora pastebėjimų dėl tavo kodo:

  • Saugodamas gali naudoti mysql_pquery. Tai išsiųs paralelinę užklausą, ji dar greitesnė. Tačiau neaišku kuri užklausa nueis pirma, bet šiuo atveju, tai nėra svarbu.
  • Ar tau tikrai reikia TIEK užklausų? 
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

Spėju kad GetPlayerNameEx funkcija gražina tik paprastą string?

#define GetPlayerNameEx(%0) pInfo[%0][PlayerName]
stock j_GetPlayerName(playerid)
{
     GetPlayerName(playerid, pInfo[playerid][PlayerName], 21);
     if(!strcmp("--", pInfo[playerid][PlayerName], true))
     {
          j_GetPlayerName(playerid);
     }
}

String reikia "escapinti", ankstesnėse MySQL plugin versijose tam buvo funkcija mysql_real_escape_string... Tavo laimei, tu naudoji naują versiją. Kur rašai %s, naudok %e. Tai veiks tol, kol naudosi mysql_format.

Nežinau/nesuprantu apie ką kalbi.

Pora pastebėjimų dėl tavo kodo:

  • Saugodamas gali naudoti mysql_pquery. Tai išsiųs paralelinę užklausą, ji dar greitesnė. Tačiau neaišku kuri užklausa nueis pirma, bet šiuo atveju, tai nėra svarbu.
  • Ar tau tikrai reikia TIEK užklausų? 
Apie mysql_pquery negirdėjau. Ne, tiek užklausų nereikia. Kodas labai senas, neturiu laiko sutvarkyt...

P.S: String ilgis j_GetPlayerName 21, todėl, kad tik su tokiu nick'ų galima prisijungt į serverį. Rekursija padaryta, todėl, kad ne visada iš pirmo karto išgauna nick'ą.

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

Pavyzdys:

mysql_format(MYSQL_ARG, tQuery, 190, "UPDATE `players` SET `PINkodas` = '%d', `Adminas` = '%d', `Vipas` = '%d', `VipLaikas` = '%d', `VipIspejimai` = '%d' WHERE `Vardas` = '%e'", pInfo[playerid][pPinKodas], pInfo[playerid][pAdmin], pInfo[playerid][pVip], pInfo[playerid][VipLaikas], pInfo[playerid][VipIspejimai], GetPlayerNameEx(playerid));

Vienintelis pokytis: "%s" tampa "%e".  Tai automatiškai escapins string. 

Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

Pavyzdys:

mysql_format(MYSQL_ARG, tQuery, 190, "UPDATE `players` SET `PINkodas` = '%d', `Adminas` = '%d', `Vipas` = '%d', `VipLaikas` = '%d', `VipIspejimai` = '%d' WHERE `Vardas` = '%e'", pInfo[playerid][pPinKodas], pInfo[playerid][pAdmin], pInfo[playerid][pVip], pInfo[playerid][VipLaikas], pInfo[playerid][VipIspejimai], GetPlayerNameEx(playerid));
Vienintelis pokytis: "%s" tampa "%e".  Tai automatiškai escapins string.
Ir šis kodas sutvarkys šią klaidą?

P.S: Jeigu klaida serveryje, kodėl kai atsijungia, išsaugoja - viskas gerai (kaip turi būti), po 5 min. ateina ir iš MySQL traukia jau 2 mln...

P.P.S: Error'ų ir warning'ų mysql log'e nėra.

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

Kur naudoji mysql_format, taip.

Supratau, dėkui. Pabandysiu, ant dienų atrašysiu.

P.S:

Kokie simboliai užklausoje gali išsiųsti SQL injekciją? Tik „'“? Pas mane praktiškai visur paprasti, normalus tekstai ir visur yra apsaugos nuo „'“ simbolio. Kažkaip abejoju, kad Justo pasiūlymas pakeisti visus '%s' į '%e' padės. Jeigu net pavyktu išsiųst tą simbolį tai žmogus negautu jokio rezultato, tiesiog išmestu MySQL error. Kiek žiūrėjau log'ą, ten absoliučiai nieko blogo ar panašaus neradau. Nesenai rašiau žmogui kuris naujina mano kreditų sistema (tinklapyje), jis sakė, kad sistema nesaugi. Tai gal problema ten o ne mod'e?

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

Geriausiai tą klaidą sutvarkys tas kuris ją rado. Bandyk susisiekt su tuo žmogumi kaip nors.

Buvau susisiekęs, nežadu mokėt pinigų už "pagalbą". Kelis kartus bandė apgaut ir vieną kartą net siuntė backdoor'ą.

Žinau tiksliai, kad įsilaužia į duomenų bazę, tik nežinau kaip... Manau, kad per php failus, ieškau klaidos.

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3432 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...