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漏洞,不会储存至服务器,危害较小。
例如:
网页源码如下

<?php
	echo $_GET["id"];
?>

反射型XSS
当传参没有经过任何过滤,会使脚本嵌入到网页中进而执行。
反射型XSS
注: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

第一题:

![第一题](https://img-blog.csdnimg.cn/20200802160151893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L09ic19jdXJl,size_16,color_FFFFFF,t_70

<!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()函数后进入下一关,故技重施一番
第二题注入测试1
观察源码,15行中,尖角号<>变成了&lt、&gt,查阅资料后发现这是html的转义字符,把尖角号<>过滤掉了。但是在第17行value的值中,<>没有被过滤。查阅资料后发现可以使input标签提前结束,然后执行脚本。

第二题注入测试2
第二题注入成功

  • 总结:XSS漏洞需要一定的代码审计能力,需要熟练掌握HTML的特性,才能攻击成功。
注:本文只是一个小白的学习笔记!!!单纯用于记录和整理知识点,如有错误请指正:)

参考资料:

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值