|
在一些 SQL 里,/* */ 是用来注释的,MySQL 也是这样,但是它还有其特殊之处,这些特殊之处是 MySQL 的一种扩展,但如果将这种扩展移植到其他的 SQL 服务器上,那么就会被忽略这些扩展,例如:select /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
如果在字符 '!' 后添加了版本号,那么仅当 MySQL 的版本等于或高于指定的版本号时才会执行注释中的语法:create /*!32302 TEMPORARY */ TABLE t (a INT); 这里意味着,如果 你的版本号为 3.23.02 或更高,那么 MySQL 服务器将使用 TEMPORARY 关键字。
这里,就利用这个特新来精确猜解数据库的版本号:
1. 首先测试一下网站是否在使用 MySQL 数据库:
在注入点后接的是 /*!%20s*/ ,页面出错,说明该站用的是 MySQL 数据库。这是因为,如果是采用别的 SQL 数据库的话,那么在注入点后接 /* */ 会被当成是注释,从而出现正常的页面。正是因为它是 MySQL,所以它才会试图去解析这个 '!' ,然而在这个感叹号后接的是错误的命令,因此页面会出错,从而知道它是 MySQL 。
2. 准确定位 MySQL 版本
执行下面的语句:
上面接的是 /*!40000%20s*/ ,也出现了错误界面,因此可判断该 MySQL 的版本号大于 4.00.00 。可以依循该测试方法,直到测试出正确的版本号,如接入的是 /*!50531%20s*/ 时出错,而在 /*!50533%20s*/ 时返回正常页面,那么说明了该 MySQL 的精确版本号为 5.5.32 。
通过该方法定位 MySQL 版本号非常繁琐,但比较管用。另外,/**/ 还可以代替空格,这有利于绕过程序对空格的过滤。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|