曲径通幽论坛

标题: 使用 Union Select 暴库,暴表等等原理详解 [打印本页]

作者: beyes    时间: 2013-9-12 21:44
标题: 使用 Union Select 暴库,暴表等等原理详解
由于网站安全限制的原因,帖子中含有敏感 SQL 语句也会导致帖子无法提交成功,因此帖子中的测试语句均已截图给出。

在找到注入点后,基本会使用 union select 来进行暴库,暴表等操作,下面演示这个过程。

假设已经通过 order by  知道存在注入点的查询表中有 5 个字段。

接下来输入下面的语句:
[attach]1896[/attach]

会看到下面的一个错误页面:
[attach]1891[/attach]
从上图可以看到,union select 中的 2,3,4,5 已经被写到相应的栏目上。这是什么形成的呢?首先需要注意,and 1=2 这里并不是语法错误,最多只能算是逻辑“错误”,于是 union select 联合查询之前的查询结果是空的,最后的结果只能是 union select 指定在各字段下的 1,2,3,4,5 这几个数字,因此我们看到了上面的输出。有可能会问,那 1 去哪了?为什么不输出来?原因是页面上并不需要将任何字段的内容都输出,输出什么根据需要来定,也就是根据网站程序中的 select 语句来定。

有了上面的这个特点,我们就可以利用 MySQL 的内置函数将相应的信息暴出来了。依次来看下面的查询结果:
[attach]1897[/attach]
[attach]1892[/attach]
上面使用了user()  函数获得了当前的用户+主机信息,这里可以看到是 root@localhost ,从 localhost 也可以知道 WEB 和 数据库同在一个服务器上(有些网站这两者是分离的)。

接下来使用 database() 函数暴出当前的数据库名:
[attach]1898[/attach]
[attach]1893[/attach]

再接下来,使用一个稍微复杂点的查询,将 news 库中的整个数据表都给暴出来:
[attach]1899[/attach]
[attach]1894[/attach]
在上面使用到了一个特殊的库 information_schema ,它是一个信息数据库。其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息。在 information_schema 中,有数个只读表。它们实际上是视图,而不是基本表,因此你无法看到与之相关的任何文件。可以通过 phpmyadmin 这样比较直观的软件来观察 information_schema 表及组织情况。

上面的语句,从 information_schema 的 tables 表中查询 table_schema 为 news 的 table_name 。从下图可以理解到这位什么可以暴出 news 的所有表来:
[attach]1895[/attach]

另外, table_schema = 后面接的是 %27news%27 。这里的 %27 对应的是单引号。因为 news 是个数据库名,为一个字符串,必须用单引号括起来,否则会出错。需要注意的是,如果服务器端的 php.ini 中开启了 magic_quotes_gpc 选项的话,就不能使用 %27news%27 这种形式,而必须将 new 转化为十六进制,这样注入方能成功,如写成:0x6e657773 就行了。


现在我们已经得到了 3 张表,其中有一个 admin 表,下面的语句将获取这个表的字段(表名部分仍然使用十六进制表示):
[attach]1900[/attach]
提交后 admin 表的字段都被暴了出来:
[attach]1901[/attach]

再接着提交下面语句暴出 admin 表中的用户名和密码:
[attach]1902[/attach]
[attach]1903[/attach]

测试到此为止。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2