翻译来自:掣雷小组
成员信息:
thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt
标记红色的部分为今日更新内容。
6.0、介绍
6.1、寻找文件包含漏洞
6.2、文件包含和文件上传
6.3、手工验证SQL注入
6.4、基于错误的SQL注入
6.5、确认并利用sql盲注漏洞
6.6、使用SQLMap查找和利用SQL注入
6.7、利用XML外部实体注入
6.8、检测和利用命令注入漏洞
6.3、手动识别SQL注入
大多数现代Web应用程序都实现某种数据库,而SQL是最常用的查询数据库的语言。 在SQL注入(SQLi)攻击中,
攻击者试图通过注入表单中的SQL命令来发送更改的查询,从而滥用应用程序和数据库之间的通信
用于在服务器中构建SQL语句的请求中的输入或任何其他参数。
在本文中,我们将测试Web应用程序的输入,以查看它是否容易受到基于错误的SQLi的攻击
实战演练
登录到DVWA,转到SQL注入,并检查安全级别是否低:
1.与之前的方法一样,让我们通过引入一个数字来测试应用程序的正常行为。将用户ID设置为1,然后单击“提交”。 通过查看结果,我们可以说应用程序查询数据库以查看是否存在ID等于1的用户并返回该用户的ID,名称和姓氏。
2.接下来,我们必须测试如果发送应用程序不期望的内容会发生什么。在文本框中引入1'并提交该ID。 如以下屏幕截图所示,应用程序应响应错误:
此错误消息告诉我们数据库收到错误形成的查询。 这并不意味着我们可以确定这里有SQLi,但很可能这个应用程序很容易受到攻击。
3.返回DVWA SQLInjection页面。
4.为了确保存在基于错误的SQLi,我们尝试另一个输入:1''(这次是两个撇号):
这次没有错误。 这证实了应用程序中存在SQLi漏洞。
5.现在我们将执行一个非常基本的SQLi攻击。 在文本框中引入'或'1'='1并提交。结果应如下所示:
看起来我们刚刚在数据库中注册了所有用户。
原理剖析
在用于形成数据库查询之前,未对输入进行验证和清理时会发生SQLi。 让我们假设应用程序中的服务器端代码(在PHP中)组成查询,如下所示:
$query = "SELECT * FROM users WHEREid='".$_GET['id']. "'";
这意味着id参数中发送的数据将按原样集成在查询中。如果我们用它的值替换参数引用,我们有:
$query = "SELECT * FROM users WHEREid='"."1". "'";
因此,当我们像我们一样发送恶意输入时,PHP解释器将按如下方式读取代码行:
$query = "SELECT * FROM users WHERE id='"."' or'1'='1"."'";
结果SQL语句如下所示:
$query = "SELECT * FROM users WHERE id='' or '1'='1'";
这意味着如果用户id等于no或1 = 1,则从名为users的表中选择所有内容; 由于一个总是等于一个,所有用户都将满足这些标准。 首先我们发送的撇号关闭原始代码中打开的那个。 之后,我们可以引入一些SQL代码,最后一个没有关闭撇号的代码使用一个已经设置在服务器的代码中。这被称为基于错误的SQLi,并且是SQLi的最基本形式,因为我们使用错误消息来确定我们是否已经使用我们的注入形成了有效查询,并且结果直接显示在应用程序的输出中。
更多…
与简单地显示应用程序的用户名相比,SQLi攻击可能造成更大的破坏。通过利用这种漏洞,攻击者可能会泄露各种漏洞
有关用户的敏感信息,例如联系方式和信用卡号。 也可能危及整个服务器,并能够执行命令并升级其中的权限。此外,攻击者可能能够从数据库中提取所有信息,包括数据库和系统用户,密码,以及根据服务器和内部网络配置,SQLi漏洞可能是完整网络和内部基础结构的入口点。
赞赏老哥一瓶大可乐+大鸡腿吧!,赞赏码:
--------------------------------------------------------------------
更多精彩内容,关注玄魂工作室
Kali Linux Web渗透测试手册(第二版) - 6.2 - 文件包含和文件上传
原文始发于微信公众号(玄魂工作室):Kali Linux Web渗透测试手册(第二版) - 6.3 - 手动识别SQL注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论