之前写过一篇关于mysql中正则匹配的文章,利用其模糊匹配的特性,可以用来猜测数据库名、表名等等。
网页提供了一个id的注入点,输入1时(即匹配成功)有输出,输入-时(即匹配失败)无输出。
先将id设为1',再在后面跟上
and 1 = (select 1 from information_schema.tables where table_schema = database() and table_name regexp '^e[a-z]' limit 0, 1) --+
这里利用的是逻辑判断,当括号中的子查询语句执行成功且有结果时,会返回1,与括号外面的1 =成立,从而达到目的。
括号中的子查询语句作用是,从information_schema.tables表中找到当前使用的数据库中有哪些表名是以e开头。
当有e开头的表时,可以接着猜测下一个字符,不过盲猜比较耗时,可以写脚本完成这一目的。
或者现在要猜测数据库名,就在1 and '后面跟上如下语句:
database() regexp '^s' --+
这里是猜测数据库名以s开头,如果有输出的话,可以再加个字符,比如f:
database() regexp '^sf' --+

本文介绍如何使用MySQL的正则表达式进行模糊匹配,通过构造特定的SQL语句来猜测数据库名、表名等信息。利用逻辑判断和信息_schema.tables表,实现对数据库结构的探测。
62

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



