1.png

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

SQL注入线上实验室

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

2. 访问线上实验室,请点击【传送门】。

第一步:对查询语句动手

首先,访问网站地址:

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

接下来,我们在URL地址结尾添加一个单引号并查看网站是否存在SQL注入漏洞:

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

2.png

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

3.png

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

第二步:查询数据库条目

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

4.png

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

5.png

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

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

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

6.png

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

7.png

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

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

第四步:导出数据库表

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

8.png

9.png

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

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

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

10.png11.png

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

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

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

12.png13.png

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

后话

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

最后,祝大家Happy Hacking!

*参考来源:gbhackers,FB小编Alpha_h4ck编译,转自FreeBuf