一、XSS原理
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。[1]百度百科
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,
俗称的见框就插。个人理解,由于HTML的标签特性,可以通过网页的输入框输入脚本代码,使网页执行恶意脚本,达到攻击的目的。
二、XSS分类
1.反射型XSS
反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。[3]XSS注入的原理与利用 Hunter-J
会在网页直接执行的XSS漏洞,不会储存至服务器,危害较小。
例如:
网页源码如下
<?php
echo $_GET["id"];
?>
当传参没有经过任何过滤,会使脚本嵌入到网页中进而执行。
注:alert()是HTML中的一个弹窗函数。
2.储存型XSS
存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这是存储型XSS。[4]XSS注入的原理与利用 Hunter-J
三、XSS实战
实践靶场:http://xss.fbisb.com/yx/level1.php?name=test
第一题:
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level2.php?keyword=test";
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户</h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:0</h3></body>
</html>
查阅相关资料发现,window.alert() = funtion()这句话的相当于重写alert()函数,在执行alert()会执行脚本中的代码,进入下一关level2.php?keyword=test。所以只要利用XSS漏洞让网页执行alert()方法即可。
观察网页的url,可以发现有?name=test,而页面中会显示欢迎用户test的字样。也就是说name参数可以用于注入。
第二题:
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level3.php?writing=wait";
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和test相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword value="test">
<input type=submit name=submit value="搜索"/>
</form>
</center><center><img src=level2.png></center>
<h3 align=center>payload的长度:4</h3></body>
</html>
可以看出依旧是执行alert()函数后进入下一关,故技重施一番
观察源码,15行中,尖角号<>变成了<、>,查阅资料后发现这是html的转义字符,把尖角号<>过滤掉了。但是在第17行value的值中,<>没有被过滤。查阅资料后发现可以使input标签提前结束,然后执行脚本。
- 总结:XSS漏洞需要一定的代码审计能力,需要熟练掌握HTML的特性,才能攻击成功。
注:本文只是一个小白的学习笔记!!!单纯用于记录和整理知识点,如有错误请指正:)
参考资料: