浪子回头金不换,35岁重学网络安全——SQL注入篇。
本篇内容简介:MYSQL中的查询相关操作以及一些常用函数。
实验环境
在security
库中做下列测试:use security;
PS:如果已经成功安装了
sqli-labs
的靶场,在Mysql
中已经存在security
库。
基本查询
# select + 列名(*代表所有)from 表名 where 条件语句
select * from users where id = 1;
# 等价写法
select id,username,password from users where id = 1;
# 使用 in() 函数实现;可以用于绕waf
select * from users where id in('3');
()中的内容优先查询
子查询,优先执行()
中的查询语句
select * from users where id =
(select id from users where username=('admin'));
联合查询 union
将查询结果合并为一列进行显示
select id from users union select email_id from emails;
union查询前后两条语句的结果列数必须相同
列数不同,导致错误
select * from users where id=1
union
select * from emails where id = 1;
解决方法:可以使用任意内容补充欠缺的列
select * from users where id=1
union
select *,1 from emails where id = 1;
group by 分组
group by
正常用足数据的分组。但是groupo by
还可以用于实现判断数据表中的列数。
在绕过waf
时起到很好的作用
分组效果案例
insert into users(id,username,password) values(15,'Dumb','123456');
select * from users;
select count(id),username from users group by username;
group by实现查询列数效果
当group by
后面的数字大于列数时,会产生报错。从而推断出表是列数
可以使用二分法进行列数测试。
select * from users where id = 1 group by 1;
select * from users where id = 1 group by 2;
select * from users where id = 1 group by 3;
select * from users where id = 1 group by 4; --+ 报错
order by 排序
默认按照升序排列
效果同group by
,一盘用于判断数据表的列数
# 按照第一列排序:默认升序
select * from users order by 1;
# 按照第二列排序:默认升序
select * from users order by 2;
# 按照第一列排序:降序
select * from users order by 1 desc;
limit 限制输出行数
从第一行开始,显示三行数据:select * from users limit 1,3;
![[Pasted image 20250106203315.png]]
limit默认从第0行开始计数:select * from users limit 0,3;
and 和 or
and
:前后两个条件同时满足
or
:前后两个条件满足一个即可
# and语法
select * from users where username='Dumb' and password='123456';
# or语法
select * from users where username='Dumb' or id = 3;
常用函数
将数据合并到一行:group_concat()
命令格式:
select group_concat(id,username,password)
from users;
查看当前数据库名称:select database()
查询当前正在使用的数据库名称:select database();
查看当前数据库版本 select version
查看当前数据库的版本:select version();
无情的广告时间
哈哈哈哈,又到了大家喜欢的广告时间了,喜欢的话给个关注呗,公众号:编码魔坊
,点击下方小卡片,扫码即可关注,谢谢您的关注!!!