我曾经详细的写过一篇过于PHP程序注入的文章,其中就对mysql5.O以上版本的数据库进行了一些介绍,只是限于篇幅,介绍的并不多,也不是太详细,今天我就再详细的介绍一下关于mysql5.0以上版本数据库的注入技巧,希望能对大家有所帮助。
我们都知道,通常asp程序是跟access数据库搭配,而php程序则一般是与mysql数据库搭配。在注入一个站点的时候,如果整站使用的是一套asp程序,那我们一般的步骤都是猜表名、猜列名、猜解字段内容,首先我们要对数据库的结构有一个认识,就是一个数据库的结构,左栏的那些是表名,右栏显示的是adin表里面的两个列名(usernme和passwd),至于列内的数据大家可以清楚的看到。
对于这种asp程序,一旦我们破解不出表名来,那么对这个注入点也就无计可施了,但是对于使用了mysql5.0及以上版本数据库的网站,我们即使猜不出表名也是有办法继续注入下去的,这主要得益于mysql中添加的一个名叫information_schema的库,利用它,我们就可以暴库、暴表和暴字段。这里所说的暴库可不是暴什么数据库的路径,而是暴出库的名称,大家来看我下面的演示。
首先我们找到一个php的注入点,可以通过version()这个函数来查看数据库的版本号,提交过后就会得出结果。
可以清楚的看到这个网站的使用的数据库版本是5.0.67,符合我们的暴库需求。这里关于一些怎样判断漏洞,怎样手工检测的过程我就不细讲了,不懂的朋友可以百度一下去好好的温习一下。
我在本地搭建了一个mysql数据库的结构,大家可以好好的看下,在认识了这个结构后我们继续来看下面的步骤,把2处替换为schma name,然后在后面加上“from inforation_schcma.SCHEMAT lmit O,l/*”这条语句,提交后成功的暴出了infomation schcma这个库。
我们再来看一下,我们可以看到我们这里一共有3个库,上面“limit 0,1/*”的意思就是暴出第一个数据库的名字,如果要查看第二个数据库名,就一次增加Iimit后面的值,当我们把0变成1的时候,就可以看到又暴出了一个新的库。
暴出来的这些库对我们有用的可能没有几个,我们最想要的库自然就是存放了管理员用户名和密码的那个库,其实如果单纯的想拿到这个库很简单,我们在前面就可以暴出来,前面介绍了一个查看数据库版本的命令。我们只需要将命令中的“versinO改为databaseO就可以了,具体的形式就是:http://111/news.php?id=114129%20ad%201=2%20unon%20elect%201,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21”。
这里就暴出了study这个库,下面我们开始暴这个库中的表名,具体命令就是:“http://111/news.php?id=114129%20d%20112=2%20union%20select%201,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,l9%20from%20information_schema.tables%20where%20TABLE_SCHEMA=Ox7374756479%201imit%200,1/*”,命令中的table name就是表名的意思,而TABLE _SCHEMA=0x7374756479中的0x7374756479是0x+study的十六进制形式,我们在浏览器中提交后,成功的暴出来了admin这个表名。
如果还想暴其它表名的话,跟前面的一样,逐个增加limit后面的那个数值就可以了。接下来我们再暴这个表中的字段,具体命令就是:“http://111/news.php?id=114129%20ad%201=2%20union%20select%201,COLUMNNAE,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20iformation schema.COLUMNS%20where%20TABLE_NAME=Ox61646D696E%20limit010200,1/*”,命令中的COLUN_NAME就是字段名的意思,而TABLE_我们依次增加limit的数值,分别暴出了其它的字段名称。现在我们已经暴出了所有需要的表和字段了,剩下的只需要在浏览器中提交“http://111/news.php?id=114129%20and%201=2%20union%20Select%20l.dmin_username,3,4,5,6,7,8,9,10,11,12,admin passord,14,15,16,17,18,19,21%20frm%20admin”,就可以成功暴出管理员的用户名和密码的md5值了。NAE=0x6646D696E中的0x61646D696E是0x+admin的十六进制形式。
大家看到了吧,这就是mysql5.0带给我们的乐趣,文章中我并没有猜任何表名和字段,全部的内容都是暴出来的。
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。