上篇文章中我们讲述了如何进行手工注入,也通过墨者学院的靶场,真实的感受了SQL注入的感觉。这篇文章我们将继续介绍SQL注入。
世界上有千千万万的网站,我们也都知道网站需要部署在服务器上,但是如果一台服务器上只部署一个网站,那么对于服务器将的资源将会是一个巨大的浪费。毕竟不是每个网站都是需要整台服务器发挥所有性能,许许多多的一些网站只需要比较少的服务器资源和配置就可以流畅的运行。本着对资源的节约,所以一台服务器上大多数情况下不会只存放一个网站,毕竟一台服务器的价格也是不低。
既然一台服务器上可能会挂着许多的网站,那么每个网站就都会有不同的管理员。我们必须规定每个网站对应的管理员只能对自己网站的数据进行操作。也就是需要对其进行权限的设置。
我们知道了一台服务器上会有许多的网站,并且现在绝大多数的网站必须都要使用数据库。每个网站都会有一个管理员,但是如果我们能找到比管理员还要高级别的用户,那么就有可能实现高权限的注入。
在MySQL数据库中,root是拥有最高权限的用户。
上文中我们了解到了MySQL中最高权限的用户root,那么当我们可以使用root用户时,就可以对服务器上数据库中的各个不同网站的数据进行任意的修改。
有人可能会问,我们为什么要进行跨库注入呢?我只要渗透目标网站就好了,为什么还需要进行跨库注入去在别的站点进行数据的修改或者获取呢?
其实我们之所以要使用跨库注入,原因可不是为了去别的网站搞破坏,我们就是为了渗透入侵目标网站。
有的时候我们会遇到目标网站防护做的比较好,很难找到突破口对其进行入侵。这时呢,我们就可以对目标网站所在的服务器下下功夫。如果说恰好你目标网站所在的服务器上有那么几个防护做的非常差的,或者是可能没什么人管理的站(也就是我们俗称的旁站),我们就可以先对这个网站进行入侵,在拿到高的权限后,在进行跨库注入对我们的目标网站进行入侵。
我们通过sqlilabs进行跨库注入的演示
我们使用Less-2(第二关)作为演示
我们首先试验一下该网站是否存在SQL注入漏洞
在地址栏输入?id=1
我们发现当我们通过Get方式传入id时,网站对我们传递的参数,有获取并代入数据库查询,并返回相应的数据,说明可能存在注入点
我们在?id=1后加上 and 1=2
发现页面饭会出现错误,说明此处存在注入点。也就是说我们可以进行SQL注入了
SQL注入的开始往往都是需要猜解有几个字段
当然你也可以从比较大开始试,并不一定要从1开始。
当我们输入order by 4时页面报错,说明字段数为4-1=3
这时我们将id=-1,并且使用联合查询
查看返回的页面可知,我们可以在2和3处进行敏感信息的查询,我们查询数据库连接的用户
发现是root,也就是说我们可以通过该网站对数据库中的其他库(不属于该网站的)进行注入
想使用SQL语句的话我们还需要知道数据库名、表名还有字段名
我们先查询服务器上的所有数据库名
服务器上所有的数据库名我们都有了,那么就可以选择其中的库进行跨库注入
这里可能有的人会问我怎么知道,哪个网站对应的数据库叫什么?
一般说来,数据库的名字和网站的名字会是有关联的。但是如果真的遇到脑子不好的管理员乱命名,我们也可以通过逐个尝试的方法,对比里面的数据,来确定数据库对应的网站。
我们这里选择sqlinsert这个网站的数据库进行跨库注入
获取sqlinsert数据库下的所有表名
如果说这一步报错了,应该是遭到了魔术引号的转移,可以查看:sqlilabs手工注入遇到魔术引号解决方法
我们查询到表名之后,发现一张比较敏感的表——user
所以这时我们可以针对user表进行查询,需要查询user这张表,我们还需要知道user表中的字段名
得知了user表中的字段名后,我们就可以查询user中的数据了
至此我们通过sqlilabs网站对sqlinser网站进行跨库注入就完成了。
希望我的文章都够帮助到你
已同步更新至个人博客:https://www.hibugs.net/security/vulnerability/sql-insert/lamar/high-authcross-insert