Agen Terpercaya   Advertise
 
 
 
Pasang iklan, hanya lewat Contact Us.
Waspada penipuan iklan. Klik di sini untuk melihat daftar penipu.

SQL Injection Dan Penangannannya 2019

RayMantic

Moderator
Staff member
Moderator
Daftar
4 Oct 1988
Post
×
Like diterima
9.183
Bimabet
sumber : https://www.sap.com/community.html

Otentikasi Bypass


Serangan ini memungkinkan penyerang untuk masuk ke dalam aplikasi dengan hak akses administratif, tanpa menggunakan username dan password yang valid.

Pencurian Informasi

Serangan ini memungkinkan penyerang untuk mendapatkan, baik secara langsung maupun tidak langsung informasi-informasi sensitif di dalam database.

Compromised Integritas Data

Serangan ini melibatkan perubahan isi database, seorang penyerang bisa menggunakan serangan ini untuk deface halaman web atau memasukkan konten berbahaya ke dalam halaman web.

Compromised Ketersediaan Data

Serangan ini memungkinkan penyerang untuk menghapus informasi dengan maksud untuk merusak atau menghapus log atau audit informasi dalam database.

Remote Command Execution:

Melakukan perintah eksekusi melalui database yang memungkinkan penyerang untuk melakukan compromise pada sistem operasi host atau target.

Satu dari banyak penggunaan SQL Injection melibatkan bypass pada sebuah proses autentikasi login aplikasi, umumnya form login username dan password pada memiliki konstruksi SQL Query seperti ini:

Otentikasi biasa:

Code:
SELECT count (*) FROM Users WHERE Username=’MR’ AND Password= ‘xxxxxxx’

Otentikasi yang dilakukan attacker:

Code:
SELECT count (*) FROM Users WHERE Username=’qwert’ or 1=1 — ’ AND Password= ‘zxcvb’

contoh source code yang memiliki celah untuk terkena sql injection


Code:
String DRIVER = “com.ora.jdbc.Driver”;

String DataURL = “jdbc:db://localhost:5112/users”;

String LOGIN = “admin”;

String PASSWORD = “admin123”;

Class.forName(DRIVER);

 

//Make connection to DB

Connection connection = DriverManager.getConnection(DataURL, LOGIN, PASSWORD);

String Username = request.getParameter(“USER”); // From HTTP request

String Password = request.getParameter(“PASSWORD”); // From HTTP request

int iUserID = -1;

String sLoggedUser = “”;

String sel = “SELECT User_id, Username FROM USERS WHERE Username = ‘” +Username + “‘ AND Password = ‘” + Password + “‘”;

Statement selectStatement = connection.createStatement ();

ResultSet resultSet = selectStatement.executeQuery(sel);

if (resultSet.next()) {

iUserID = resultSet.getInt(1);

sLoggedUser = resultSet.getString(2);

}

PrintWriter writer = response.getWriter ();

