mysql基础操作
列出所有可用的数据库:SHOW DATABASES;
选择要使用的数据库:USE 数据库名;
列出所选数据库中的所有表:SHOW TABLES;
退出 mysql> 命令提示窗口可以使用 exit 命令:EXIT; 或 QUIT;
查询某表的所有数据: SELECT * FROM 表名;
查询某表中xxx的数据: SELECT *FROM 表名 WHERE xxx;
增加:INSERT INTO 表名VALUES(xx,xx,xxx,);
修改:UPDATE 表名 SET 即将修改的表字段 WHERE 修改哪个
删除:DELETE FROM 表名WHERE 字段名
排序:order by ASC升序,DESC倒序,SELECT *FROM 表名 order by 字段 ASC;
联合查询:SELECT*FROM 表名 WHERE xxx union SELECT *FROM 表名 WHERE xxx;
system_user()系统用户名
user()用户名
current_user() 当前用户名
session_user() 连接数据库用的用户名
database() 数据库名
version() mysql数据库版本
load_file() mysql读取本地文件的函数
@@datadir 数据库路径
@@basedir mysql. 安装路径
@@version_compile_os 操作系统
注释:# 或 --空格 或 /* */
Mysql5.0自带4个数据库:
1. information_schema:数据字典库,存储了其他数据库的元数据;元数据是关于数据的数据,例如库名、表名、列的数据类型、或访问权限等等;
2. mysql:核心数据库,存储用户的权限信息与帮助信息;
3. performance_schema:性能字典,此数据库为数据库性能优化提供重要的参考信息;
4. test:测试库。
information_schema库看作是一个信息数据库:
SCHEMATA表:提供了关于数据库的信息
TABLES表:给出了关于数据库中的表的信息
COLUMNS表: 给出了表中的列信息
use information_schema;
select * from schemata;
select table_schema,table_name from tables;
select table_schema,table_name,column_namefrom columns where table_schema="数据库名";
sql注入:
- 原理分析:
主要涉及Web应用程序对用户输入数据的处理不当,使得攻击者能够插入恶意的SQL代码到应用程序的查询语句中,从而非法访问和操作数据库
- sql注入步骤:
判断是否存在注入>判断字段数>判断显错位>判断库名>判断表明>判断列名>寻找具体数据
- 使用函数:
order by 排序,用来判断字段数
union select 联合查询 ,查询想要的结果
database() 查询数据库
limit 0,1限制输出,0表示显示从第一位开始,1表示显示1位
information_schema 记录所有数据库信息
information_schema.tables记录表明信息的表
information_schema.columns记录列字段值的表
table_name表明
column_name列名
table_schema数据库名
- 联合注入
sqli第一关:输入1=2仍然有显示判断不是数字型注入
使用字符型注入加入 ' 和--+注释后面内容 输入1=2没有显示证明是字符型注入
判断什么方法注入之后判断显示位
使用order by 判断字段数这里我们使用 4 显示报错后
我们使用3 报出只有3个字段之后我们使用union select 联合查询显示输出位
从输出可以看到我们的输出位为2和3 之后我们可以通过输出位来查询我们所需要的信息
我们使用database()和version()函数查询到我们使用的数据库名叫security和数据库版本为5.5.53
我们查询一下security里面有多个表并且显示出来group_concat()函数吧查询的字符串连接起来
我们使用group_concat(table_name) from information_schema.tables where table_schema=database()语句查询到我们security库有四个表
我们随便查询一个表里面的字段吧,这里以emails作为演示
我们查询到emails表里面有两个字段 id 和 email_id 让我们查询一下他们的值吧
并且在第一个显示位输入字段id的值,在第二个显示位输出email_i的值
以上是基础的字符型查询 库名、表名、字段名、字段值的方法
让我们看看数字型注入又是怎么样的方式吧
让我们来到sqli第二关
显示要我们以id作为一个参数进行传参
我们给id参数传参8就会有回显 之后我们使用 and 1=1查看回显
我们看到回显依然是没有变化,我们就使用 and 1=2 查看回显
我们看到 1=2 时就没有了显示,证明这就是数字型注入
好了,接下来我们就要判断他的字段数了
我们使用 order by 4显示报错 那我们尝试3试试
我们看到使用 order by 3 时就又有了显示 ,这是我们就要查看这三个字段哪个是显示位了
这里我们看到他的显示位是后面两位,这里我们就可以查询库名、表名、字段名了同以上字段型一样的查询方法。
总结:
字符型就是需要在传参后面加入' 或 " 或 ) 或 ‘)或 ") 等作为补全代码后执行
如我们sqli演示靶场 id=1' 后面跟我们要操作的语句
数字型就是不用使用 ' 或 " 或 ) 或 ‘)或 ") 等补全代码后执行
如我们sqli演示靶场 id=1 后面跟我们要操作的语句
limit 1,1 是我们使用了union联合查询 前面显示了我们查询的 id=1 的结果 后面又执行了select 的查询的结果 ;这里使用limit限制显示结果 因为显示是从第0位开始 那么我们要显示select 的查询的结果只能使用第1位显示
--+是注释掉后面的代码 因为我们之前用字符型和数字型补全了代码操作了我们想操作的 那么原来的代码还在如果不进行注释那么就会产生报错
此次学习使用工具:
sqli靶场 、PHP study 、fox浏览器 、HackBar V2