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

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4229 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

(redaguota)

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

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

Reikia Pawn pagalbos? Skype nerašyk.

 

 

 

 

 

 

(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.^

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. 

Reikia Pawn pagalbos? Skype nerašyk.

 

 

 

 

 

 

(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.^
(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.^
(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.^

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4229 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ą...