1.基础知识
四个系统库以及里面重要的信息,最重要的information_schema这个系统库
这里面的每一个表不仅存放了与自己相关的,还存放了上级所属的信息。
注意mysql的弱数据类型,如果数据是数值型的,那么你在查询的时候即使加上了引号也不会报错,因为它会自动进行类型的转换
关于弱数据类型的详细点可以看这个 关于 MySQL 数据库空字符及弱类型的探讨 - 腾讯云开发者社区-腾讯云 (tencent.com)
这个查询的是admin’ 记住即可 不是admin
注意这里只能这样写,顺序不能颠倒,把后面的内容放在引号内部,表示一个字段,字段的值是语句的查询结果。
group_concat这个函数,可以将指定字段的查询结果放在一行显示,不同行之间用逗号分隔。它显示一行的逻辑是把查询到的数据从上到下一行一行的拼接起来
concat的查询结果只能是一行,如果不是一行则会报语法错误,通过使用limit限制输出一行即可,比如 limit 0,1,逐行爆破;而且只能查询一个字段
group_concat和concat的区别在于,前者会把指定字段的查询结果拼接到一行,然后再用逗号分隔,而后者会拼接起来但是不同行之间不会拼接起来。
所谓的数值型还是字符型指的是传入时的处理逻辑,有没有加引号啦,而实际上在实际查询时所查询字段的值是一定的,比如select * from user where id=x,这里id的类型是固定的,不同的就是x的形式在变化,但是最终x的值都需要转换为x的类型才会进行查询
报错注入:
关键的函数 updatexml(修改xml文档的内容) 和extractxml(提取xml的内容)
关键的参数是xpath,就是xml文档的路径,xml的格式错误的话就会报错
我们利用的原理就是让xpath的格式错误,从而报错,把要执行的sql语句用括号括起来放在第二个参数的位置,因为带括号所以会优先执行我们的sql语句,之后会检测语法错误,从而才报错信息中得到我们需要的信息。
在使用报错注入时,我们通常还要使用concat拼接一个字符在想要查询的数据的首尾,这样可以帮助我们判断数据内容是否完整,字符一般使用16进制编码的0x7e表示波浪号,‘~',使用字符也可以,不过需要加上一对引号,可能会闭合前面的引号产生冲突,所以一般还是用16进制编码表示。
注释是:-- 减减空格 和 #
如果是在url当中提交,可以使用--+,加号是空格的一种url编码,在url'当中会自动识别为空格,
但是如果不是在url当中,加号就不能被解析为空格,所以一般用#,或者-- ,直接减减空格可能导致空格被吞,所以可以在空格后面再加上其他字符比如:-- q