|
由于网站安全限制的原因,帖子中含有敏感 SQL 语句也会导致帖子无法提交成功,因此帖子中的测试语句均已截图给出。
在找到注入点后,基本会使用 union select 来进行暴库,暴表等操作,下面演示这个过程。
假设已经通过 order by 知道存在注入点的查询表中有 5 个字段。
接下来输入下面的语句:
会看到下面的一个错误页面:
从上图可以看到,union select 中的 2,3,4,5 已经被写到相应的栏目上。这是什么形成的呢?首先需要注意,and 1=2 这里并不是语法错误,最多只能算是逻辑“错误”,于是 union select 联合查询之前的查询结果是空的,最后的结果只能是 union select 指定在各字段下的 1,2,3,4,5 这几个数字,因此我们看到了上面的输出。有可能会问,那 1 去哪了?为什么不输出来?原因是页面上并不需要将任何字段的内容都输出,输出什么根据需要来定,也就是根据网站程序中的 select 语句来定。
有了上面的这个特点,我们就可以利用 MySQL 的内置函数将相应的信息暴出来了。依次来看下面的查询结果:
上面使用了user() 函数获得了当前的用户+主机信息,这里可以看到是 root@localhost ,从 localhost 也可以知道 WEB 和 数据库同在一个服务器上(有些网站这两者是分离的)。
接下来使用 database() 函数暴出当前的数据库名:
再接下来,使用一个稍微复杂点的查询,将 news 库中的整个数据表都给暴出来:
在上面使用到了一个特殊的库 information_schema ,它是一个信息数据库。其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息。在 information_schema 中,有数个只读表。它们实际上是视图,而不是基本表,因此你无法看到与之相关的任何文件。可以通过 phpmyadmin 这样比较直观的软件来观察 information_schema 表及组织情况。
上面的语句,从 information_schema 的 tables 表中查询 table_schema 为 news 的 table_name 。从下图可以理解到这位什么可以暴出 news 的所有表来:
另外, table_schema = 后面接的是 %27news%27 。这里的 %27 对应的是单引号。因为 news 是个数据库名,为一个字符串,必须用单引号括起来,否则会出错。需要注意的是,如果服务器端的 php.ini 中开启了 magic_quotes_gpc 选项的话,就不能使用 %27news%27 这种形式,而必须将 new 转化为十六进制,这样注入方能成功,如写成:0x6e657773 就行了。
现在我们已经得到了 3 张表,其中有一个 admin 表,下面的语句将获取这个表的字段(表名部分仍然使用十六进制表示):
提交后 admin 表的字段都被暴了出来:
再接着提交下面语句暴出 admin 表中的用户名和密码:
测试到此为止。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|