Web渗透测试漏洞手册及修复建议
0x0 配置管理
0x01 HTTP方法测试
- 漏洞介绍:
目标服务器启用了不安全的传输方法,如PUT、DELETE等,这些方法表示可能在服务器上使用了 WebDAV,由于dav方法允许客户端操纵服务器上的文件,如上传、修改、删除相关文件等危险操作,如果没有合理配置dav,有可能允许未授权的用户对其进行利用,修改服务器上的文件。
- 修复建议:
1、关闭不安全的传输方法,只开启POST、GET方法。
2、如果服务器不使用 WebDAV 可直接禁用,或为允许webdav的目录配置严格的访问权限,如认证方法,认证需要的用户名,密码。"
0x02 点击劫持
- 漏洞描述:
点击劫持是一种视觉上的欺骗手段,攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户在不知情的情况下点击了透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上,攻击者常常配合社工手段完成攻击。
- 修复建议:
"X-FRAME-OPTIONS是目前最可靠的方法。X-FRAME-OPTIONS是微软提出的一个http头,专门用来防御利用iframe嵌套的点击劫持攻击。并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。
这个头有三个值:
DENY:拒绝任何域加载
SAMEORIGIN:允许同源域下加载
ALLOW-FROM:可以定义允许frame加载的页面地址"
0x03 后台页面公网暴露
- 漏洞描述:
应用存在未限制公网访问的后台,攻击者可通过登录网站管理后台篡改页面,或利用上传功能上传webshell,导致服务器被控制。
- 修复建议:
建议在不影响业务的前提下,将管理后台隐藏在非常规目录下或增加管理后台的访问限制。
0x1 授权管理
0x11 目录穿越
漏洞描述:
目录穿越的目的旨在访问存在在网站根目录外面的文件或目录。通过浏览应用,攻击者可以寻找存储在 Web 服务器上的其他文件的相对路径,从而获取系统配置、数据库账号密码等敏感信息,为进一步攻击提供支持。修复建议:
1、对用户可控参数地输入进行过滤,禁止用户输入../等恶意字符。
2、文件ID使用随机数命名
3、文件路径保存至数据库,前端传入对应ID,后端进行匹配,防止篡改。
0x12 水平越权
漏洞描述:
攻击者在获得同一级别用户帐号后,可以利用一些方式绕过权限检查,访问或者操作到同一级别其他账户信息。修复建议:
在系统中,加入用户身份认证机制或者tonken验证,防止可被直接链接就可访问到用户的功能进行操作。
0x13 垂直越权
- 漏洞描述:
攻击者在获得低权限用户帐户后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。
- 修复建议:
1、对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作。
2、在服务端对请求的数据和当前用户身份做校验检查。
0x14 未授权访问
- 漏洞描述:
攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。
- 修复建议:
在系统中,加入用户身份认证机制或者tonken验证,防止可被直接链接就可访问到用户的功能进行操作。
0x2 逻辑漏洞
0x21 任意用户注册
- 漏洞描述:
攻击者可绕过注册界面认证措施失效导致任意用户注册。如:批量用户注册可领取新用户红包进行”薅羊毛“。
- 修复建议:
根据具体绕过方式提出修复建议。
0x22 短信轰炸
- 漏洞描述:
攻击者通过网站页面中所提供的发送短信验证码的功能处,通过对其发送数据包的内容获取后,进行重放,如果服务器短信平台未做校验的情况时,系统会一直发送短信,造成短信轰炸。
- 修复建议:
1、合理配置后台短信服务器的功能,对于同一手机号码,发送次数不超过3-5次,并且可对发送的时间间隔做限制。
2、页面前端代码编写时,加入禁止针对同一手机号进行的次数大于N次的发送,或者在页面中加入验证码功能,并且限制发送的时间间隔。
3、数据包内增加时间戳机制,防止数据包重放攻击。
0x23 会话标识固定
- 漏洞描述:
在用户进入登录页面,但还未登录时,即产生了一个session,用户登录后,session的id未改变。
即系统在登录后没有建立新session,原来的session也没有被销毁。攻击者事先访问系统并建立一个会话,诱使受害者使用此会话登录系统,然后攻击者再使用该会话访问系统即可登录受害者的账户。
- 修复建议:
在用户提供的认证信息(例如用户名和密码)、相应的权限级别发生变化时,服务器端应重新生成SessionID,并强制失效之前的会话。
0x3 输入输出验证
0x31 存储型跨站脚本攻击
漏洞描述:
跨站脚本攻击,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。修复建议:
1、输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。
2、输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。
3、明确指定输出的编码方式:不要允许攻击者为你的用户选择编码方式(如ISO 8859-1或 UTF 8)
4、注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如""<"" "">""或类似""script""的关键字),很容易被XSS变种攻击绕过验证机制。
0x32 SQL注入
漏洞描述:
攻击者将(恶意)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。修复建议:
1、使用预编译处理输入参数:要防御 SQL 注入,用户的输入就不能直接嵌套在 SQL 语句当中。使用参数化的语句,用户的输入就被限制于一个参数当中。
2、输入验证:检查用户输入的合法性,以确保输入的内容为正常的数据。
3、错误消息处理:防范 SQL 注入,还要避免出现一些详细的错误消息,恶意攻击者往往会利用这些报错信息来判断后台 SQL 的拼接形式。
0x33 XML外部实体注入
漏洞描述:
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。发现目前一些普遍使用xml的场景中都存在一种古老的XML实体注入漏洞,使得攻击者可能可以任意访问服务器以及应用所在网络的任何资源。修复建议:
1、严格检查用户输入的字符
2、检查使用的底层XML解析库,使用JAVA语言提供的禁用外部实体的方法:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false)
3.、操作XML时对格式字符进行转义处理
0x34 代码注入
漏洞描述:
代码注入可以向系统可执行脚本中写入一句话木马,攻击者可以构造payload访问被写入文件执行系统命令,则该脚本即成为后门文件。修复建议:
对传入参数进行严格控制,过滤特殊字符、重点关注writeconfig()等写入函数。
0x35 任意文件上传
漏洞描述:
文件上传为系统本身的功能需要但是上传文件类型如果没有经过严格过滤措施就会导致攻击者上传恶意脚本、木马病毒。进而使攻击者获得控制服务器权限。修复建议:
1、将文件上传目录直接设置为不可执行。
2、文件类型检查:建议使用白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码。
3、 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件。
0x35 任意文件下载
漏洞描述:
文件下载为系统本身的功能需要但是下传文件类型、范围如果么有严格控制则会导致任意文件下载。
攻击者可结合目录穿越漏洞下载系统配置文件,导致严重的敏感信息泄露。修复建议:
1、净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2、限制用户下载文件类型、范围。
3、不允许提供目录浏览服务。"
0x36 文件包含
漏洞描述:
文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他恶意文件,导致了执行非预期代码同时攻击者可以读取系统配置文件获取数据库密码。修复建议:
1、严格检查变量是否初始化。
2、严格控制文件包含参数是否可控,同时过滤特殊字符。参数中不允许出现../类似的跳转字符。
3、同时系统对于PHP伪协议进行过滤和限制。
0x4 写在最后
马上就要放年假了,即将开启新的一年。引用tools的一句话来勉励自己。
- “潜心习安全,低调求发展。”