如何使用基于整数的手动SQL注入技术
今天,我将教大家如何使用基于整型的手动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表的所有数据:
从上图的结果中可以看到,这个数据库表中包含的列条目有:uname,pass,cc,address,email,name,phone,cart。
第六步:导出所有的用户名和密码
接下来,我们就可以导出目标数据库中所有的用户名及密码了:
这样一来,我们就成功拿到了用户名为test且密码为test的用户信息了。
后话
希望大家可以不断练习,并尝试导出数据库表中包含以下列名的数据:address, email, name, phone, cart。
最后,祝大家Happy Hacking!