HELLO. I AM WONDERING WHEN I TURN ON MY SITE THE HACKER CAN HACK VIA DELETING CHAR IN MY DATABASE. WHAT HACK IS THIS PLEASE? CAN ANYONE HELP ME . add me in skype bosx.ishihara and businesstalk:mad::pimp::D
Okay, deleting other characters from differend accounts belongs to a dupe method.. I see.Quote:
dupe method with Login delete
Dann muss der Angreifer aber ziemlich blöd sein. Mit der standard Installation des MSSQL Servers und Scripten die nicht gegen Codemanipulation abgesichert sind, ist es eine Sache von einer Minute via xp_cmdshell den kompletten Server in der Hand zu haben. Warum sollte der Angreifer auch nur einzellne Charakter löschen? Klingt für mich ein wenig unlogisch, aber möglich ist es dennoch.Quote:
After "turning on the site" sounds more like an SQL injection to me.
Das ist das, was man nur daraus lesen kann, wenn er "site" erwähnt. Wenn er damit einen ganzen Server meint, dann kann alles ein Problem sein, was offen ist.Quote:
Meiner Meinung nach liegt es nicht an der Webseite.
Er hat schon 2 unterschiedliche Seiten genutzt wobei dennoch der Hacker durch kam.
Er schrieb mich schon per Skype an und seine Aussagen, dass der Hacker plötzlich ein GM Account gab mir schon den Hinweis das es sich nicht um ein Web Problem handeln kann.
Ach, da isser ja wieder.Quote:
Es war schlussendlich die fehler des Source Developer ^^ Er hat in der DBManager.cpp vergessen Fixes vorzunehmen :)
Für diesen Fall, ein einfacher und ziemlich banaler Fix in der ar.cpp, welcher alle SQL Injections durch Strings, welche via ReadString gelesen werden, escapet.Quote:
SQL Injections über den Ingame-Chat oder der ein oder anderen Lücke sind trotzdem noch möglich. Genauso kann man sich Rechte über solche Lücken beschaffen.
void CAr::ReplaceChar(char& chr)
{
#ifdef __CLIENT
if (chr == '\x60')
chr = '\x27';
#elif defined(__DBSERVER)
if (chr == '\x27')
chr = '\x60';
#endif
}
LPTSTR CAr::ReadString( LPTSTR lpsz)
{
int nLen;
*this >> nLen;
Read(lpsz, sizeof(TCHAR) * nLen);
#if defined(__CLIENT) || defined(__DBSERVER)
for (int i = 0; i<nLen; i++)
ReplaceChar(lpsz[i]);
#endif
lpsz[nLen] = '\0';
return lpsz;
}
LPTSTR CAr::ReadString(LPTSTR lpsz, int nBufSize)
{
int nLen;
*this >> nLen;
int nReadable = nBufSize - 1;
if (nLen > nReadable || nLen < 0)
{
memset((void*)lpsz, 0, nBufSize);
m_lpBufCur = m_lpBufMax;
return lpsz;
}
else
{
Read(lpsz, sizeof(TCHAR) * nLen);
#if defined(__CLIENT) || defined(__DBSERVER)
for (int i = 0; i<nLen; i++)
ReplaceChar(lpsz[i]);
#endif
lpsz[nLen] = '\0';
return lpsz;
}
}