XSS防御函数
htmlentities() 函数
把字符转换为 HTML 实体:
<?php
$str = "<? W3S?h????>";
echo htmlentities($str);
?>
<?php
$str = "Bill & 'Steve'";
echo htmlentities($str, ENT_COMPAT); // 只转换双引号
echo "<br>";
echo htmlentities($str, ENT_QUOTES); // 转换双引号和单引号
echo "<br>";
echo htmlentities($str, ENT_NOQUOTES); // 不转换任何引号
?>
XSS挖掘流程
黑盒挖掘
- 直接像渗透一样挖掘即可,因为XSS通常是可以黑盒挖掘出来的
白盒挖掘
漏洞产生条件
- 用户输入参数:GET POST …
- 函数
- 输入到输出是否有过滤?
漏洞爱产生的位置
- 发文章处
- 回复评论处
- 用户昵称签名处
- 注册修改资料处
- …
DVWA白盒挖掘演练
储存型
基本流程
- 寻找未过滤的输入点,和未过滤的输出函数
- 寻找最终输出点
- 可以猜,或者老老实实哪里有操作过这个数据,使用表名,字段名去代码里搜
- 观察可能出现xss漏洞的目录
-
寻找未过滤的输入点,和未过滤的输出函数
-
可以看到过滤不完整,只过滤了一个变量
-
并且向表guestbook中插入数据
-
所以该处存在漏洞
- 寻找最终的输出点,因为最终的输出点可能完全不在一个业务流上
- 所以我们可以使用表名,字段名,去代码里搜索
- 图中随便打开一个
- 可以看到该位置最终输出了用户输入的参数
- 看第二个框,他有条件的,如果安全级别为impossible,则都过滤一下
- 所以得出结论:我们一定要追踪到最后的输出点,否则你不知道他到底过滤没
- 第三个框则是输出到html里面了
所以我们可以根据条件,判断,输入到输出到底过滤没,到底用了什么过滤,是否可以用什么方法绕过,这比黑盒审计更方便,因为我们知道了过滤规则,直接上相应的方法即可
反射型
基本流程
- 寻找带有未过滤的参数,且这些参数传到输出函数
- 根据输出函数对输出内容回溯输入参数,观察是否过滤
- 输出函数列表: print,print_r, echo, printf, sprintf, die ,var_dump, var_export
初级
-
存在输出函数echo
-
输出函数中包含输入参数,回溯
-
该函数参数输入到输出没有任何过滤
中级
- 存在输出函数echo
- 输出函数中包含输入参数,回溯
- 该函数参数输入到输出吧script过滤为空
- 但是可以用 其他标签绕过,过滤不完整,如onclick
高级
- 存在输出函数echo
- 输出函数中包含输入参数,回溯
- 该函数参数输入到输出用正则吧script和周围过滤为空
- 但是可以用 其他标签绕过,过滤不完整,如onclick
安全级别
- 输出函数中包含输入参数,回溯
- 该函数参数输入到输出 用htmlspecialchars实体化
- 安全
xss利用姿势复习
利用姿势
由于利用姿势很多,这里只复习一下获取cookies
获取cookies
- 首先我们要获取登陆后的页面
- 将cookie攻击语句的payload插入到存在xss漏洞的位置
写一个接受cookie的平台
- 获取到cookie以后
- 使用firebug输入cookie
- 然后再访问登陆后的页面就直接登陆上去了