SQL配置
在github上搜索sqli-labs,进入第一个。(以下是链接https://github.com/Audi-1/sqli-labs)下载解压,放在非中文路径下。然后下载phpStudy(我这里用的是phpStudy2018)将其安装在一个非中文路径之后。进入phpStudy页面,点击其他选项菜单选择站点域名管理。网站域自拟(我用的是sql.test),然后在网站目录选择打开你一开始下载的sqli-labs-master。点击新增后保存设置并生成配置文件。
之后再次在其他选项菜单中选择打开host。在文件的最后一行加上127.0.0.1 网站域名(我用的是sql.test),然后保存。之后在浏览器中访问sql.test。点击Setup/reset Database for labs,然后会发现报错。这个时候我们在大文件夹sqli-labs-master中进入sql-connections小文件夹,进入第一个db-creds.inc文件,在密码栏加上自己填写的密码,重新进入浏览器访问页。再点击Setup/reset Database for labs,就会发现已经弹出了很多的库名。这里环境就配置好了。
SQL报错注入
进入第一关,这是一个报错型的注入,查看网页的index.php源码,然后发现需要传一个id参数。我们使用get传参,输入http://sql.test/Less-1/?id=1(?id=2或者?id=3)分别得到三个名:Dumb、Angelina、Dummy。之后我们对$id这个参数进行构造。
首先我们输入单引号http://sql.test/Less-1/?id=%27进行传参,发现报错了。所以我们可以确定这个地方是存在SQL注入的,因为这些参数被带到了SQL语句中。根据报错信息,所以我们能确定这是一个报错注入。
现在在单引号中间输入数据,我们采用order by进行字段确定。输入http://sql.test/Less-1/?id=‘ order by 3 %23进行字段查询,发现不报错,把3增加到4发现报错。所以这个数据库有3个字段。但是目前是没有显示任何参数的,所以把id=‘中间加个1,发现弹出了之前得到的名。(在这里%27是#,是将后面注释。)现在我们知道了只有三个字段,所以可以进行联合查询。
然后我们使用http://sql.test/Less-1/?id=%27%20union%20select%201,2,3%23这句语句的SQL表示是SELECT*FROM users WHERE id="union select 1,2,3#LIMIT0,1 会发现二的回显点和三的回显点都已经出来了,只有1的回显点还不知道。所以我们选择用后两个字段显示我们想要的信息。然后我们采用http://sql.test/Less-1/?id=%27%20union%20select%201,database(),version()%23 (database()显示当前的数据库,version()显示当前的数据库版本信息)通过这个方式我们可以查询到相关的数据库。我们可以通过查询information_schema来找到其他数据库的数据表。