01
 ░██▀█████    ░██▀████     ░▀███████     ░██▌  ░██     ░█▀████     ██   ░▀▀██████
  ░░░██       ░██░░░░█▌    ░██░░░░██     ░███ ░███    ░██░░░░██   ░██   ░██░░░░██
    ░██       ░██   ░█▌    ░██   ░██     ░██ ██░██    ░██   ░██   ░▓█   ░██   ░██
    ░██       ░██████▀     ░████████     ░██ 01░█▀    ░██   ░██   ░█▀   ░██████▀█
    ░█·       ░██   ▀█     ░▓█   ░██     ░▓█   ░██    ░▓█   ░██   ░█▓   ░▓█   ░██
    ░██       ░██   ░█     ░█▓   ░█▓     ░▒    ░█▓    ░░▓   ░▒▓   ░█▓   ░█▓   ░█▓
    ░▓▓       ░▓▓   ░▓▌    ░▓▓   ░▓▒     ░▓▒   ░▓▒    ░▒░   ░▓░   ░▒▒   ░▓▓   ░▓▒
    ░▒▓       ░▓    ░▓▌    ░▓▒   ░▓▓     ░░▒   ░░▓     ░▒████░    ░▓░   ░▓▒   ░░▓
    ░▓░       ░▒░   ░░▌    ░▒░                 ░▓▒                ░░▒   ░▒░   ░▓█
    ░▒▓       ░░▒          ░▒                  ░▒▓                ░▒░   ░▒·   ░▓▒
    ░▒·       ░▒           ░▒                  ░▓                 ░▒░   ░▒▓   ░░▓
    ░▒▒                                        ░▒░                  ░         ░▒·
    ░░░                                          ░                            ░░▒
    ·░░                                                                       ░░░
    ░░░  Evolução Genética de Payloads para Detecção de Sanitizadores HTML    ░░░
    ░░░                                                                       ░░░
    ░░░  caioluders                                                           ░░░
    ░░░                                                                       ░░░
    ░░░           <st                                  av>                    ░░░
    ░░░          <   <strike><tr>ptgrou<figure><h2<sele  >                    ░░░
    ░░░           <   >                              <   >                    ░░░
    ·░░            <   >                            <   >                     ░░░
    ░░░              <  <select><<i>ar<sub<discard>a   >                      ░░░
    ░░░               <   >                       <   >                       ░░░
    ░░░                 <   >                   <   >                         ·░░
    ░░░                   <   >               <   >                           ░░░
    ░░░                     <   >           <   >                             ░░░
    ░░░                       <   >       <   >                               ·░░
    ░░░                         ><<tr>ptgrou>                                 ░░░
    ░░░                          <figure<h2>                                  ░░░
    ░░░                       <   >       <   >                               ░░░
    ░░░                     <   >           <   >                             ░░░
    ░░░                   <   >               <   >                           ░░░
    ░░░                 <   >                   <   >                         ░░░
    ░░░               <  <<i>ar<sub<discard>av><str   >                       ·░░
    ░░░             <   >                           <   >                     ░░░
    ░░░            <   >                             <   >                    ·░░
    ░░░            <   <strike><tr>ptgrou<figure><h2<se  >                    ░░░
    ░░░            <   t><<i>ar<sub<discard>av><strike   >                    ░░░
    ░░░             <   >                           <   >                     ░░░
    ░░░              <    <<i>ar<sub<discard>av><st    >                      ░░░
    ░░░                <   >                     <   >                        ░░░
    ·░░                   <   >               <   >                           ░░░
    ░░░                     <   >           <   >                             ░░░
    ░░░                       <   >       <   >                               ░░░
    ·░░                          <figure<h2>                                  ·░░
    ░░░                         ><<tr>ptgrou>                                 ·░░
    ░░░                       <   >       <   >                               ░░░
    ░░░                     <   >           <   >                             ·░░
    ░░░                   <   >               <   >                           ░░░
    ░░░                 <   >                   <   >                         ░░░
    ░░░               <   >                       <   >                       ░░░
    ░░░              <  <select><<i>ar<sub<discard>a   >                      ░░░
    ░░░             <   >                            <   >                    ░░░
    ░░░            <   >                              <   >                   ░░░
    ░░░           <   <strike><tr>ptgrou<figure><h2<sele  >                   ░░░
    ░░░            <st                                  av>                   ░░░
    ░░░                                                                       ░░░
    ·░░                                                                       ░░░
    ░░░                                                                       ░░░
    ░░░        ------> http://lude.rs/detecta_sanitizer <-----------          ░░░
    ·░░                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                       ░░░
    ░░░                                                                       ░░░
    ·░░                                                                       ░░░
    ░░░  ---[  Index                                                          ·░░
    ░░░                                                                       ·░░
    ░░░  0 - Introdução                                                       ░░░
    ·░░  1 - Laboratório                                                      ·░░
    ·░░  2 - Algoritmo genético                                               ░░░
    ·░░  3 - Melhorias // EOF                                                 ░░░
    ·░░                                                                       ░░░
    ░░░  ---[ 0 - Introdução                                                  ░░░
    ░░░                                                                       ░░░
    ░░░  Já tentou bypassar um HTML sanitizer server-side e perdeu 30 horas   ░░░
    ·░░  fazendo força bruta em tags html aleatórias? SEUS PROBLEMAS ACAB...  ░░░
    ·░░  nossa eu tô velho. Bem, como todo server-side sanitizer é destinado  ·░░
    ░░░  ao FRACASSO por não ser um browser, e cada um implementa de acordo   ░░░
    ░░░  com a sua criatividade ( 1001 regexes, virtual DOM, .replace() , etc ░░░
    ░░░  ), não seria possível identificar qual sanitizador está sendo        ·░░
    ░░░  utilizado dependendo de como ele ... humm ... sanitiza? Seria        ░░░
    ░░░  possível criar um payload que se comporte diferente para TODOS os    ·░░
    ░░░  sanitizers?                                                          ░░░
    ·░░                                                                       ·░░
    ░░░  Sim, aqui está :                                                     ░░░
    ░░░                                                                       ░░░
    ░░░  <strike><tr>ptgrou<figure><h2<select><<i>ar<sub<discard>av>          ·░░
    ░░░                                                                       ·░░
    ░░░  Mas nem fudendo que eu ia fazer isso na mão. Primeiro tive que       ░░░
    ░░░  adaptar e atualizar um laboratório com (quase) todos os sanitizers   ░░░
    ░░░  mais usados, fiz (leia-se: mandei a IA fazer) uma API usável e       ░░░
    ░░░  dockerizei tudo. Depois, criei (IA criou) um script que usa          ░░░
    ░░░  algoritmo genético para encontrar um payload que é tratado diferente ░░░
    ░░░  por todos os sanitizers, e que executa estranhamente rápido. Dai é   ░░░
    ░░░  só jogar o payload na aplicação alvo e comparar com os resultados    ·░░
    ·░░  para identificar.                                                    ░░░
    ·░░                                                                       ·░░
    ░░░  ---[ 1 - Laboratório                                                 ░░░
    ░░░                                                                       ░░░
    ░░░  Pesquisando se alguém já tinha feito algum laboratário parecido pra  ░░░
    ░░░  não ter que fazer do zero, encontrei esse repositório                ░░░
    ░░░  https://github.com/SoheilKhodayari/html-sanitizer-testing-pipeline   ░░░
    ·░░  que foi feito como base para o paper "It’s (DOM) Clobbering Time:    ░░░
    ░░░  Attack Techniques, Prevalence, and Defenses"                         ░░░
    ·░░  https://publications.cispa.saarland/3756/1/sp23_domclob.pdf          ░░░
    ░░░  Recomendo bastantea leitura, é bem interessante e aborda testes      ░░░
    ░░░  dinâmicos para identicação de DOM Clobbering[1]. Esse repositório    ░░░
    ░░░  foi uma ótima base, mas faltava algumas features importantes para    ░░░
    ░░░  facilitar minha vida. Fiz um fork                                    ░░░
    ░░░  https://github.com/caioluders/html-sanitizer-testing-pipeline        ░░░
    ░░░  que adiciona alguns sanitizers, criei um site local para facilitar   ░░░
    ░░░  os testes manuais, além de transformar tudo em container para ser    ░░░
    ░░░  mais fácil de rodar. Também criei uma API HTTP, se alguém quiser     ░░░
    ░░░  rodar um programa externo para brutar algo, ou sei la. Infelizmente  ░░░
    ░░░  não consegui fazer o docker funcionar para C# e Java a tempo :(      ░░░
    ░░░  (aceito pull requests!)                                              ░░░
    ░░░                                                                       ░░░
    ░░░  Para subir o laboratório só rodar um                                 ░░░
    ·░░    $ docker compose up                                                ·░░
    ░░░  Na pasta do repositório.                                             ░░░
    ░░░  Basta acessar a interface gráfica (site) em http://127.0.0.1:3003/   ░░░
    ░░░  Ela é necessária para testar os sanitizadores client-side !!! (Dá    ░░░
    ░░░  pra fazer com puppeteer depois, mas deu preguiça, usa teu browser ai ·░░
    ░░░  ou faz um pull)                                                      ░░░
    ·░░                                                                       ░░░
    ░░░  ASCII do site:                                                       ·░░
    ░░░   ___________________________________________________________________ ·░░
    ░░░  |(x)( )( ) /_HTML_Sa../_____________________________________________|░░░
    ░░░  | < > @  (http://127.0.0.1:3003/)                                   |·░░
    ░░░  |-------------------------------------------------------------------|░░░
    ░░░  |   HTML Sanitizers Playground                                      |░░░
    ·░░  |    _______________________                                        |·░░
    ░░░  |   [______<h1>tst</h1>_____]                                       |░░░
    ░░░  |   [_______________________]                                       |░░░
    ░░░  |   (Go)                                                            |·░░
    ░░░  |                                                                   |░░░
    ░░░  | +--------------+  +--------------+  +--------------+              |░░░
    ·░░  | | dompurify    |  | sanitizehtml |  | jsxss        |              |░░░
    ░░░  | | <h1>tst</h1> |  | tst          |  | <h1>tst</h1> |              |·░░
    ░░░  | +--------------+  +--------------+  +--------------+              |·░░
    ░░░  |                                                                   |░░░
    ░░░  | +-------------------------------------+                           |░░░
    ░░░  | | nodejs bleach-default               |                           |░░░
    ░░░  | | <h1>tst</h1>                        |                           |░░░
    ░░░  | +-------------------------------------+   [ETC...]                |·░░
    ░░░  |___________________________________________________________________|·░░
    ░░░                                                                       ░░░
    ░░░  A API é super-simples e só precisa enviar um POST com os inputs      ░░░
    ░░░                                                                       ░░░
    ░░░  $ curl -H "Content-Type: application/json" --data                    ░░░
    ░░░  '{"markups":["<a>aaa</h1>"]}' "http://127.0.0.1:3000/sanitize"       ░░░
    ░░░                                                                       ░░░
    ░░░  {                                                                    ░░░
    ░░░    "nodejs": {                                                        ░░░
    ░░░      "angular": [                                                     ░░░
    ░░░        {                                                              ░░░
    ░░░          "input": "aaaaa",                                            ░░░
    ░░░          "output": " "                                                ·░░
    ░░░        }                                                              ░░░
    ░░░      ],                                                               ·░░
    ·░░      "arcgis": [                                                      ░░░
    ░░░        {                                                              ░░░
    ░░░          "input": "aaaaa",                                            ░░░
    ·░░          "output": "aaaaa"                                            ░░░
    ░░░        }                                                              ░░░
    ░░░      ],                                                               ░░░
    ░░░      "bleach-default": [                                              ░░░
    ░░░        {                                                              ·░░
    ░░░          "input": "aaaaa",                                            ░░░
    ·░░          "output": "aaaaa"                                            ░░░
    ░░░        }                                                              ░░░
    ░░░      ],                                                               ░░░
    ·░░      "bleach-strict": [                                               ·░░
    ░░░        {                                                              ░░░
    ·░░          "input": "aaaaa",                                            ░░░
    ░░░          "output": "aaaaa"                                            ·░░
    ░░░        }                                                              ░░░
    ░░░      ],                                                               ░░░
    ░░░      "dompurify": [                                                   ░░░
    ·░░        {                                                              ░░░
    ░░░          "input": "aaaaa",                                            ░░░
    ░░░          "output": "aaaaa"                                            ░░░
    ·░░        }                                                              ░░░
    ░░░      ],                                                               ░░░
    ·░░      [ETC...]                                                         ·░░
    ░░░                                                                       ·░░
    ░░░  Lembrando que a API é apenas para sanitizadores server-side !!!      ·░░
    ░░░  Para client-side, acesse o site.                                     ░░░
    ░░░                                                                       ░░░
    ·░░  Atualmente, os seguintes sanitizadores estão implementados:          ░░░
    ░░░                                                                       ░░░
    ░░░  Client-side:                                                         ░░░
    ░░░    dompurify                                                          ░░░
    ░░░    caja                                                               ░░░
    ░░░    jsxss                                                              ░░░
    ░░░    sanitizehtml                                                       ░░░
    ░░░    angular                                                            ░░░
    ░░░  Server-side:                                                         ░░░
    ░░░    nodejs arcgis                                                      ░░░
    ░░░    nodejs bleach-default                                              ░░░
    ·░░    nodejs bleach-strict                                               ·░░
    ·░░    nodejs dompurify                                                   ░░░
    ░░░    nodejs insane-default                                              ·░░
    ░░░    nodejs insane-strict                                               ░░░
    ░░░    nodejs yahoopurify                                                 ·░░
    ░░░    php htmlawed                                                       ░░░
    ░░░    php htmlpurifier                                                   ░░░
    ░░░    php htmlsanitizor                                                  ░░░
    ·░░    php symphony                                                       ░░░
    ·░░    php typo3                                                          ░░░
    ░░░    php wordpress wp_kses                                              ░░░
    ░░░    python bleach                                                      ░░░
    ░░░                                                                       ░░░
    ·░░  ---[ 2 - Algoritmo genético                                          ░░░
    ░░░                                                                       ░░░
    ░░░  Com o laboratório pronto, pensei em ir montando o payload na mão até ░░░
    ░░░  construir um que se transformasse diferente pra cada sanitizador.    ░░░
    ░░░  Depois de meia hora tentando e quebrando a cabeça, deu pra perceber  ░░░
    ░░░  que ia demorar muito e não seria otimizado. Dai lembrei que talvez   ░░░
    ░░░  um algoritmo genético [2] conseguisse resolver e criar um payload    ░░░
    ░░░  pequeno e satisfatório.                                              ░░░
    ·░░                                                                       ░░░
    ░░░  Como funciona um algoritmo genético para esse caso específico?       ░░░
    ░░░                                                                       ░░░
    ░░░  ┌────────────┐                                                       ░░░
    ░░░  │Lê lista de │                                                       ░░░
    ░░░  │tags HTML   │                                                       ·░░
    ░░░  └─────┬──────┘                                                       ░░░
    ░░░        │                                                              ░░░
    ░░░        │                                                              ░░░
    ░░░   ┌────▼──────────┐    ┌─────────────┐   ┌───────────────┐            ░░░
    ░░░   │Cria população │    │Acessa o site│   │Calcula fitness├►Resultados ░░░
    ░░░   │inicial com N  ├────►do lab com   ├───►dos payloads   │ diferentes ░░░
    ░░░   │tags randomicas│    │puppeteer    │   │gerados        │ dividido   ·░░
    ░░░   └───────────────┘    └──────▲──────┘   └───────┬───────┘ pelo total ░░░
    ░░░                               │                  │         de         ░░░
    ·░░                               │                  │         sanitizers ░░░
    ░░░                               │        ┌─────────▼┐                   ·░░
    ░░░                               │        │Resultado └──────────┐        ░░░
    ·░░                               │        │Diferente para       │        ·░░
    ░░░                   ┌───────────┴───┐    │todos sanitizadores? │        ░░░
    ░░░                   │Aplica mutação │    └───────┬─┐           │        ░░░
    ░░░                   │nos filhos com │            │ └────┬──────┘        ░░░
    ░░░                   │novas tags HTML│            │      │ ☆゚.*・。゚☆゚.*・。゚☆゚░░░
    ░░░                   │aleatorias     │        Nao │      │ ┌───────────┐ ░░░
    ░░░                   └─────────▲─────┘            │      └────►Printa e│ ·░░
    ░░░                             │                  │      Sim        sai│ ░░░
    ░░░                             │                  │       └────────────┘ ░░░
    ░░░              ┌──────────────┴───────┐          │        .*・。゚☆゚.*・。゚☆゚.·░░
    ░░░              │Cria nova populacao   │     ┌────▼────────┐             ░░░
    ░░░              │com M filhos          │     │Seleciona os │             ░░░
    ░░░              │combinando os payloads◄─────┤payloads mais│             ░░░
    ░░░              │pais em pontos        │     │adequados    │             ░░░
    ░░░              │aleatorios            │     └─────────────┘             ░░░
    ░░░              └──────────────────────┘                                 ░░░
    ░░░                                                                       ░░░
    ░░░  O Cursor [3] implementou quase tudo, mas precisei fazer ajustes aos  ·░░
    ░░░  parâmetros totais do cálculo, a fitness function também tava cagada e ░░
    ·░░  perdi muito tempo debuggando (problemas com usar o puppeteer pra     ·░░
    ░░░  automatizar coisa e ter que botar delay em tudo, chrome mto lento).  ░░░
    ░░░  Fiquei bem surpreso ao rodar pela primeira vez e achar um resultado em░░
    ░░░  quase 5 segundos, era meio gigante, tipo 200 caracters, mas          ░░░
    ░░░  funcionava. Rodei mais algumas vezes até encontrar um payload        ░░░
    ░░░  pequeno.                                                             ░░░
    ░░░                                                                       ░░░
    ░░░  https://github.com/caioluders/genetic_payload_generator_html_sanitizer░░
    ░░░                                                                       ░░░
    ░░░  Alguns dos payloads encontrados:                                     ·░░
    ·░░                                                                       ░░░
    ·░░  <abbr><m><<hr>oupg><frame>io<e<blockquote>><textare<image><td><pi<   ░░░
    ░░░  input4>ture>rt                                                       ·░░
    ░░░                                                                       ·░░
    ░░░  <noframe<data>>det<<sub>omman<q>>g<keygen>s<<nobr>ource><<<s>rticl<  ·░░
    ·░░  rtc>>><articl                                                        ░░░
    ░░░                                                                       ░░░
    ░░░  e><no<<param>i<picture>ure<span>r<details>mes<h3><<p<summary><r<     ░░░
    ░░░  summary>>>t<blin                                                     ░░░
    ░░░                                                                       ·░░
    ·░░  k>ike>v<com<code><opti<progress>n>nd<a><<<em>mbed><b<data>se>ns<     ·░░
    ░░░  e<<marquee>tr<h1                                                     ░░░
    ·░░                                                                       ░░░
    ░░░  ><track>e>eme<td>t>i<q><<<meta>body><app<noframes>et><input4>ress<   ░░░
    ░░░  command>ea<co<                                                       ░░░
    ░░░                                                                       ░░░
    ░░░  strike>>er>ti<applet>abbr><samp<select><<acronym<s<                  ░░░
    ░░░  param><strike><spacer>>i<sub>                                        ░░░
    ░░░                                                                       ·░░
    ░░░  <meta>ds<con<keygen>ent>t><select>xtarea<image2<i>m<dl><noframes>d   ░░░
    ░░░  <fiel<summary>                                                       ·░░
    ░░░                                                                       ░░░
    ░░░                                                                       ░░░
    ░░░  >m<form>>l><c<spa<title>er>del><audio>shadow>va<b>><option><tt><b>   ░░░
    ░░░  ex<a<nobr>plet                                                       ░░░
    ·░░                                                                       ░░░
    ░░░  >area<th<select>ad>p<w<s<basefont>r><bdo>><acrony<iframe>><dt>d<     ░░░
    ░░░  nav><<optgroup>n                                                     ░░░
    ░░░                                                                       ░░░
    ·░░  <d<listing><datalist>car<input>>u<command>dt>4<noframes>on<cit<hea<  ░░░
    ░░░  animatemotion                                                        ░░░
    ░░░                                                                       ░░░
    ░░░  >er>><p<font><area><bgsound>span>3><img2<h6><dir>                    ░░░
    ·░░  em><tf<<form><animatetransform>                                      ·░░
    ░░░                                                                       ░░░
    ·░░  <a<h3><source>a>>ot<search><co<article><object>>l<form>ckq<tfoo      ░░░
    ·░░  <summary>h1<artic                                                    ░░░
    ░░░                                                                       ░░░
    ░░░  le>><anim<optgroup>te><<select>mage3>><thead>s>x<<<s>e<<da           ░░░
    ·░░  <input>alist>el>ter><s                                               ░░░
    ░░░                                                                       ·░░
    ░░░  ection>><code>str<caption><svg><<dd>ortal><custom tags>br>           ·░░
    ░░░  <<<da<font>alis<fields                                               ░░░
    ░░░                                                                       ░░░
    ·░░  et>>od<rb><menu><address><dat<p<abbr>ram>><iframe>object>            ░░░
    ░░░  <title>ist<tra<address>                                              ░░░
    ·░░                                                                       ░░░
    ░░░  k>n<<col>am<dl>><param>an<in<summary><f<portal>                      ░░░
    ░░░  rm><animate><bdi>>ma<<ul>><va<ima<nav>e3<br>>                        ░░░
    ·░░                                                                       ·░░
    ░░░  <<section><html><i<anim<tfoot>te<keygen>otio<section>>               ░░░
    ░░░  age><<<ruby>ink>tc>am<im                                             ░░░
    ·░░                                                                       ·░░
    ░░░  <caption>s<nobr>yle><st<in<q><isindex><ins>4>ong>area                ░░░
    ░░░  >d><label>ba<discard<em>efo                                          ░░░
    ░░░                                                                       ·░░
    ░░░                                                                       ░░░
    ░░░  <strike><tr>ptgrou<figure><h2<select><<i>ar<sub<discard>av>          ░░░
    ░░░                                                                       ░░░
    ░░░                                                                       ░░░
    ░░░  E um JSON detalhando como fica em cada sanitizer:                    ░░░
    ·░░                                                                       ░░░
    ░░░  "<strike><tr>ptgrou<figure><h2<select><<i>ar<sub<discard>av>" : {    ░░░
    ·░░    "dompurify": "<strike>ptgrou<figure>&lt;<i>                        ·░░
    ░░░    arav&gt;</i></figure></strike>",                                   ░░░
    ░░░    "caja": "<strike><tr>ptgrou<figure><h2>&lt;<i>ar<sub>              ·░░
    ░░░    av&gt;</sub></i></h2></fig                                         ░░░
    ░░░    ure></tr></strike>",                                               ·░░
    ░░░    "jsxss": "<strike><tr>ptgrou<figure>&lt;h2&lt;select&gt;&lt;<i>    ░░░
    ·░░    ar&lt;sub&lt;dis                                                   ░░░
    ░░░    card&gt;av&gt;",                                                   ░░░
    ·░░    "sanitizehtml": "<strike><tr>ptgrou&lt;<i>arav&gt;</i></tr></strike>",░░░
    ░░░    "angular": "<strike>ptgrou<figure>&lt;<i>                          ░░░
    ░░░    arav&gt;</i></figure></strike>",                                   ░░░
    ░░░    "nodejs arcgis (Server-side)": "&lt;strike&gt;<tr>ptgrou<          ░░░
    ░░░    figure>&lt;h2&lt;selec                                             ░░░
    ░░░    t&gt;&lt;<i>ar&lt;sub&lt;discard&gt;av&gt;",                       ░░░
    ░░░    "nodejs bleach-default (Server-side)": "<strike><tr>ptgrou<        ░░░
    ·░░    figure><h2<select><<                                               ░░░
    ░░░    i>ar<sub<discard>av>",                                             ░░░
    ·░░    "nodejs bleach-strict (Server-side)": "ptgrouarav>",               ░░░
    ░░░    "nodejs dompurify (Server-side)": "<strike>ptgrou<figure>&lt;<i>   ░░░
    ░░░    arav&gt;</i></f                                                    ·░░
    ░░░    igure></strike>",                                                  ░░░
    ░░░    "nodejs insane-default (Server-side)": "<strike><tr>               ░░░
    ░░░    ptgrou</tr></strike>",                                             ·░░
    ░░░    "nodejs yahoopurify (Server-side)": "<tr>ptgrou<figure>&lt;<i>     ░░░
    ░░░    arav></i></figure                                                  ░░░
    ░░░    ></tr>",                                                           ░░░
    ·░░    "php htmlawed (Server-side)": "<span style=\"text-decoration:      ░░░
    ░░░    line-through;\">p                                                  ░░░
    ░░░    tgrou&lt;&lt;i&gt;ar<sub>av&gt;</sub></span>",                     ░░░
    ░░░    "php htmlpurifier (Server-side)": "<figure><h2>&lt;<i>ar<sub>      ░░░
    ░░░    av&gt;</sub></i></                                                 ░░░
    ░░░    h2></figure>",                                                     ░░░
    ░░░    "php htmlsanitizor (Server-side)": "ptgrou<figure><h2><i>ar<sub>   ░░░
    ░░░    av&gt;</sub></i                                                    ░░░
    ░░░    ></h2></figure>",                                                  ░░░
    ░░░    "php symphony (Server-side)": "<strike><tr>ptgrou<figure><h2>      ·░░
    ░░░    <select><i>ar<sub>                                                 ░░░
    ░░░    </sub></i></select></h2></figure></tr></strike>",                  ░░░
    ·░░    "php typo3 (Server-side)":                                         ░░░
    ░░░    "&lt;strike&gt;&lt;tr&gt;ptgrou&lt;figure&gt;&lt;h2&               ·░░
    ░░░    gt;&lt;select&gt;&lt;i&gt;ar&lt;sub&gt;&lt;discard&gt;av&amp;gt;   ·░░
    ░░░    &lt;/discard&gt                                                    ░░░
    ░░░    ;&lt;/sub&gt;&lt;/i&gt;&lt;/select&gt;&lt;/h2&gt;&lt;/figure       ░░░
    ░░░    &gt;&lt;/tr&gt;&lt;                                                ░░░
    ░░░    /strike&gt;",                                                      ░░░
    ░░░    "python bleach (Server-side)":                                     ░░░
    ░░░    "&lt;strike&gt;&lt;tr&gt;ptgrou&lt;figure&gt;&lt                   ░░░
    ░░░    ;h2&lt;select&gt;&lt;<i>ar&lt;sub&lt;discard&gt;av&gt;</i>",       ░░░
    ░░░    "Provavelmente alguma templating engine, strip_tags(), ou similar":░░░
    ░░░    "ptgrou"                                                           ·░░
    ░░░  }                                                                    ░░░
    ░░░                                                                       ░░░
    ·░░                                                                       ·░░
    ·░░  Pedi pro cursor fazer um site esdrúxulo e ele fez essa maravilha aqui░░░
    ░░░                                                                       ░░░
    ░░░  http://lude.rs/detecta_sanitizer                                     ░░░
    ░░░                                                                       ·░░
    ░░░  Assim fica mais fácil de usar o payload e detectar os sanitizadores. ░░░
    ░░░                                                                       ·░░
    ░░░  ---[ 3 - Melhorias // EOF                                            ░░░
    ░░░                                                                       ·░░
    ·░░  Com certeza daria pra melhorar a fitness function levando em conta o ░░░
    ░░░  tamanho, número de tags, etc. Outra melhoria seria criar a população ·░░
    ·░░  com atributos aleatórios e conteúdo de acordo com as tags, algo como ░░░
    ░░░  o que o shazzer.co.uk faz. O laboratório além de precisar ser        ░░░
    ░░░  ampliado para outras tecnologias, também é necessário um sistema de  ░░░
    ░░░  controle das versões, já que cada versão pode alterar como os        ░░░
    ░░░  sanitizadores funcionam. Acredito que seja possível criar um payload ░░░
    ░░░  que além de detectar o sanitizador também detecte a versão, ou um    ░░░
    ░░░  conjunto de payloads que faça isso.                                  ░░░
    ░░░                                                                       ·░░
    ░░░  Espero que ajude nas traquinagens de vocês (:                        ░░░
    ·░░                                                                       ░░░
    ░░░  ---[ 4 - Referências                                                 ·░░
    ░░░                                                                       ░░░
    ░░░  [1] https://portswigger.net/web-security/dom-based/dom-clobbering    ·░░
    ░░░  [2] https://pt.wikipedia.org/wiki/Algoritmo_genético                 ·░░
    ░░░  [3] https://cursor.com                                               ░░░
    ·░░                                                                       ░░░
    ··░                                                                       ░··