使用BurpSuite实验室练习SQL注入攻击

因为之前对HTTP和Java都不熟悉,所以想要一开始就使用实验室师兄给的在线平台练习有点困难。好在我在一本参考书上看到推荐使用BurpSuite的在线实验室,又因为前段时间我恰好学习了Burp的网络扫描相关,于是我尝试着利用这个软件进一步的学习WEB的网络安全。后来发现上面的练习难度适中,并且既有原理说明,又有操作指导,强烈推荐像我这样的新手入门使用。
这周首先学习的是SQL注入攻击的第一部分。实验室地址

首先,Burpsuite上给出的SQL的定义:

SQL injection is a web security vulnerability that allows an attacker to interfere with the queries that an application makes to its database. It generally allows an attacker to view data that they are not normally able to retrieve. This might include data belonging to other users, or any other data that the application itself is able to access. In many cases, an attacker can modify or delete this data, causing persistent changes to the application’s content or behavior.
In some situations, an attacker can escalate an SQL injection attack to compromise the underlying server or other back-end infrastructure, or perform a denial-of-service attack.

使用BurpSuite实验室练习SQL注入攻击_第1张图片
一言以蔽之SQL注入攻击就是通过干扰应用程序对数据库的正常查询,从而非法获得、篡改、删除、破坏用户的数据或是服务器设备。

  1. 检索隐藏数据

有的时候,通过浏览器发出get命令查询数据库,往往后面会着一些条件作为返回内容的限制。比如我们在购物网站查询某一类商品时,浏览器会想服务器发出相应的查询请求,如我们这次使用的gifis。使用BurpSuite实验室练习SQL注入攻击_第2张图片
使用BurpSuite实验室练习SQL注入攻击_第3张图片
但是我们利用SQL的查询命令进行'--来进行攻击。'表示的是字符串变量,而--则是SQL中的注释指示符,它意味着它后面的查询语句都将被编译器解释为注释,不被执行。

因此我们可以在原来的请求语句中添加'or+2=2--其中or表示的是或命令,+表示的是连接符,2=2始终是成立的,所以or语句始终成立,所以修改后的查询将返回所有项目。
使用BurpSuite实验室练习SQL注入攻击_第4张图片
最终结果
使用BurpSuite实验室练习SQL注入攻击_第5张图片

  1. 颠覆应用程序逻辑
    同样我们还可以通过注释语句--对用户的登陆操作信息进行攻击。
    使用BurpSuite实验室练习SQL注入攻击_第6张图片
    正常情况下,用户输入的账户和密码会被送往数据库,检查是否匹配:SELECT * FROM users WHERE username ='lili’AND password =‘123456’。但是如果我们使用了'administrator--那么SQL语句后半部分password的查询部分将会被注释掉,此时查询将返回管理员的账户登陆,并将攻击者记录为管理员。
    使用BurpSuite实验室练习SQL注入攻击_第7张图片
    使用BurpSuite实验室练习SQL注入攻击_第8张图片
    返回结果如下:
    使用BurpSuite实验室练习SQL注入攻击_第9张图片
    3.从其他数据库中检索出数据
    当应用程序的响应会返回SQL查询的结果是,攻击者就可以利用SQL注入攻击从数据库的其他表中检索数据。常见的这类攻击有SQL注入UNION攻击。
    UNION命令可以在原命令上追加一个或是多个select命令并将结果随原命令一同返回。
    例如:

SELECT a,b FROM table1 UNION SELECT c,d FROM table2
原命令是对table1的查询,使用UNION之后可以在原命令的基础之上追加对table2的查询,并且将两个结果一同返回。

所以很明显,要使得UNION命令成功生效,我们需要注意两点,一是每个查询必须要返回数量相同的列,而是反馈结果中每列数据的数据结构类型应该是相互兼容的。

接下来我们就需要一一验证。

确定SQL注意UNION攻击所需要的列数

常见的有两种命令:

'order+by+1
'order+by+2 
.....

order命令是递增的指定索引项。当指定的列索引项超过了结果集中实际的列数时,数据库就将返回并报错,此时的最大的未报错的值,即为UNION返回值得列数。
使用BurpSuite实验室练习SQL注入攻击_第10张图片
使用BurpSuite实验室练习SQL注入攻击_第11张图片
例如,在该选项中’order+by+4--时第一次出现报错,说明列的数目为3。
第二种方法式使用‘UNION+select,null--命令。这种方法的使用方式恰好与第一种相反。当空值的数量与实际的列数不匹配时,数据库将返回错误,此时我们需要将null值加一,然后继续查询’UNION+select+null,null--使用BurpSuite实验室练习SQL注入攻击_第12张图片
返回依然报错:
使用BurpSuite实验室练习SQL注入攻击_第13张图片
继续输入:'union+select+null,null,null--
使用BurpSuite实验室练习SQL注入攻击_第14张图片
返回值成功:
使用BurpSuite实验室练习SQL注入攻击_第15张图片
说明正确的返回列数是3,与第一种的方法一致。

接下来是关于返回数据类型的确定,我们下周再学习。

你可能感兴趣的:(学习心得)