if (iUserID >= 0) {

writer.println (“User logged in: ” + sLoggedUser);

} else {

writer.println (“Access Denied!”)

contoh kasus :

Code:
REPORT Z_SQL_INJECTION_OPENSQL.
PARAMETERS: street  TYPE zemployees-street    LOWER CASE,
            zipcode TYPE zemployees-zipcode   LOWER CASE,
            city    TYPE zemployees-city      LOWER CASE,
            phone   TYPE zemployees-phone_ext.
DATA: set_expr TYPE string,
      user     TYPE xubname.
IF street IS NOT INITIAL.
  set_expr = set_expr && ` STREET    = '` && street && `'`.
ENDIF.
IF zipcode IS NOT INITIAL.
  set_expr = set_expr && ` ZIPCODE   = '` && zipcode && `'`.
ENDIF.
IF city IS NOT INITIAL.
  set_expr = set_expr && ` CITY      = '` && city && `'`.
ENDIF.
IF phone IS NOT INITIAL.
  set_expr = set_expr && ` PHONE_EXT = `  && phone.
ENDIF.
IF set_expr IS NOT INITIAL.
  user = cl_abap_syst=>get_user_name( ).
  UPDATE zemployees
     SET (set_expr)
   WHERE userid = user.
  IF sy-subrc = 0.
    MESSAGE 'Your address was changed.' TYPE 'I'.
  ELSE.
    MESSAGE 'Error when trying to update your address!' TYPE 'E'.
  ENDIF.ELSE.
  MESSAGE 'No data given => No Update!' TYPE 'I'.
ENDIF.

diatas menggunakan 4 parameter


dimana masalahnya?
(set_expr) diatas digunakan dalam SET clause pada UPDATE statement. jika nilai ini di set dari luar sebagai bagian dari Open SQL statements, ini akan menyebapkan SQL injection vulnerability yang potensial

cara menanggulangi :
menggunakan metode QUOTE() of the class CL_ABAP_DYN_PRG. Metode CL_ABAP_DYN_PRG => QUOTE ()


Code:
REPORT Z_SQL_INJECTION_OPENSQL.
PARAMETERS: street  TYPE zemployees-street    LOWER CASE,
            zipcode TYPE zemployees-zipcode   LOWER CASE,
            city    TYPE zemployees-city      LOWER CASE,
            phone   TYPE zemployees-phone_ext.DATA: set_expr TYPE string,
      user     TYPE xubname.
IF street IS NOT INITIAL.
  set_expr = set_expr && ` STREET    = ` && cl_abap_dyn_prg=>quote( street ).
ENDIF.
IF zipcode IS NOT INITIAL.
  set_expr = set_expr && ` ZIPCODE   = ` && cl_abap_dyn_prg=>quote( zipcode ).
ENDIF.
IF city IS NOT INITIAL.
  set_expr = set_expr && ` CITY      = ` && cl_abap_dyn_prg=>quote( city ).
ENDIF.
IF phone IS NOT INITIAL.
  set_expr = set_expr && ` PHONE_EXT = ` && phone.
ENDIF.
IF set_expr IS NOT INITIAL.
  user = cl_abap_syst=>get_user_name( ).
  UPDATE zemployees
     SET (set_expr)
   WHERE userid = user.
  IF sy-subrc = 0.
    MESSAGE 'Your address was changed.' TYPE 'I'.
  ELSE.
    MESSAGE 'Error when trying to update your address!' TYPE 'E'.
  ENDIF.ELSE.
  MESSAGE 'No data given => No Update!' TYPE 'I'.
ENDIF.

SQL yang ditransfer ke database
Code:
UPDATE employees SET STREET = 'xyz'' salary = ''3000' ZIPCODE = '1234' CITY = 'xyz' WHERE userid = TEST.

cara lain nya :
  • check_column_name() checks whether the input is a valid column name.
  • check_table_name_str() checks whether the input is a valid database table name in a specific package.
  • check_whitelist_str() checks the input against a given whitelist.

 
Ane tambahin dikit,yg Ts kasi kan dari sisi query apa yg terjadi kalo query stringnya uda msk,

nah kalo mau tes suatu web ato url bisa kena sql inject ato ngga itu tambahin query string di url dengan parameter, misal :

http://xxx.com/id=1’

Ane ga kasi contoh lengkap karena bisa berbahay

notes :
Sql inject kl di php uda di tangkal hampir 100% pake framework, jd sql inject uda hampir ga ada case kl pake framework

semoga bermanfaat 😁
 
Ane tambahin dikit,yg Ts kasi kan dari sisi query apa yg terjadi kalo query stringnya uda msk,

nah kalo mau tes suatu web ato url bisa kena sql inject ato ngga itu tambahin query string di url dengan parameter, misal :

http://xxx.com/id=1’

Ane ga kasi contoh lengkap karena bisa berbahay

notes :
Sql inject kl di php uda di tangkal hampir 100% pake framework, jd sql inject uda hampir ga ada case kl pake framework

semoga bermanfaat 😁
lengkapi juga gpp gan..mungkin cara penanganannya .. terimakasih ya sudah menambahi

sekarang injection gak bisa langsung polos . dengan penambahan [-- -]/['] .. akan di abaikan oleh sistem karena semakin kesini cosing semakin rapat untuk sekedar injection .
harus di cari dulu dari data webnya tentang port yang kosong dan file sampah yang mungkin bisa kita edit .
bisa menggunakan beberapa aplikasi salah satunya CKeditor atau KCfind yang kita modifikasi setelah kita tahu kekosongan pada website .
 
Terakhir diubah:
Terakhir diubah:
Mantap,ada baiknya jgn terlalu lengkap di post gan, kl ad yg mau bs via dm aja baiknya, karena bisa di salah gunakan
 
Bimabet
Mantap,ada baiknya jgn terlalu lengkap di post gan, kl ad yg mau bs via dm aja baiknya, karena bisa di salah gunakan
sudah di edit .. tambahi cara penanganan gan :beer: matursuwun ya ilmunya
 
Jav Toys
Gaple Online Indonesia
Pasang iklan hanya lewat CONTACT US
Back
Top
We are now part of LS Media Ltd