WEB漏洞—XSS跨站之代码及httponly绕过

WEB漏洞—XSS跨站之代码及httponly绕过
Yatming的博客WEB漏洞—XSS跨站之代码及httponly绕过
什么是cookie,和Session的区别又是什么
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。Cookie 一般用来保存用户信息 比如
①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你填写登录的一些基本信息;
②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);
③登录一次网站后访问网站其他页面不需要重新登录。Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的Session 之后就可以标识这个用户并且跟踪这个用户了。Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如果使用 Cookie的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
什么是HttpOnly?
如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。XSS全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
HttpOnly的设置样例
javaee
1 | response.setHeader("Set-Cookie", "cookiename=value; Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly"); |
具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取Cookie cookies[]=request.getCookies();
C#
1 | HttpCookie myCookie = new HttpCookie("myCookie"); myCookie.HttpOnly = true;Response.AppendCookie(myCookie); |
VB.NET
1 | Dim myCookie As HttpCookie = new HttpCookie("myCookie") myCookie.HttpOnly = True Response.AppendCookie(myCookie) |
但是在 .NET 1.1 ,中您需要手动添加
1 | Response.Cookies[cookie].Path += ";HTTPOnly"; |
PHP4
1 | header("Set-Cookie: hidden=value; httpOnly"); |
PHP5
1 | setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE) |
最后一个参数为HttpOnly属性
1 | 参考链接 |
PHP中的设置
PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中
1 | session.cookie_httponly = |
设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:
1 | ini_set("session.cookie_httponly", 1); |
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
1 | setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); |
对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了:
1 | header("Set-Cookie: hidden=value; httpOnly"); |
绕过:httponly:
浏览器未保存账号密码,需要xss产生登录地址,利用表单劫持
浏览器保存账号密码:产生在后台的xss,存储型xss如留言等,浏览器读取账号密码
表单劫持(抓包分析):相当于将admin和密码123456再发送一份到XSS平台。(条件1:明文密码;条件2:登录框存在跨站(XSS存在于登录框才行,比较鸡肋))
绕过httponly:
1 | 浏览器未保存账号密码,需要xss产生登陆地址,利用表单劫持 |
淡然点图标系统没有。。有尝试用其他cms,但是我一插入这个XSS攻击代码就打不开首页了。所以这里理论讲解
有http—only,这里就获取不到cookie了
这个是防止cookie被读取,而不是防止跨站攻击。
写一个弹窗语句,刷新,成功弹窗
登陆后台两种形式:获取管理员cookie,用管理员的cookie进行登陆,还有一种就是直接账号和密码登陆
将这个攻击语句写到后台的登陆框代码中,然后用burp抓包,如下图,可以看到是可以转到明文的账号和密码的
当然鸡肋的地方也很明显就是需要,这个后台登陆的地方有跨站攻击,或者你可以用其他办法可以截取到这个后台登陆的数据包
XSS平台配置
——————————————————————————————————花了2块大洋在淘宝上买了这个源码
什么是HTTP—only
1 | 如果你在cookie中设置了http--only属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止xss攻击,具体一点的介绍请google进行搜索 |
这个属性是防止攻击者读取不到cookie,而不是防止xss攻击
写入代码
1 | ini_set("session.cookie_httponly", 1); |
这里已经对xss发出了访问,查看xss平台
登陆窗口同样是可以获取到
不知道为啥这里我还可以获取到,使用第二种方法,在php.ini中进行修改
有进行访问
但是还是可以获取到cookie,放弃QWQ
这里靶场同样是写到靶场的专栏里所以这里不做记录