基础篇——SQL注入(手工注入)

时间:2024-03-07 15:30:27

SQL注入

  当我们学习一个知识时我们要考虑几个问题:是什么?怎么做?然后进行有条理的学习

是什么?

 

  首先我们要明白SQL注入是什么:

    sql——结构化查询语言

    SQL注入就是在网站url中插入sql语句,执行sql命令,获取数据库内容,达到欺骗服务器的目的。

  SQL注入的原理:普通用户提交sql查询语句,网站没有对用户输入进行过滤导致执行用户命令

危害及防护

  危害:SQL注入可以使入侵者获取后台账号密码、拖库、进入后台破坏、拿shell

  防护:设置网站黑名单、限制敏感词汇、对用户输入进行转义、将参数语句化

怎么做?

  明白什么时SQL注入后我们就要学习如何注入。

  注入的前提是要找到注入漏洞,通常判断是否存在SQL注入漏洞的方法有:

    1、  ‘  单引号判断

    2、 and 1=1 1=2  判断

  找到注入漏洞后就可以进行SQL注入了,注入方法分为很多种:

    联合查询法

    逐字猜解法

    偏移注入法

    宽字节注入

    时间、布尔盲注

    报错注入

  进行注入可以使用手工和工具,手工注入方法:

    1、联合查询法

      首先判断存在注入漏洞后:

        1、使用order by

        2、使用联合查询语句:union select nums,nums(字段数) from admin(数据库表名)

                         

        3、根据返回内容进一步猜解列名:账号密码

                                                                           

 

    2、逐字猜解法:

      逐字猜解不需要进行猜解字段,直接使用逐字猜解语句猜解库名、列名以及账号密码

      逐字猜解语句:

             and exists (select * from 表名)

                  and exists (select  列名  from 表名)

                  and (select top 1 len(用户名) from admin ) =名字长度

                  and (select top 1 asc(mid用户名,1,1)from admin )=97  (判断第一位的ascll值)

             and (select top 1 asc(mid用户名,2,1)from admin )=97  (第二位)

      逐字猜解方法偏于繁琐,熟悉手工注入方式即可,在渗透测试过程中还是要讲究效率问题    

    3、偏移注入法:

      偏移注入属于无法猜解账号密码后尝试的使用方法,注入结果带有一点运气的成分

      偏移注入语句:

        order by 猜解字段

        union select num,num,num from 表名

        union select num,num,* from admin 逐个递减字段数,当可以正常访问则证明admin表存在(递减字段数假设为x)个字段

        之后每次递减x个字段

        递减一个x后

        union select num * from(admin as ainner join admin as b on a.id=b.id)

        递减两个x后

        union select num * from ((admin in as a inner join admin as b on a.id=b.id)inner join admin as c on a.id=c.id)

        逐个递减直到所剩字段小于x后(不一定可以得到所要结果)

    4、宽字节注入法:

      什么时候使用宽字节呢?当web编码使用GBK时,可以将单引号转义则使用宽字节注入

      宽字节注入:%df (注入语句)%23

    5、报错注入,盲注则根据页面返回情况,返回时间进行注入

  以上即为常用的几种手工注入方式,如有错误请留言,博主及时更正!