《Web漏洞搜索》
备注: 讲了一下跟挖漏洞相关的建议,还有一些实例
开始日期: December 23, 2022 5:09 PM
状态: 已完成
开放式重定向
简述:通过改变GET请求中包含可以控制的重定向网址,将网站重定向到我们想要的地方。
挖掘思路:
重点关注特定名称的url参数,如:url=,redirect=,next=,r=,u=
有时候网站会对重定向的链接做一些验证,可能是只能重定向到本网站,此时就需要结合其他漏洞进行利用,比如重定向到一个可以自由编辑js代码的界面,这时候再进行一个重定向,就可以达到我们预期的结果。
有时候我们可以控制重定向网址的一部分,比如结尾,我们可以在结尾构造重定向链接,因为DNS是按照域名标记右侧优先的原则进行查询
HPP(http参数污染)
简述:我们的请求过程中,对http注入额外的参数,这些额外参数干扰了后端代码对正常参数的处理,从而导致了非预期的结果。
挖掘思路:
- 寻找与其他服务相关联的链接,因为这些链接在跳转的时候可能会传递一些可控的参数,我们通过&xxx=xxx添加新的参数(有时候需要对&进行url编码为%26,改值被html编码后为&;)。
- 在挖掘逻辑漏洞时可以试一下参数污染,添加相同参数绕过
CSRF(跨站请求伪造)
简述:用户在一个网站上登录自己的账号,我们通过其他网站A去重定向到这个网站B,并以用户的身份发送请求。
挖掘思路:
- GET请求→直接在url注入要发送的参数
- POST请求→后台可能用的request接受参数,同样在url注入参数。如果是后台是POST请求接受参数,那我们可以网站A去构造一个表单,如:
1 | <html> |
向网站B发送请求,这里的type=”hidden”可以隐藏标签,display=”none”可以隐藏响应内容
- 应该重点关注在服务器端执行操作的HTTP请求.有时候一些API接口也会存在CSRF。
- 如果网站正在使用POST请求发送CSRF令牌,我们可以尝试修改或将其删除,以验证令牌是否存在
常见防御手段:
- 网站要求以内容类型(content-type)为application/json,带着一个CSRF token进行提交,用来验证请求的发起者。当浏览器发送application/json请求时,会发送一个OPTIONS HTTP请求,这个请求会返回支持的HTTP请求类型和信任的源。有些情况下,我们可以通过修改content-type绕过这些措施。
- 扩源资源共享(CORS)定义了网站什么时候和如何互相读取响应信息。有些情况下,我们可以将content-type修改为application/x-www-form-urlencoded,multipart/form-data或text。plain来绕过,这样就不会发起OPTIONS HTTP请求。
- 将token写在某一个http中(GET,POST都有可能)。
CRLF注入(回车换行注入)
简述:服务器和浏览器都是通过CRLF字符来识别HTTP消息中的不同部分的,我们可以在http头中加入回车换行符 \n\r,其编码形式为%0d%0a,从而修改http头的消息。进一步可以造成HTTP夹带攻击,HTTP响应攻击和XSS攻击,会话固定,缓存投毒等。
漏洞挖掘:
- 注入点主要是重定向或者跳转的地方。要观察输出是否再返回头中,查看输入,可能是在URL值和参数,cookie中。
- 常见的两种情况是使用输入参数set-cookie和302跳转location处。CRLF之后,我们可以加入新的参数,或进行XSS注入。比如某一个链接:xxx.com?url=www.baidu.com,然后这个www.baidu.com又出现在页面当中,此时我们可以将这个重定向漏洞进行进一步的升级,改为xxx.com?url=%0d%0a
,从而注入xss。
常见防御手段:
- 过滤CRLF字符
缓存投毒
简述:服务器为了节省资源,当多个用户请求同一资源时,服务端会返回预先存好的资源。我们可以通过修改这个缓存造成缓存投毒
XXS
漏洞挖掘:
- 有时候注入一个xss并不会马上发生反馈,比如在用户名注入xss payload,但在个人主页上并没有反馈,但在邮箱功能却能够实现。所以要关注多个地方,看xss是否在某个不显著的地方实现了。
- 有时候xss会被js代码过滤,编码,我们可以通过重写此js代码绕过
- 有些网站使用修改xss(移除字符,属性等)进行输入过滤,我们可以通过分析它的机制,利用这个修改机制绕过
- 网站可能只对输入进行过滤,而页面呈现没有过滤。(利用条件较苛刻)
- 多关注能反馈到页面的输入
SSTI模板注入
漏洞挖掘:常用49,<%=xxx%>进行测试
- 在寻找漏洞前,最好对网站进行信息收集,确认一下使用的相关技术(比如网站的框架,前端呈现的引擎,CMS等)
XXE(外部实体注入)
简述:
XML 和 HTML 为不同的目的而设计:
- XML 被设计用来传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观
基本组成:
1 | "1.0" encoding="ISO-8859-1" #声明头 xml version= |
XML实体:相当于定义一个变量,避免多次调用时重复编写。实体名为以&开头,以;结尾。如果实体需要被计算,那么将&替换为%,即为%xxx;
DTD :定义文档结构,支持外部DTD和内部DTD:
1 | "1.0" xml version= |
漏洞挖掘:
- 注意具有xml,可以上传xml的地方