今天继续给大家介绍渗透测试相关知识,本文主要内容是SQL注入之文件读写。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
我们之所以可以利用SQL注入漏洞来进行文件的读写,是因为MySQL数据库中存在与文件读写相关的函数。
load_file()函数可以进行文件的读取,into outfile和into dumpfile可以进行文件的写入,例如:
执行SQL命令:
select load_file("D:\\123.txt")
可以读取D:\123.txt文件中的内容。
而执行命令:
select "test" into outfile "D:\\234.txt"
可以向创建D:\234.txt文件(该命令执行的要求是该文件不存在),并写入test。
相关命令执行结果如下所示:
上述SQL语句的执行,必须依赖于数据库中secure_file_priv参数,该参数指定了数据库导入和导出的安全路径。
该参数可以有三种类型,如果该参数为一个目录,那么我们执行上述命令的前提是文件处于该参数指定的目录下;如果该参数为NULL,那么上述命令都无法执行;如果该参数为空,那么上述命令都可以无限制执行。
注意,该参数为NULL和空是两个完全不同的概念,该参数为空时如下所示:
该参数为NULL时,如下所示:
关于空值和NULL的区别,如果还存在疑惑,可以查阅:MySQL使用注意事项(一)
当我们利用SQL注入来读取文件内容时,需要知道目标文件的路径和文件名,那么我们如何获取文件路径和文件名呢,可以有以下方法:
1、根据网页报错显示。
有时,网站构建不严谨,我们就可以通过故意制造错误,引导网站显示处相关的路径。
2、网站遗留文件。
注入pipinfo之类的网站遗留文件会暴露网站的路径信息。
3、漏洞报错。
有些CMS或者其他中间件,由于其自身的漏洞,存在这爆路径的漏洞。
4、平台配置文件。
我们在运行网站服务的时候,都会有一个配置文件,如果我们能获取到该配置文件的信息,我们就可以获取到网站的目录。
5、爆破。
在上述方法都失效的情况下,只能通过暴力破解的方式,来猜解网站路径。
当我们使用SQL注入来进行文件读写时,还需要注意,在网站的PHP设置中是否使用了magic_quotes_gpc的魔术引导开关,该参数的设置会对单引号、双引号、反斜杠与空字符进行过滤。
这样,当我们使用MySQL进行文件读写,要输入目标站点路径时,就会受到限制。针对这一点,我们可以使用16进制编码的方式来进行绕过。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200