第二篇 原理篇(2)上传 xss
解析漏洞
IIS6.0在解析文件时存在以下两个解析漏洞。
1.当建立*.asa、 *.asp 格式的文件夹时,其目录下的任意文件都将被IIs当作asp文件来解析。
2.当文件为* .asp;1.jpg时,IIS 6.0同样会以ASP脚本来执行
Apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后向前解析,直到碰到认识的扩展名为止,如果都不认识,则会暴露其源代码。
绕过客户端检测
当单击“提交”按钮后, Form表单将会触发onsubmit事件, onsubmit事件将会调用checkFile函数。checkFile 函数将会检测文件扩展名是否合法,并返回一个布尔值。如果checkFile函数返回true,则表单提交,反之,将弹出对话框提示“文件不合法",文件将无法提交到服务器。
1.使用firebug删除onsubmit事件
2.使用burpsuite修改扩展名,在HTTP协议中有请求头Content-Length,代表实体正文长度,如果此时的filename 修改也就意味着实体正文长度增加或者减少了,这时就应该修改Content-Length请求头
绕过服务器检测
黑名单:1.大小写
2.从黑名单中找到Web开发人员忽略的扩展名
3.在Windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动去除“.”与空格,利用此特性也可以绕过黑名单验证。
白名单
mime验证
目录验证 在文件上传时,程序通常允许用户将文件放到指定的目录中,然而有些Web开发人员为了让代码更“健壮”,通常会做-一个操作,如果指定的目录存在,就将文件写入目录中,不存在则先建立目录,然后写入
截断上传攻击
文本编辑器上传漏洞
敏感信息暴露 黑名单策略错误 任意文件上传漏洞
上传漏洞最终的形成原因主要有以下两点:
1.目录过滤不严,攻击者可能建立畸形目录:
2.文件未重命名,攻击者可能利用Web容器解析漏洞。
修复
1.接收文件及其文件临时路径。
2.获取扩展名与白名单做对比,如果没有命令,程序退出。
3.对文件进行重命名。
xss类型
反射型
存储型(持久型)
DOM XSS全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。
通过JavaScript可以重构整个HTML页面,而要重构页面或者页面中的某个对象,JavaScript就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每个成分都是一一个节点。
DOM的规定如下。
1.整个文档是一一个文档节点;
2.每个HTML标签是-一个元素节点:
3.包含在HTML元素中的文本是文本节点:
4.每一个HTML属性是一个属性节点:
5.节点与节点之间都有等级关系。
HTML的标签都是-一个个节点,而这些节点组成了DOM的整体结构:节点树
检测xss
手工检测
1.可得知输出位置
输入一些敏感字符,例如“<、>、”、’、()”等,在提交请求后查看HTML源代码,看这 <些输入的字符是否被转义。
在输出这些敏感字符时,很有可能程序已经做了过滤,这样在寻找这些字符时就不太容易,这时可以输入“AAAAA<>"”&"字符串,然后在查找源代码的时候直接查找AAAAA或许比较方便。
2.无法得知输出位置
非常多的Web应用程序源代码是不对外公开的,这时在测试Xss时就有可能无法得知输入数据到底在何处显示,比如,测试某留言本是否存在xss,那么在留言之后,可能需要经过管理员的审核才能显示,这时无法得知输入的数据在后台管理页面处于何种状态,例如:
在<div>标签中: <div>XSS Test </div>
在<input>标签中: <input type="text" name="content" value= "XSS Test" 1>
对于这种情况,通常会采用输入“”/>XSs Test"来测试。
软件自动检测
xss利用
xss会话劫持
xss framework
xss getshell
xss 蠕虫
修复
htmlspecialchars()、 htmlentities0函 数可以把一些预定义的字符转换为HTML实体。
& (和号)成为&:
”(双引号)成为" <
' (单引号)成为'
< (小于)成为&It;
> (大于)成为>。
编码(HTML css js)
httponly阻止客户端脚本访问cookie