赞
踩
之前写过一篇关于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' --+
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。