sql注入学习

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

  • 34
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值