CTF学习笔记——XSS攻击

一、XSS原理

跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。[1]百度百科

HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,与之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。[2]百度百科

俗称的见框就插。个人理解,由于HTML的标签特性,可以通过网页的输入框输入脚本代码,使网页执行恶意脚本,达到攻击的目的。

二、XSS分类

1.反射型XSS

反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。[3]XSS注入的原理与利用 Hunter-J

会在网页直接执行的XSS漏洞,不会储存至服务器,危害较小。
例如:
网页源码如下


	echo $_GET["id"];
?>

反射型XSS
当传参没有经过任何过滤,会使脚本嵌入到网页中进而执行。
CTF学习笔记——XSS攻击_第1张图片
注: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

第一题:

CTF学习笔记——XSS攻击_第2张图片

<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>欢迎来到level1title>
head>
<body>
<h1 align=center>欢迎来到level1h1>
<h2 align=center>欢迎用户h2><center><img src=level1.png>center>
<h3 align=center>payload的长度:0h3>body>
html>

查阅相关资料发现,window.alert() = funtion()这句话的相当于重写alert()函数,在执行alert()会执行脚本中的代码,进入下一关level2.php?keyword=test。所以只要利用XSS漏洞让网页执行alert()方法即可。

观察网页的url,可以发现有?name=test,而页面中会显示欢迎用户test的字样。也就是说name参数可以用于注入。
CTF学习笔记——XSS攻击_第3张图片
CTF学习笔记——XSS攻击_第4张图片

第二题:

CTF学习笔记——XSS攻击_第5张图片

<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>欢迎来到level2title>
head>
<body>
<h1 align=center>欢迎来到level2h1>
<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的长度:4h3>body>
html>

可以看出依旧是执行alert()函数后进入下一关,故技重施一番
CTF学习笔记——XSS攻击_第6张图片
观察源码,15行中,尖角号<>变成了<、>,查阅资料后发现这是html的转义字符,把尖角号<>过滤掉了。但是在第17行value的值中,<>没有被过滤。查阅资料后发现可以使input标签提前结束,然后执行脚本。

CTF学习笔记——XSS攻击_第7张图片
CTF学习笔记——XSS攻击_第8张图片

  • 总结:XSS漏洞需要一定的代码审计能力,需要熟练掌握HTML的特性,才能攻击成功。

注:本文只是一个小白的学习笔记!!!单纯用于记录和整理知识点,如有错误请指正:)

参考资料:

  • XSS攻击_百度百科
  • 初级安全入门——XSS注入的原理与利用 - Hunter-J - 博客园
  • 一个XSS靶场练习记录_垃圾管理员的垃圾站-CSDN博客_xss靶场

你可能感兴趣的:(html)