欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

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

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助


今天,我将教大家如何使用基于整型的手动SQL注入技术来对MySQL数据库进行渗透测试。提醒一下,这是一篇写给newbee的文章。话不多说,我们直奔主题!
SQL注入线上实验室
1. 初学者可以使用这个网站来练习自己的SQL注入技术。
2. 访问线上实验室,请点击【传送门】。
第一步:对查询语句动手
首先,访问网站地址:
testphp.vulnweb.com/artists.php?artist=1
接下来,我们在URL地址结尾添加一个单引号并查看网站是否存在SQL注入漏洞:
testphp.vulnweb.com/artists.php?artist=1′

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

上图说明,我们在查询语句中采用了基于整型的方法之后就不会在触发错误了,这也就是我们所说的基于整型的SQL注入方法。
第二步:查询数据库条目
确认了漏洞存在之后,我们就可以尝试弄清楚这个数据库表中到底有多少列了,这里我们可以使用order by命令实现。我们可以不断尝试输入任意值的数字来测试数据库中有多少列。

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

大家可以看到,这里没有返回SQL错误。是的,就是3列!
第三步:查询后台数据库表和表名
接下来,我们需要获取表路径,这里使用union all select:

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

上图显示了database() & version()命令的执行结果,并拿到了数据库名和版本信息。
大家可以看到,数据库名为acuart,版本信息为5.1.73-0ubuntu0.10.04.1。
第四步:导出数据库表
Group_concat()函数可以从一个group中获取与非空值级联的字符串,这里我们可以使用这个函数来枚举出数据库中所有的表。除此之外,我们还可以使用Information_Schema来查看关于数据库中对象的元数据:


上图显示的是目标数据库中导出的所有表信息,即:carts,categ,featured,guestbook,pictures,products,users。
第五步:导出数据库表中所有列的数据
接下来,我们导出目标数据库中user表的所有数据:


从上图的结果中可以看到,这个数据库表中包含的列条目有:uname,pass,cc,address,email,name,phone,cart。
第六步:导出所有的用户名和密码
接下来,我们就可以导出目标数据库中所有的用户名及密码了:


这样一来,我们就成功拿到了用户名为test且密码为test的用户信息了。
后话
希望大家可以不断练习,并尝试导出数据库表中包含以下列名的数据:address, email, name, phone, cart。
最后,祝大家Happy Hacking!
 


今天,我将教大家如何使用基于整型的手动SQL注入技术来对MySQL数据库进行渗透测试。提醒一下,这是一篇写给newbee的文章。话不多说,我们直奔主题!
SQL注入线上实验室
1. 初学者可以使用这个网站来练习自己的SQL注入技术。
2. 访问线上实验室,请点击【传送门】。
第一步:对查询语句动手
首先,访问网站地址:
testphp.vulnweb.com/artists.php?artist=1
接下来,我们在URL地址结尾添加一个单引号并查看网站是否存在SQL注入漏洞:

内容来自无奈安全网


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

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

上图说明,我们在查询语句中采用了基于整型的方法之后就不会在触发错误了,这也就是我们所说的基于整型的SQL注入方法。
第二步:查询数据库条目
确认了漏洞存在之后,我们就可以尝试弄清楚这个数据库表中到底有多少列了,这里我们可以使用order by命令实现。我们可以不断尝试输入任意值的数字来测试数据库中有多少列。
本文来自无奈人生安全网


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

大家可以看到,这里没有返回SQL错误。是的,就是3列!
第三步:查询后台数据库表和表名
接下来,我们需要获取表路径,这里使用union all select:

上图表明,union all select语句返回了表.2和3的表路径:
本文来自无奈人生安全网

上图显示了database() & version()命令的执行结果,并拿到了数据库名和版本信息。
大家可以看到,数据库名为acuart,版本信息为5.1.73-0ubuntu0.10.04.1。
第四步:导出数据库表
Group_concat()函数可以从一个group中获取与非空值级联的字符串,这里我们可以使用这个函数来枚举出数据库中所有的表。除此之外,我们还可以使用Information_Schema来查看关于数据库中对象的元数据:


上图显示的是目标数据库中导出的所有表信息,即:carts,categ,featured,guestbook,pictures,products,users。
第五步:导出数据库表中所有列的数据
接下来,我们导出目标数据库中user表的所有数据:
copyright 无奈人生


从上图的结果中可以看到,这个数据库表中包含的列条目有:uname,pass,cc,address,email,name,phone,cart。
第六步:导出所有的用户名和密码
接下来,我们就可以导出目标数据库中所有的用户名及密码了:


这样一来,我们就成功拿到了用户名为test且密码为test的用户信息了。
后话
希望大家可以不断练习,并尝试导出数据库表中包含以下列名的数据:address, email, name, phone, cart。
最后,祝大家Happy Hacking!
 
无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。