我正在学习 XSS 攻击。维基百科说,在非持久性攻击中,攻击者可能会提供一个看似无辜的 URL,“指向一个受信任的站点,但实际上有一个 XSS 向量”。这会是什么样子?有人可以提供一个例子吗?
如何将恶意代码注入看似无辜的 URL?
不久前,我写了一篇关于 iOS 的 Safari Mobile 浏览器中的安全漏洞的博客。这几乎可以让您屏蔽 URL。我相信这个漏洞在 iOS 5.2 中得到了修复,而我所知道的事实漏洞在 iOS 6.x 中不再可用。但简而言之,人们可以在某些类型的网络浏览器中找到此类安全漏洞,然后利用它们来发挥自己的优势。在 iOS 的情况下,这几乎只是在 iframe 中使用一些草率的 JavaScript 的情况。像下面这样。
<script type="text/javascript">
document.getElementById('one').onclick = function() {
myWindow = window.open('http://www.apple.com', 'eintitel', 'width=200,height=100,location=yes');
myWindow.document.write("<html><head></head><body><iframe src=\"http://techmeout.org\");></iframe></scri+pt></body></html>");
myWindow.focus();
return false;
}
</script>
如您所见,有两个 URL:http://www.apple.com和my blog。在某些移动 Apple 设备上查看时,您会在地址栏中看到 www.apple.com,但看到的是我的博客内容,而不是 Apple 的网站。
攻击者可以使用像 bit.ly 这样的 URL 缩短服务:
http://bit.ly/114E7Q5
XSS 网站来自http://www.xssed.com/!
如果是网络钓鱼攻击并且 URL 很重要,那么攻击者可以对关键字符进行 URL 编码或 UTF-8 编码以隐藏 HTML 标签。无论如何,大多数人都会忽略长网址。
跨站点脚本基本上是可以为您或每个人在页面上输入的代码。这就是非持久性 XSS 和持久性 XSS 的区别。
持久性 XSS 的示例如下(您需要脚本标签):
http://www.example.com/post.php?=[在页面上发布数据]
http://www.example.com/post.php?= alert('XSS')
如果这被存储在数据库中并发布在页面上,那么每个人都会看到一个 JavaScript 警报。
非持久性 XSS 的示例如下(您需要脚本标签):
http://www.example.com/search.php?=[在页面上发布数据,仅用于此查询]
http://www.example.com/search.php?= alert('XSS')
只有在该 URL 中有帖子数据的人才能看到您的警报,因为它没有被存储。
这与 XSS 攻击无关,但值得一提的是 UNICODE 镜像字符,它使无辜的 url 具有潜在危险。
http://elgoog.im/search?q=moc.elgoog.www://ptth
如果你检查这个答案的源代码,你会看到代码是:
‮http://elgoog.im/search?q=moc.elgoog.www://ptth
这可用于重定向到潜在的不良网站。
此外,如果您无法单击链接,则必须复制并粘贴它。没有人会手动输入!
http://elgoog.im/search?q=moc.elgoog.www://ptth
注意:镜像角色不镜像网页!