xss漏洞
个人观点,若有误请指教
pikachu靶场(链接:https://pan.baidu.com/s/1zVfP-WrvT5Tnny24AEXccg 提取码:lzjy)
注:初始化时访问install.php即可。靶场来自https://github.com/zhuifengshaonianhanlu/pikachu
Burp Suite(自寻教程安装)
<div id="xssd_main">
<script>
//可以看出当点击click me!按钮时,会调用domxss方法进行更改页面
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "what do you see?";
}
script>
<input id="text" name="text" type="text" value="" />
<input id="button" type="button" value="click me!" onclick="domxss()" />
<div id="dom">div>
div>
<div id="xssd_main">
<script>
function domxss(){
// str为text=3
var str = window.location.search;
// 以text=为分隔符,取出第二个数(3),再使用decodeURIComponent进行解码
var txss = decodeURIComponent(str.split("text=")[1]);
// 将全部+替换成空格
var xss = txss.replace(/\+/g,' ');
//在当前html页面所在目录下寻找xss文件
document.getElementById("dom").innerHTML = "就让往事都随风,都随风吧";
}
script>
<form method="get">
<input id="text" name="text" type="text" value="" />
<input id="submit" type="submit" value="请说出你的伤心往事"/>
form>
<div id="dom">div>
div>
<a href='#' onclick='domxss()'>有些费尽心机想要忘记的事情,后来真的就忘掉了a>
' onclick="alert('xss')">
)xss平台:https://xsshs.cn/xss.php?do=login
postman:https://app.getpostman.com/app/download/win64
Kali中的Beef(安装教程:https://blog.csdn.net/weixin_43847838/article/details/110312851)
代码过滤有以下几种:
① 对特殊字符进行转义,例如"、’、<、>、空格、&、/等
② 对关键字进行过滤,如常见的script、alert、onclick、onerror等
③ 对用户交互数据进行矫正,根据自己业务需求,对用户输入的数据是否符合规范进行判断
代码过滤一般发生在输入或者输出时。(可以输入输出一起使用,也可以只在其中一个使用。)
PHP中的设置
① PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中将session.cookie_httponly 设置为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:
ini_set("session.cookie_httponly", 1);
// or
session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
?>
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
//如看不懂 可以百度一下下面的函数参数代表的含义
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
② 对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了:
header("Set-Cookie: hidden=value; httpOnly");
?>
response.setHeader("Set-Cookie", "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");
设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取
Cookie cookies[]=request.getCookies();
该部分内容转自此博客
该绕过是指确保用户想输入到网页的东西不被后端给过滤掉。(网页一般流程:用户输入-后端-前端)
过滤空格
用/代替空格
过滤关键字
①大小写绕过
②双写关键字(利用有些检查只检查一次)
③字符拼接
//利用eval
//利用top
④其它字符混淆
可利用注释、标签的优先级等
1.<
2.
>
//因为title标签的优先级比img的高,所以会先闭合title,从而导致前面的img标签无效
3.
注:使用其它字符去混淆我们注入的代码
⑤编码绕过
1.Unicode编码绕过(编码转换:https://tool.oschina.net/encode 第一个为Unicode 第二个为ASCll)
2.url编码绕过
//unescape为解码函数
//代码含义:https://www.cnblogs.com/soleyy/p/7158976.html
3.Ascii码绕过
4.hex绕过(16进制)
5.八进制
6.base64绕过
过滤双引号,单引号
①使用反引号代替单双引号
②使用编码绕过(与上面的基本一致)
过滤括号
过滤url地址
①使用url编码
②使用IP
1.十进制IP
2.八进制IP
3.hex
4.html标签中用//可以代替http://
5.使用\\
但是要注意在windows下\本身就有特殊用途,是一个path 的写法,所以\\在Windows下是file协议,在linux下才会是当前域的协议
6.使用中文逗号代替英文逗号
如果你在你在域名中输入中文句号浏览器会自动转化成英文的逗号
//会自动跳转到百度
登录的方式:
①获得cookie进行登录(设置http only之后,该方法直接废掉)
②获得账号与密码(这也是绕过的方式)
绕过也分为两种(个人尝试许久未能成功、只能观看他人的实操):
①保存读取(浏览器保存了账号和密码的情况):植入盗取账号和密码的XSS,例如存储型XSS。
②没保存读取(浏览器没保存了账号和密码的情况):需要xss产生于登录地址,利用表单劫持。
常见的绕过思路
①标签语法替换
②特殊符号干扰(/ #等)
注:图片没有加载出来,不知道是什么问题o(╥﹏╥)o,不过换成其他关卡,有些图片会出现。
③提交方式更改
④垃圾数据溢出
看他人的博客,写的基本上都是一些垃圾数据加#号来绕过,(⊙o⊙)…,但本人尝试了直接#号也能绕过(这不是特殊符号干扰嘛?),无法理解,望指点!!!
⑤加密解密算法
这里应该是针对标签里面的属性的值,如alert、JavaScript被拦截的。那么就可以编码绕过了,与上面的代码过滤中的编码绕过一致。
⑥结合其他漏洞绕过
如XSS和crsf结合等等,不懂不懂。
python xsstrike.py -u "http://xss.test/level.php?name=" --fuzzer (该模糊器旨在测试过滤器和Web应用程序防火墙。name值有没有都无所谓)
python xsstrike.py -u "http://xss.test/level1.php?name=