xss漏洞
8.1 什么是XSS
攻击者在网页中插入恶意的js脚本,由于网站没有对其过滤,当用户浏览时,就触发了js脚本,造成了xss攻击。
8.2 XSS危害
1. 窃取 Cookie
2. 未授权操作
3. 按键记录和钓鱼
8.3 XSS分类
1)反射性XSS(非持久型)
特点:
1.payload会出现在url参数或者是post请求包中
2.插入的payload经服务器处理之后返回给浏览器
3.浏览器渲染返回的数据 从而触发xss
2)储存形XSS(持久型)
(相对于反射型xss 而言此时存储型xss不需要携带payload也可以执行对应的js语句)
1.需要往数据库里写入xss对应的payload
2.访问特定页面 服务器主动从数据库读取写入的payload 在响应包中返回
3.浏览器渲染返回的数据 从而触发xss
3)DOM
1.dom型xss 输入的payload 无法通过查看源代码获取
2.dom型xss 无需服务器的参与 依赖前端的参与
4)反射型xss 与 存储型xss 的异同?
1. 反射型xss 无需数据库的参与 存储型需要经过数据库的读写
2. 反射型xss payload url或者请求包中 存储型无需
同: 都需要服务器 处理并且最终将响应包由浏览器渲染加载
8.3 防御
8.3.1对客户端提交过来的数据进行过滤,转义,正则校验。
8.3.2 使用相关的函数
1. addslashes 转义’”& null 等字符
2. htmlspecialchars(string) 对 ‘”<>& 实体化,函数把一些预定义的字符转换为 HTML 实体。
3. Httponly
4. 输入内容长度限制
8.4 绕过
8.4.1 大小写绕过
8.4.2 双写绕过
8.4.3 Unicode编码绕过
8.4.4 进制转换
十六进制
八进制
8.4.5 base64绕过
文件上传
9.1 什么是文件上传漏洞
未对上传的文件进行严格的验证和过滤,我们通过抓包修改数据包或者其他手段上传一个可执行的动态脚本文件。比如:木马,病毒,恶意脚本或者WebShell等。如果上传成功就可以使用菜刀、蚁剑之类的工具链接这个脚本,从而达到控制网站的目的!
如何去找文件包含漏洞?
在某一个页面中,一个变量的值等于一个页面文件或者是一个固定的值,如
?page=a.asp
?home=b.html
?file=content
9.2 如果本地不能上传文件,如何去利用包含漏洞?
找到日志存放位置,包含日志文件,包含session文件
9.3 绕过
1.前段js校验,上传正常的文件名,然后直接抓包,修改
2.mime类型 ===> content-type 校验(直接修改文件上传包的content-type为指定的字段即可)
3. 黑名单的绕过
3.1.尝试大小写绕过
3.2.尝试使用不同的文件拓展名 .php3 .php4 .phtml
3.3.利用windows 后缀的特性 当文件名以. 或者是 (space) 结尾 此时windows 操作系统会自动
去除对应的.以及space
3.4.利用::$DATA协议 当windows 写入一个以::$DATA结尾的文件时 此时windows操作系统
会自动去除末尾的::$DATA
3.5. .htaccess 控制对应的文件的解析
3.6. %00截断 5.4及以下版本
3.7. apache解析 1.php.hello
3.8. /.绕过
4.白名单
利用解析漏洞
尝试利用文件包含漏洞
条件竞争
4.1服务器解析相关的漏洞 (中间件相关的漏洞) :
4.1.1. apache 解析漏洞 从右往左进行解析 直到解析到能够识别的后缀名
4.1.2.iis
iis 6.0
文件夹以.asp .asa .cer .cdx 作为结尾的 此时该目录下优先当作asp解析
文件名中包含 .asp; .asa; .cer; .cdx; 此时该文件优先当作asp解析
iis 7.0/7.5
类似于nginx 在文件名后追加 /xxx.php 此时 会将文件优先当作php来解析
4.1.3.nginx
在文件名后追加 /xxx.php 此时 会将文件优先当作php来解析
在低版本的php 中 可以通过%00.php将文件解析
4.1.4.按照asp来解析
文件名中包含.asp; .asa; .cer; .cdx; 此时不管该文件后缀名为何 都优先按照asp类解 析
iis 7.0/7.5 形如nginx 解析 访问文件 xxx.jpg/任意名称.php 此时 会将文件当作php 来解析
9.4 防御
1 对上传的文件在服务器上存储时进行重命名
2 检查上传文件的类型和大小
3 禁止上传危险的文件类型
4 只接收指定类型的文件
5 上传文件做日志记录
6 上传文件要保存的文件名和目录名由系统根据时间生成,不允许用户自定义