E as aspas estavam lá quando eu dei a minha resposta?
Quanto ao resto, é simples:
Normalmente, num fórum, é possível o utilizador introduzir TEXTO. Texto simples, plain text, tal como estou a escrever agora.
No entanto, também tem de ser possível o utilizador introduzir caracteres especiais como o "<" ou o ">",
sem ele se ver obrigado a escrever < ou > ele mesmo. Senão, eu podia escrever "<b>assim</b>" e sem querer veria aquela palavra a bold.
Ou, pior, podia escrever <script>document.write("assim");</script> e a palavra iria surgir transparentemente do teu ponto de vista, mas algo mais aconteceu entretanto.
Há sites cuja segurança se baseia em proibir determinadas tags. Isto é, a tag <script> está bloqueada, e do lado do servidor, este bloqueio pode ser feito com um replace de "<script>" para "<script>". Até aqui tudo bem. No entanto, para lhe dar a volta, é só modificar aquilo de forma a permanecer válido em HTML mas deixar de ser reconhecido pelo parser. Por exemplo, acrescentando um (ou mais) espaços antes de fechar a tag - "<script >". Antes de fechar, depois de abrir, you name it.
Mesmo que se arranjem mil e uma formas de evitar estas tags,
é possível que exista alguma que lhes tenha escapado. Aos olhos de um utilizador normal, este pode escrever "<script>" que não irá executar script nenhum.
O XSS mais avançado surge quando se consegue dar a volta a todas as formas de segurança de um fórum e introduzir na mesma um script. Mesmo com a segurança que o fórum já terá, um atacante simplesmente arranjou outra forma (e é de "outras formas" que vivem grande parte das vulnerabilidades) de fazer as coisas. Claro que ninguém no seu perfeito juízo deixa os utilizadores colocarem scripts para outros utilizadores verem, mas às vezes a segurança presente não chega para evitar que isso aconteça.
O caso hi5 foi bastante mais estúpido. O hi5 permitiu aos utilizadores colocarem os seus scripts para pôrem efeitos nas páginas. Claro está que não foram só efeitos que puseram...
No caso da variável GET é mais simples ainda:
http://www.example.com/scriptvulneravel.php?nome=Josefina%20Antonieta
a página mostra:
Código:
Bem vindo/a, [B]Josefina Antonieta[/B]!
No entanto, é fácil de reparar que o que se encontra a bold é exactamente o que está no campo "nome". Então, brincando com esse campo, podemos fazer o nosso XSS:
http://www.example.com/scriptvulneravel.php?nome=Josefina %20Antonieta<script>alert("XSS!");</script>
Simples. Claro que muitos sites já aprenderam a filtrar também os dados do GET, mas outros tantos há que ainda não o tenham feito.
Um exemplo que encontrei aqui mesmo no Techzone:
http://www.techzonept.com/showpost.php?p=1299757&postcount=455
O link aponta para isto:
http://www.acessoensinosuperior.pt/...=SANDRA CURTE PILAS&BIC=12951007&CEC=1&EtC=17
No entanto, o campo "NmC" é livremente alterável:
http://www.acessoensinosuperior.pt/...mC=OLHA QUEM ELE É!&BIC=12951007&CEC=1&EtC=17
Ou...
http://www.acessoensinosuperior.pt/...</u></i></b></font>&BIC=12951007&CEC=1&EtC=17
E daí, porque não?...
http://www.acessoensinosuperior.pt/...t("XSS!");</script>&BIC=12951007&CEC=1&EtC=17
Posso sempre dar a volta a um eventual parser desta forma:
http://www.acessoensinosuperior.pt/coloc2004/col1det.asp?NmC=Qualquer%20coisa
%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%58%53%53%21%22%29%3B%3C%2F%73%63%72%69%70%74%3E
&BIC=12951007&CEC=1&EtC=17
Já agora, para esclarecer, vê o BI que está nessa página e procura-o
aqui para saberes o nome real do personagem
Se realmente queres aprender este tipo de coisas, aprende a manusear minimamente bem HTML e Javascript e a usar o PHP que acabas por perceber tu mesmo onde estão os problemas
Olha que eu nem sou mais que um simples entusiasta que um dia se interessou por isso tal como tu. A diferença é que eu sempre quis ter quem me ensinasse qualquer coisa :x
Só uma nota final: se achas que com o GET não tens cookies,
http://www.acessoensinosuperior.pt/...t.cookie);</script>&BIC=12951007&CEC=1&EtC=17.
E quem faz um alert pode fazer muita coisa