《Web漏洞搜索》阅读笔记
Published in:2022-12-23 | category: 网络安全

《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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
  <head>
    <script type="text/javascript">
      function steal()
      {
     iframe = document.frames["steal"];
      iframe.document.Submit("transfer");
      }
    </script>
  </head>

  <body οnlοad="steal()">
    <iframe name="steal" display="none">
      <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
        <input type="hidden" name="toBankId" value="11">
        <input type="hidden" name="money" value="1000">
      </form>
    </iframe>
  </body>
</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攻击,会话固定,缓存投毒等。

漏洞挖掘:

常见防御手段:

  • 过滤CRLF字符

缓存投毒

简述:服务器为了节省资源,当多个用户请求同一资源时,服务端会返回预先存好的资源。我们可以通过修改这个缓存造成缓存投毒

XXS

漏洞挖掘:

  • 有时候注入一个xss并不会马上发生反馈,比如在用户名注入xss payload,但在个人主页上并没有反馈,但在邮箱功能却能够实现。所以要关注多个地方,看xss是否在某个不显著的地方实现了。
  • 有时候xss会被js代码过滤,编码,我们可以通过重写此js代码绕过
  • 有些网站使用修改xss(移除字符,属性等)进行输入过滤,我们可以通过分析它的机制,利用这个修改机制绕过
  • 网站可能只对输入进行过滤,而页面呈现没有过滤。(利用条件较苛刻)
  • 多关注能反馈到页面的输入

SSTI模板注入

漏洞挖掘:常用49,<%=xxx%>进行测试

  • 在寻找漏洞前,最好对网站进行信息收集,确认一下使用的相关技术(比如网站的框架,前端呈现的引擎,CMS等)

XXE(外部实体注入)

简述:

XML 和 HTML 为不同的目的而设计:

  • XML 被设计用来传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观

基本组成:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="ISO-8859-1"?> #声明头
<note> #内容,标签名是可以自定义的
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body fun="1">Don't forget me this weekend!</body> #带了一个fun属性
<website>&url;</website>
</note>

XML实体:相当于定义一个变量,避免多次调用时重复编写。实体名为以&开头,以;结尾。如果实体需要被计算,那么将&替换为%,即为%xxx;

DTD :定义文档结构,支持外部DTD和内部DTD:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT url SYSTEM "website.txt">
]>
...此处为上一个代码块的代码
###
<!DOCTYPE note []>定义此文档是 note 类型的文档。
<!ELEMENT note>定义 note 元素有四个元素:"to、from、heading,、body"
<!ELEMENT to> 定义 to 元素为 "#PCDATA" 类型(下面的同理)
ps:
#PCDATA 表示可进行HTML解析的字符数据,不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。
#CDdata 表示不会被解析器解析的文本
ANY 定义标签包含任何可解析的数据

<!ELEMENT url SYSTEM "website.txt"> 使用SYSTEM属性告诉解析器使用url占位符获取website.txt文件的内容

漏洞挖掘:

  • 注意具有xml,可以上传xml的地方
Prev:
《代码审计》阅读笔记