介绍
检测和利用SQL注入
比方说,你在审计一个Web应用程序,发现一个网页,通过接受动态用户提供的值GET,POST或Cookie参数通过HTTP或User-Agent请求头。现在,您要测试这些漏洞是否受到SQL注入漏洞的影响,如果受此漏洞影响,则可以利用它们从后端数据库管理系统中检索尽可能多的信息,甚至可以访问基础文件系统和操作系统。 。
在一个简单的世界中,请考虑目标网址为:
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
假使,假设:
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=1
与原始页面相同,并且(条件评估为True):
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=2
与原始版本不同(条件评估为False)。这可能意味着您在页面的id GET参数中处于SQL注入漏洞的前面index.php。此外,在将SQL语句发送到后端数据库管理系统之前,不会对用户提供的输入进行任何检查。
这是动态内容Web应用程序中的一个常见缺陷,它不依赖于后端数据库管理系统也不依赖于Web应用程序编程语言。这是应用程序代码中的缺陷。在开放Web应用安全项目额定此类漏洞的的最常见的在他们和严谨的Web应用程序漏洞十佳从2013年名单。
现在,您已经找到了易受攻击的参数,可以通过处理idHTTP请求中的参数值来利用它。
回到场景,我们可以SELECT对get_int.php网页中使用用户提供的值的SQL 语句的可能语法进行有根据的猜测。在伪PHP代码中:
$query = “SELECT [column name(s)] FROM [table name] WHERE id=” . $_REQUEST[‘id’];
如您所见,在参数值(例如)之后附加语法有效的SQL语句,该语句的计算结果为True,这将导致Web应用程序返回与原始请求相同的网页(其中没有SQL语句添加)。这是因为后端数据库管理系统已经评估了注入的SQL语句。前面的示例描述了一个简单的基于布尔的盲SQL注入漏洞。但是,sqlmap能够检测到任何类型的SQL注入缺陷并相应地调整其工作流程。idid=1 AND 1=1
在这种简单的情况下,不仅可以附加一个或多个有效的SQL条件,而且还可以附加(取决于DBMS)附加的SQL查询。例如: […]&id=1;ANOTHER SQL QUERY#。
sqlmap可以自动识别和利用这种类型的漏洞的过程。将该原始地址传递http://192.168.136.131/sqlmap/mysql/get_int.php?id=1给sqlmap时,该工具将自动:
确定易受攻击的参数(id在此示例中)
确定可以使用哪些SQL注入技术来利用易受攻击的参数
指纹识别后端数据库管理系统
根据用户的选择,它将对整个服务器进行广泛的指纹识别,枚举数据或接管数据库服务器
…并且根据提供的选项,它将枚举数据或完全接管数据库服务器。