如何使用基于整数的手动SQL注入技术

Posted FreeBuf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用基于整数的手动SQL注入技术相关的知识,希望对你有一定的参考价值。

今天,我将教大家如何使用基于整型的手动SQL注入技术来对MySQL数据库进行渗透测试。提醒一下,这是一篇写给newbee的文章。话不多说,我们直奔主题!

SQL注入线上实验室

1. 初学者可以使用这个网站来练习自己的SQL注入技术。

2. 访问线上实验室,请跳转【http://testphp.vulnweb.com/artists.php?artist=1】。

第一步:对查询语句动手

testphp.vulnweb.com/artists.php?artist=1
testphp.vulnweb.com/artists.php?artist=1′

如何使用基于整数的手动SQL注入技术

此时,我们通过修改查询语句成功接收到了数据库返回的错误消息。但是,我们却没有收到关于输入数据(我们所添加的那个单引号)的错误提示,这也就说明我们的输入已经成功了。现在我们就可以知道,我们所输入的这个字符串(单引号)是不会让数据库返回相关错误信息的,接下来我们尝试修复一下这个问题,去掉单引号:

如何使用基于整数的手动SQL注入技术

上图说明,我们在查询语句中采用了基于整型的方法之后就不会在触发错误了,这也就是我们所说的基于整型的SQL注入方法。

第二步:查询数据库条目

确认了漏洞存在之后,我们就可以尝试弄清楚这个数据库表中到底有多少列了,这里我们可以使用order by命令实现。我们可以不断尝试输入任意值的数字来测试数据库中有多少列。

如何使用基于整数的手动SQL注入技术

上图中,我输入了数字4,我想要查询4列,但是得到了一条错误提示。所以我得尝试其他数字,试试3呢?

如何使用基于整数的手动SQL注入技术

大家可以看到,这里没有返回SQL错误。是的,就是3列!

第三步:查询后台数据库表和表名

接下来,我们需要获取表路径,这里使用union all select:

如何使用基于整数的手动SQL注入技术

上图表明,union all select语句返回了表.2和3的表路径:

如何使用基于整数的手动SQL注入技术

上图显示了database() & version()命令的执行结果,并拿到了数据库名和版本信息。

大家可以看到,数据库名为acuart,版本信息为5.1.73-0ubuntu0.10.04.1。

第四步:导出数据库表

Groupconcat()函数可以从一个group中获取与非空值级联的字符串,这里我们可以使用这个函数来枚举出数据库中所有的表。除此之外,我们还可以使用InformationSchema来查看关于数据库中对象的元数据:

如何使用基于整数的手动SQL注入技术

如何使用基于整数的手动SQL注入技术

上图显示的是目标数据库中导出的所有表信息,即:carts,categ,featured,guestbook,pictures,products,users。

第五步:导出数据库表中所有列的数据

接下来,我们导出目标数据库中user表的所有数据:

如何使用基于整数的手动SQL注入技术如何使用基于整数的手动SQL注入技术

从上图的结果中可以看到,这个数据库表中包含的列条目有:uname,pass,cc,address,email,name,phone,cart。

第六步:导出所有的用户名和密码

接下来,我们就可以导出目标数据库中所有的用户名及密码了:

如何使用基于整数的手动SQL注入技术

这样一来,我们就成功拿到了用户名为test且密码为test的用户信息了。

后话

希望大家可以不断练习,并尝试导出数据库表中包含以下列名的数据:address, email, name, phone, cart。

最后,祝大家Happy Hacking!

*参考来源:gbhackers,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

以上是关于如何使用基于整数的手动SQL注入技术的主要内容,如果未能解决你的问题,请参考以下文章

关于sql手动注入

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

MyBatis如何防止SQL注入

企业检测SQL注入的一些方式探讨

企业检测SQL注入的一些方式探讨

mybatis以及预编译如何防止SQL注入