- Daftar
- 4 Oct 1988
- Post
- ★
- Like diterima
- 9.218
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:
Otentikasi yang dilakukan attacker:
contoh source code yang memiliki celah untuk terkena sql injection
contoh kasus :
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 ()
SQL yang ditransfer ke database
cara lain nya :
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.