Jump to content

SQL Injection


Yonut

Recommended Posts

Salut!

Astazi mi-a venit ideea sa postez o mare vurnerabilitate a serverelor de SA:MP (in special la cele mici) ce folosesc baza de date MySQL.

Am cautat pe acest forum (sa-mp.ro) si nu am gasit absolut nici macar o discutie cu privire la acest lucru.

Aceasta vurnerabilitate nu este aparuta de azi sau de ieri, este de foarte mult timp.

Doresc sa va prezint si rezolvarea acestei vurnerabilitati.

 

In ce consta aceasta vurnerabilitate?

Aceasta vurnerabilitate consta in adaugarea unui text intr-o comanda, dialog, etc. care modifica un query care trebuie sa fie executat in baza de date.

 

Exemplu:

Am testat pe mai multe servere, in primul rand, te poti autentifica pe un cont de admin prin logare, daca server-ul nu are parolele criptate si nici nu are aceasta vurnerabilitate. Am introdus text-ul: tutorial' OR `Admin`='1

Sau ce admin avea, se poate autentifica si pe un cont care nu este admin, trebuie sa-i stim e-mailul, etc. Inlocuiti acel camp. Cam asa arata un query de cautare in baza de date normal, fara SQL Injection:

SELECT * FROM `users` WHERE `Username`='NumelePersoanei' AND `Password`='ParolaIntrodusa' LIMIT 1

* Asa arata un query cu injectarea de mai sus:

SELECT * FORM `users` WHERE `Username`='NumelePersoanei' AND `Password`='tutorial' OR `Admin`='1' LIMIT 1

 

Si eu am abuzat foarte mult de aceasta chestie zilele trecute, insa m-am hotarat sa fac o fapta buna si sa se rezolve aceasta treaba.

 

Poate fi rezolvata? Ce solutii avem?

Da, aceasta vurnerabilitate poate fi rezolvata, in general aceasta este pe gamemode-ul bigzone.

Ca solutii avem urmatoarele:

1) Dialog:

if(strlen(inputtext) >= 1) 
{
	if(strfind(inputtext, "*", true) != -1 || strfind(inputtext, "?", true) != -1 || strfind(inputtext, "[", true) != -1 || strfind(inputtext, "]", true) != -1 || strfind(inputtext, "!", true) != -1 || strfind(inputtext, "-", true) != -1 || strfind(inputtext, "#", true) != -1 || strfind(inputtext, "%", true) != -1 || strfind(inputtext, "_", true) != -1 || strfind(inputtext, "^", true) != -1|| strfind(inputtext, "-", true) != -1) return SendClientMessage(playerid, -1, "Caractere invalide!");
}

* Am adaugat o restrictie pentru toate caracterele ce pot fi folosite in MySQL pentru modificare.

 

2) De adaugat in functia OnPlayerCommandReceived:

if(strlen(cmdtext) >= 1) 
{
	if(strfind(cmdtext, "*", true) != -1 || strfind(cmdtext, "?", true) != -1 || strfind(cmdtext, "[", true) != -1 || strfind(cmdtext, "]", true) != -1 || strfind(cmdtext, "!", true) != -1 || strfind(cmdtext, "-", true) != -1 || strfind(cmdtext, "#", true) != -1 || strfind(cmdtext, "%", true) != -1 || strfind(cmdtext, "_", true) != -1 || strfind(cmdtext, "^", true) != -1|| strfind(cmdtext, "-", true) != -1) return 0;
}

Am mai vazut server in care /changepass era pe text, si aici exista aceasta vurnerabilitate.

3) De adaugat la functia OnPlayerText:

if(strlen(text) >= 1) 
{
	if(strfind(text, "*", true) != -1 || strfind(text, "?", true) != -1 || strfind(text, "[", true) != -1 || strfind(text, "]", true) != -1 || strfind(text, "!", true) != -1 || strfind(text, "-", true) != -1 || strfind(text, "#", true) != -1 || strfind(text, "%", true) != -1 || strfind(text, "_", true) != -1 || strfind(text, "^", true) != -1|| strfind(text, "-", true) != -1) return 0;
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

* Cam aceasta a fost prezentarea vurnerabilitatii, sper ca ati inteles cate ceva, daca aveti probleme cu implementarea dati-mi mesaj.

As aprecia daca mi-ati da un +1.

Va multumesc pentru atentia acordata!

 

UPDATE (Edit): Am facut un filterscript pentru a evita aceasta vurnerabilitate.

AntiSQLInjection.amx

Edited by Yonut
UPDATE (FIlterscript)
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Playerul fara nume
      V: 0.0.2

       
      M-am gandit sa fac un gamemode de samp.
      ACEST SERVER CONTINE:
      1. sistem de login/register
      2. sistem de admin
      2. ds
      2. fly
      ATENTIE:
      ACESTA ESTE PRIMUL MEU GAMEMODE DE LA 0
      ASA CA NU E MARE LUCRU.
       
      CE TREBUIE ADAUGAT:
      1.DEALERSHIP
      2.COMENZI
      3.REPARATA COMANDA "/makeadmin"  (am scos-o de pe gamemode)
      3.JOB-URI
      4.FACTIUNI
      5.BIZ-URI
      6.UN TUTORIAL
       
      ----------------------------------------------------------------RASPUNSURI PENTRU POSIBILE INTREBARI----------------------------------------------------------------
      De ce ai facut acest gamemode?
      -Simplu,pa plictisesc stand acasa si vreau sa ajung cunoscut
      De ce nu are mysql?
      -Deoarece nu stiu sa sa folosesc php si pentru ca am impresia ca nu se poate sparge asa usor (probabil gresesc)
      Cati ani ai si de la ce varsta scriptezi?
      -Am 11 ani si scriptez de la 10 ani jumatate
      Cum te pot contacta?
      -discord                               : PlayeruFN#2607
      -youtube (acolo fac muzica) :https://www.*******.com/channel/UCFxms67zh-onU8Z8vmGU4FA?
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      DOWNLOAD + VIRUSTOTAL
      DOWNLOAD: http://www.mediafire.com/file/c20n6uzrvkfer07/Squad-zone.rar/file
      VIRUSTOTAL: https://www.virustotal.com/gui/file/8949fa840fdce4b070600d349df8b7e8bbb395911e39ac7990c8fa30384c5e66/detection
       
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.