实训笔记2.0

3.22

CSRF漏洞介绍

CSRF (Cross--site request forgery,跨站请求伪造))也被称为 One Click Attack 或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,XSS 利用站点内的信任用户,而 CSRF 则通过伪装成受信任用户请求受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)也难以防范,所以被认为比 XSS 更具危险性。

  • CSRF漏洞原理:其实可以这样理解 CSRF:攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作。CSRF 能够做的事情包括:以目标用户的名义发送邮件、发消息,盗取目标用户的账号,甚至购买商品、虚拟货币转账,这会泄露个人隐私并威胁到了目标用户的财产安全。 举个例子,你想给某位用户转账 100 元,那么单击“转账”按钮后,发出的 HTTP 请求会与http:/www.xxbank..com/pay.php?user=xx&money=100类似。而攻击者构造链接 (http:/www.xxbank.com/pay.php?user=hack&money=100),当目标用户访问了该 URL 后,就会自动向 Hack 账号转账 100 元,而且这只涉及目标用户的操作,攻击者并没有获取目标用户的 cookie 或其他信息。 CSRF 的攻击过程有以下两个重点。·目标用户已经登录了网站,能够执行网站的功能。

  • 目标用户访问了攻击者构造的 URL。+

靶场实战 – CSRF

漏洞描述: CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。通常由于服务端没有对请求头做严格过滤引起的。CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。CSRF攻击会令用户在不知情的情况下攻击自己已经登录的系统。

 

 修复建议 :1、验证请求的Referer是否来自本网站,但可被绕过。

                    2、在请求中加入不可伪造的token,并在服务端验证token是否一致或正确,不正确                              则丢弃拒绝服务。

漏洞代码分析

  • 下面的代码是后台添加用户的代码,执行的流程如下所示:
  • 获取 GET 参数 username 和参数 oassword,然后通过 selecti 语句查询是否存在对应的用户,如果用户存在,会通过$SESSION 设置一个 session: isadmin=admin,否则设置 session: isadmin=guest。
  • 接下来判断 session 中的 isadmin 是否为 admin,如果 isadmin! =admin,说明用户没有登录,那么跳转到登录页面。所以只有在管理员登录后才能执行添加用户的操作。
  • 获取 POST 参数 username 和参数 oassword,然后插入 users 表中,完成添加用户的操作。

  •  当管理员访问了攻击者构造的 CSRF 页面后,会自动创建一个账号,CSRF 利用代码如下。 此代码的作用是创建一个 AJAX 请求,请求的 URL 是 http: /Xx.com/csrf.php,参数是 submit=:1&username: =1&password=1, 从上述 PHP 代码中可以看到,此 AJAX 请求就是执行一个添加用户的操作,由于管理员已登录,所以管理员访问链接后就会创建一个新用户。

 修复建议

针对 CSRF 漏洞的修复,笔者给出以下这两点建议:

  • 验证请求的 Refererf 值,如果 Referer 是以自己的网站开头的域名,则说明该请求来自网站自己,是合法的。如果 Referer 是其他网站域名或空白,就有可能是 CSRF 攻击,那么服务器应拒绝该请求,但是此方法存在被绕过的可能。
  • CSRF 攻击之所以能够成功,是因为攻击者可以伪造用户的请求,由此可知,抵御 CSRF 攻击的关键在于:在请求中放入攻击者不能伪造的信息。例如可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端验证 token,如果请求中没有 token 或者 token 的内容不正确,则认为该请求可能是 CSRF 攻击从而拒绝该请求。

ssrf漏洞介绍

 SSRF  (Server--Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起清求的安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统) 。

ssrf漏洞原理:SSRF 的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定 URL 地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF 利用存在缺陷的 Web 应用作为代理攻击远程和本地的服务器。 主要攻击方式如下所示。

  • 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 panner 信息。
  • 攻击运行在内网或本地的应用程序。
  • 对内网 Wb 应用进行指纹识别,识别企业内部的资产信息。
  • 攻击内外网的 Web 应用,主要是使用 HTTP GET 请求就可以实现的攻击(比如 struts2、SQli 等)。
  • 利用 file 协议读取本地文件等。

漏洞利用 – ssrf

SSRF 漏洞利用的测试地址:http:/127.0.0.1/ssrf.php?url=http:/127.0.0.1/2.php  (页面 ssrf.php 实现的功能是获取 GET 参数 URL,然后将 URL 的内容返回网页上。       如果将请求的网址篡改为 http: /www.baidu.com,则页面会显示 http: / www.baidu.com 的网页内容,如图所示。)

但是,当设置参数 UL 为内网地址时,则会泄露内网信息,例如,当url=192.168.0.2:3306 时,页面返回“当前地址不允许连接到 MySQL 服务器”,说明 192.168.0.2 存在 MySQL 服务,如图 4-103 所示。

 访问 ssrf.php?url=file://C:Vindows/, win.ini 即可读取本地文件,如图所示。

 漏洞代码分析

在页面 SSRF.php 中,程序获取 GET 参数 URL,通过 curl init()初始化 curl 组件后,将参数 URL 带入 curl setopt ($ch, CURLOPT URL, $url),然后调用所以 curl-exec 请求该 URL。由于服务端会将 oannerf 信息返回客户端,所以可以根据 banner 判断主机是否存在某些服务,代码如下。

 修复建议

针对 SSRF 漏洞的修复,给出以下这几点建议。

  1. 限制请求的端口只能为 Web 端口,只允许访问 HTTP 和 HTTPS 的请求。
  2. 限制不能访问内网的IP,以防止对内网进行攻击。
  3. 屏蔽返回的详细信息。

