上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提醒大家渗透测试网站必须要拿到授权才能测试哦!

3.3.1. 简介

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

3.3.2. 分类

3.3.2.1. 资源包含

资源包含是在大多数介绍CSRF概念的演示或基础课程中可能看到的类型。这种类型归结为控制HTML标签(例如、、

由于缺少对Cookie的源点检查,如上所述,此攻击不需要XSS,可以由任何攻击者控制的站点或站点本身执行。此类型仅限于GET请求,因为这些是浏览器对资源URL唯一的请求类型。这种类型的主要限制是它需要错误地使用安全的HTTP请求方式。

3.3.2.2. 基于表单

通常在正确使用安全的请求方式时看到。攻击者创建一个想要受害者提交的表单; 其包含一个Java片段,强制受害者的浏览器提交。

该表单可以完全由隐藏的元素组成,以致受害者很难发现它。

如果处理cookies不当,攻击者可以在任何站点上发动攻击,只要受害者使用有效的cookie登录,攻击就会成功。如果请求是有目的性的,成功的攻击将使受害者回到他们平时正常的页面。该方法对于攻击者可以将受害者指向特定页面的网络钓鱼攻击特别有效。

3.3.2.3.

这可能是最少看到的方式。

由于许多现代Web应用程序依赖XHR,许多应用花费大量的时间来构建和实现这一特定的对策。

基于XHR的CSRF通常由于SOP而以XSS有效载荷的形式出现。没有跨域资源共享策略(CORS),XHR仅限于攻击者托管自己的有效载荷的原始请求。

这种类型的CSRF的攻击有效载荷基本上是一个标准的XHR,攻击者已经找到了一些注入受害者浏览器DOM的方式。

3.3.3. 防御

  • 通过CSRF-token或者验证码来检测用户提交
  • 验证Referer/Content-Type
  • 对于用户修改删除等操作最好都使用POST操作
  • 避免全站通用的cookie,严格设置cookie的域

3.4. SSRF漏洞

3.4.1. 简介

服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。

3.4.2. 漏洞危害

SSRF可以对外网、服务器所在内网、本地进行端口扫描,攻击运行在内网或本地的应用,或者利用File协议读取本地文件。

内网服务防御相对外网服务来说一般会较弱,甚至部分内网服务为了运维方便并没有对内网的访问设置权限验证,所以存在SSRF时,通常会造成较大的危害。

3.4.3. 利用方式

SSRF利用存在多种形式以及不同的场景,针对不同场景可以使用不同的绕过方式。

以curl为例, 可以使用dict protocol操作Redis、file协议读文件、gopher协议反弹Shell等功能,常见的Payload如下:

curl -vvv 'dict://127.0.0.1:6379/info'

curl -vvv 'file:///etc/passwd'

# * 注意: 链接使用单引号,避免$变量问题

3.4.4. 相关危险函数

SSRF涉及到的危险函数主要是网络访问,支持伪协议的网络读取。以PHP为例,涉及到的函数有 file_get_contents() / fsockopen() / curl_exec() 等。

3.4.5. 过滤绕过

3.4.5.1. 更改IP地址写法

一些开发者会通过对传过来的URL参数进行正则匹配的方式来过滤掉内网IP,如采用如下正则表达式:

  • ^10(.([2][0-4]d|[2][5][0-5]|[01]?d?d)){3}$
  • ^172.([1][6-9]|[2]d|3[01])(.([2][0-4]d|[2][5][0-5]|[01]?d?d)){2}$
  • ^192.168(.([2][0-4]d|[2][5][0-5]|[01]?d?d)){2}$

对于这种过滤我们采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址可以被改写成:

  • 8进制格式:0300.0250.0.1
  • 16进制格式:0xC0.0xA8.0.1
  • 10进制整数格式:3232235521
  • 16进制整数格式:0xC0A80001

还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1。 访问改写后的IP地址时,Apache会报400 Bad Request,但Nginx、MySQL等其他服务仍能正常工作。 另外,0.0.0.0这个IP可以直接访问到本地,也通常被正则过滤遗漏。

3.4.5.2. 使用解析到内网的域名

XSS全称为Cross Site ing,为了和CSS分开简写为XSS,中文名为跨站脚本。该漏洞发生在用户端,是指在渲染过程中发生了不在预期过程中的Java代码执行。XSS通常被用于获取Cookie、以受攻击者的身份进行操作等行为。

3.4.5.3. 利用解析URL所出现的问题

在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。

比如 //@192.168.0.1/ 当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很有可能会认为访问URL的host,而实际上这个URL所请求的内容都是192.168.0.1上的内容。

3.4.5.4. 利用跳转

如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用跳转的方式来进行绕过。

可以使用如 http://域名.org/redirect-to?url=http://192.168.0.1 等服务跳转,但是由于URL中包含了192.168.0.1这种内网IP地址,可能会被正则表达式过滤掉,可以通过短地址的方式来绕过。

常用的跳转有302跳转和307跳转,区别在于307跳转会转发POST请求中的数据等,但是302跳转不会。

3.4.5.5. 通过各种非HTTP协议

如果服务器端程序对访问URL所采用的协议进行验证的话,可以通过非HTTP协议来进行利用。

比如通过gopher,可以在一个url参数中构造POST或者GET请求,从而达到攻击内网应用的目的。例如可以使用gopher协议对与内网的Redis服务进行攻击。

除了gopher协议,File协议也是SSRF中常用的协议,该协议主要用于访问本地计算机中的文件,我们可以通过类似 file:///path/to/file 这种格式来访问计算机本地文件。使用file协议可以避免服务端程序对于所访问的IP进行的过滤。例如我们可以通过 file:///d:/1.txt 来访问D盘中1.txt的内容。

3.4.5.6. DNS Rebinding

一个常用的防护思路是:对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就禁止该次请求。

但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间差,利用这个时间差,可以进行DNS重绑定攻击。

要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0。这样就可以进行攻击了,完整的攻击流程为:

  • 服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP
  • 对于获得的IP进行判断,发现为非黑名单IP,则通过验证
  • 服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。
  • 由于已经绕过验证,所以服务器端返回访问内网资源的结果。

3.4.5.7. 利用IPv6

有些服务没有考虑IPv6的情况,但是内网又支持IPv6,则可以使用IPv6的本地IP如 [::] 0000::1或IPv6的内网域名来绕过过滤。

3.4.5.8. 利用IDN

一些网络访问工具如Curl等是支持国际化域名(Internationalized Domain Name,IDN)的,国际化域名又称特殊字符域名,是指部分或完全使用特殊的文字或字母组成的互联网域名。

在这些字符中,部分字符会在访问时做一个等价转换,例如 ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ 和 example.com 等同。利用这种方式,可以用 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 等字符绕过内网限制。

3.4.6. 可能的利用点

sftp

  • tftp(UDP协议扩展)
  • dict
  • gopher
  • ldap
  • imap/imaps/pop3/pop3s/smtp/smtps(爆po邮件用户名密码)
  • rtsp – smb/smbs(连接SMB)
  • telnet
  • http、https
  • mongodb
  • ShellShock命令执行
  • JBOSS远程Invoker war命令执行
  • Java调试接口命令执行
  • axis2-admin部署Server命令执行
  • Jenkins s接口命令执行
  • Confluence SSRF
  • Struts2 命令执行
  • counchdb WEB API远程命令执行
  • docker API远程命令执行
  • php_fpm/fastcgi 命令执行
  • tomcat命令执行
  • Elasticsearch引擎Groovy脚本命令执行
  • WebDav PUT上传任意文件
  • WebSphere Admin可部署war间接命令执行
  • Apache Hadoop远程命令执行
  • zentoPMS远程命令执行
  • HFS远程命令执行
  • glassfish任意文件读取和war文件部署间接命令执行

3.4.7. 防御方式

  • 过滤返回的信息
  • 统一错误信息
  • 限制请求的端口
  • 禁止不常用的协议
  • 对DNS Rebinding,考虑使用DNS缓存或者Host白名单,如果想要更完善的网站安全防护,以及提前渗透测试可以找专业的网站安全公司.

http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析相关推荐

  1. 渗透测试 跨站攻击手法剖析

    上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们Sinesafe想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性 ...

  2. 渗透测试-跨站请求伪造SSRF测试及防御方法

    跨站请求伪造SSRF测试及防御方法 文章目录 跨站请求伪造SSRF测试及防御方法 前言 一.什么是SSRF 二.SSRF实验及防御方法 1.利用SSRF进行内网探测 2.SSRF防御方法 总结 前言 ...

  3. termux使用教程python手机_渗透测试|利用手机攻击电脑(Termux终端初体验)

    至少我们曾经在一起过. 来自:一言 介绍 Termux是一个Android下一个高级的终端模拟器,开源且不需要root,支持apt管理软件包,十分方便安装软件包,完美支持Python,PHP,Ruby ...

  4. 渗透测试常用反弹shell方法(如何渗透测试反弹shell?)-Linux篇(゚益゚メ) 渗透测试

    文章目录 相关博客 反弹shell介绍 常用反弹方式 NetCat(NC)反弹 正向NC 反向NC Telnet反弹 正向shell 反向shell OpenSSL Curl 相关博客 Linux信息 ...

  5. 如何进行渗透测试XSS跨站攻击检测

    国庆假期结束,这一节准备XSS跨站攻击渗透测试中的利用点,上一节讲了SQL注入攻击的详细流程,很多朋友想要咨询具体在跨站攻击上是如何实现和利用的,那么我们Sinesafe渗透测试工程师为大家详细的讲讲 ...

  6. http TRACE 跨站攻击漏洞测试与防御修复

    http TRACE 跨站攻击漏洞测试与防御修复 apache关闭方法可以直接在配置文件http.conf添加TraceEnable off 关闭 有版本要求 好像是2.0以上 在httpd.conf ...

  7. Kali渗透测试:拒绝服务攻击

    Kali渗透测试:拒绝服务攻击 故意占用某一系统对外服务的有限资源,从而导致其无法正常工作的行为就是拒绝服务攻击.拒绝服务攻击是指攻击者想办法让目标停止提供服务,是黑客常用的攻击手段之一.其实对网络带 ...

  8. php mysql可以跨站_Laravel5中防止XSS跨站攻击的方法

    本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HT ...

  9. web安全性测试——XSS跨站攻击

    一.什么是xss跨站攻击 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS. ...

最新文章

  1. 3分钟快速实现:9种经典排序算法的可视化
  2. 湖南科技学院计算机科学与技术分数,湖南科技学院计算机科学与技术专业2016年在河南理科高考录取最低分数线...
  3. 不懂Redis Cluster原理,我被同事diss了!
  4. 项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
  5. 28. Leetcode 25. K 个一组翻转链表 (链表-反转链表)
  6. TensorFlow MNIST AlexNet
  7. MsWord 操作总结
  8. wpf 可以取消的单选checkbox
  9. 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作
  10. Redis(一):什么是NoSQL与NoSQL分类
  11. React v16.0正式版发布
  12. jdk并发包里常用的类
  13. flex include和import
  14. 微信小程序在组件中关闭小程序
  15. Origin introduction and install
  16. python NLP中文近义词
  17. 任凭弱水三千,我只取一瓢饮
  18. 2021年C证(安全员)复审模拟考试及C证(安全员)作业模拟考试
  19. erlang与rabbitmq下载(Window)
  20. 【WEB】前端系统配色方案(全览)

热门文章

  1. EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction
  2. 用JWT来保护我们的ASP.NET Core Web API
  3. HoloLens开发手记-配置开发环境 Install the tools
  4. 【C#程序设计】教学讲义——第三章:C#语言基础
  5. 【遥感数字图像处理】基础知识:第五章 遥感图像增强处理方法总结
  6. Android之在linux环境不通过TAG快速过滤日志
  7. JavaJVM之ClassLoader源码分析
  8. Android系统手机端抓包方法(tcpdump)
  9. android 固定底部 布局_Android系统列表控件
  10. 磁铁还能用来爬铁墙?简直惊呆了