WAF介绍

什么是WAF?

WEB应用防火墙 (Web Application Firewall)  { 定义:通过执行一系列针对HTTP/HTTPS的安全策略来防御对Web应用的攻击。}

 WAF的分类

  •  硬件WAF
  • 软件WAF
  • 云WAF
  • 内置WAF

WAF工作原理

 

 WAF指纹识别(常用)

 WAF绕过方法

本小本小节主要介绍 SQL 注入漏洞的绕过方法,其余漏洞的 WAF 绕过方法在原理上是差不多的。

  1. 大小写混合

在规则匹配时只针对了特定大写或特定小写的情况,在实战中可以通过混合大小写的方式进行绕过(现在几乎没有这样的情况),如下所示。

  uNion sElEct 1,2,3,4,5

      2. URL编码

         极少部分的 WAF 不会对普通字符进行 URL 解码,如下所示。union select 1,2,3,4,5 上 述命令将被编码为如下所示 (%75%6E%69%6F%6E%20%73%65%6%65%63%74%20%31%2℃ %32%2℃%33%2C%34%2C%3)

        还有一种情况就是 URL 二次编码,WAF 一般只进行一次解码,而如果目标 Wb 系统的代码中进行了额外的 URL 解码,即可进行绕过。

        union select 1,2,3,4,5,上述命令将被编码为如下所示的命令。 %2575%256E%2569%256F%256E%2520%2573%2565%256C%2565%2563%2574%2520%2531%252℃%2532%252C%2533%252C %2534%252C%2535

     3. 换关键字

        WAF采用 替替换或者删除select/union这类敏感关键饲的时候,如果只匹配次则很容易进行绕过

        union slect 1,2,3,4,5

        上述命令将转换为如下所示的命令。

        unuionion selselectect 1,2,3,4,5

     4. 使用注释

截断 SQL 语句中用得比较多,在绕过 WAF 时主要使用其替代空格(/*任意内容*),适用于检测过程中没有识别注释或替换掉了注释的 WAF。

        Union select 1,2,3,4,5

        上述命令将转换为如下所示的命令。

        union/*2333*/select/*aaaa*/1,2,3,4,5

        还可以使用内联注释尝试绕过 WAF 的检测。

     5. 多参数请求拆分

对于多个参数拼接到同一条$QL 语句中的情况,可以将注入语句分割插入。例如请求 URL 时,GET 参数为如下格式。

        a= [input1] &b= [input2]

        将 GET 的参数 a 和参数 b 拼接到 SQL 语句中,SQL 语句如下所示。

        and a= [input1] and b= [input2] 这时就可以将注入语句进行拆分,如下所示。

        a=union/*&b=*/select 1,2,3,4

        最终将参数 a 和参数 b 拼接,得到的 SQL 语句如下所示。

        and a=union /*and b=*/select 1,2,3,4

      6.HTTP 参数污染

        HTTP 参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果,具体如表所示(例子以参数 color=-red&color=-blue 为例)

        在上述提到的中间线中,川 S 比较容易利用,可以直接分割带逗号的 SQL 语句。在其余的中间线中,如果 WF 只检测了同参数名中的第一个或最后一个,并且中间件特性正好取与 WAF 相反的参数,则可成功绕过。下面以 IS 为例,一般的 SQL 注入语句如下所示。

        Inject=union select 1,2,3,4

        将 SQL 注入语句转换为以下格式。

        Inject=union/*&inject=*/select/*&inject=*/1&inject=2&inject=3&inject=4

        最终在IIS中读入的参数值将如下所示。

       Inject=union/*,*/select/*,*/1,2,3,4

     7. 生僻函数  

        使用生僻函数替代常见的函数,例如在报错注入中使用卵 oy9on()函数替换常用的 updatexml()函数,如下所示。

        SELECT polygon  ((select*from  (select*from  (select@@version) f) X));

     8. 寻找网站源站IP

        对于具有云WAF防护的网站而言,只要找到网站的IP地址,然后通过IP访问网 站,就可以绕过云 WAF 的检测。

         常见的寻找网站IP的方法有下面这几种。

  1. 寻找网站的历史解析记录。
  2. 多个不同区域 ping 网站,查看 lP 解析的结果。
  3. 找网站的二级域名、NS、MX 记录等对应的IP。
  4. 订阅网站邮件,查看邮件发送方的IP。

      9. 注入参数到 cookies中

        某些程序员在代码中使用$REQUEST获取参数,而$REQUEST会依次从GET/POST/cookie中获取参数,如果WAF 只检测了GET/POST 而没有检测 cookie,可以将注入语句放入cookie中进行绕过。

暴力破解漏洞介绍

暴力破解的产生是由于服务器端没有做限制,导致攻击者可以通过暴力的手段暴力破解的产生是由于破解所需信息,如用户名、密码、验证码等。暴力破解需要一个庞大的字典,如 4 位数字的验证码,那么暴力破解的范围就是 0000~9999,暴力破解的关键在于字典的大小。

靶场实战 – 暴力破解

漏洞描述: 由于没有对登录页面进行相关的人机验证机制,如无验证码、有验证码但可重复利用以及无登录错误次数登录账号和密码。限制等,导致攻击者可通过暴力破解获取用户

 

 修复建议: 1、如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)

                  2、如果某个 IP登录次数超过设置的阈值,则锁定IP

                  3、增加人机验证机制

                  4、验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。

场景1-账户探测

场景说明:探测用户名存在与否,用户名穷举

        方式一:Top500用户名、手机号  

        方式二:邮箱、员工编号  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值