csrfssrf


csrf&ssrf

csrf

跨站请求伪造,伪装成受信任用户的来利用受信任的网站

检测:抓包,修改referfer字段重新提交,如果正常可能存在此漏洞

危害

盗用受害者的身份,做受害者能做的事

原理

在用户浏览器网站的cookie没有过期时,攻击者发送csrf脚本,从而盗用用户身份

成因

只要不关闭浏览器或者退出登录,网站的cookie在浏览器中不会过期。在这个期间,攻击者发送了构造好的csrf 脚本或包含csrf脚本的链接,从而让用户进行一些未经允许的操作。

分类

  1. 未进行token检验

    csrf高发处

  2. json劫持

    1. 如果服务端没有校验Content-Type,或者没有严格校验Content-Type是否为application /json,我们可以使用XHR来实现csrf。

    2. 使用XMLHttpRequest、fetch能构造出JSON请求,并且能设置Content-Type,但是无法跨域。

  3. flash csrf

    Flash里的ActionScript脚本也是客户端脚本,同样可以进行一些操作。以Flash为载体, 进行一些隐秘的攻击。

防护

  1. 验证码

    与用户交互,验证身份

  2. referer check

    如果不是操作页面或者网站的域(验证referfer)

  3. token校验

    以参数形式加入一个随机数token,并在服务器端建立一个拦截器来验证这个token

绕过

  1. Referer为空

    利用ftp://,http://,https://,file://,javascript:,data:这个时候浏览器地址栏是 file://开头的,如果这个HTML页面向任何http站点提交请求的话,这些请求的Referer都是空的。

  2. 判断Referer是某域情况下绕过

    比如你找的csrf是xxx.com 验证的referer是验证的*.xx.com 可以找个二级域名 之后

    <img “csrf地址”>

    之后在把文章地址发出去 就可以伪造。

  3. 判断Referer是否存在某关键词

    referer判断存在不存在google.com这个关键词,在网站新建一个google.com目录 把CSRF存放在google.com目录,即可绕过

  4. 判断referer是否有某域名

    判断了Referer开头是否以126.com以及126子域名 不验证根域名为126.com 那么我这里可以 构造子域名x.126.com.xxx.com作为蠕虫传播的载体服务器,即可绕过。

xss与csrf区别

XSS利用站点内的信任用户,而CSRF则伪装来自受信任用户的请求来利用受信任的网站。

xss针对客户端,csrf针对服务端。

csrf局限性更小,能做到的事更多

ssrf

服务端请求伪造,攻击者构造代码导致服务端发起漏洞利用请求

SSRF漏洞一般为HTTP/HTTPS方式出现,但类似TCP Connect方式也可以探测内网的IP活跃状态和端口的开放情况,但此类危害较小。

产生漏洞的函数:

  • file_get_contents()
  • fsockopen()
  • curl_exec()

成因

服务端需要从其他服务器获取数据,但是没有对其目标地址做过滤和限制,导致攻击者可以利用此缺陷访问任意服务器资源,其中就包括外网无法访问的内网资源。

危害

  1. 对目标服务器所在的内网进行IP存活性扫描和端口扫描
  2. 利用扫描的指纹信息判断开放的服务,从而对内网的主机进行攻击
  3. 识别内网WEB应用指纹,判断应用类型进行攻击
  4. 使用特定协议攻击应用(gopher、dict、file、FTP/SFTP等)

绕过

特殊域名绕过

http://127.0.0.1.xip.io/
# 会解析到本地的127.0.0.1

其他进制绕过或缩写

127.0.0.1
8进制格式:0177.0.0.1
16进制格式:0x7F.0.0.1
10进制整数格式:2130706433(转16进制,在转10进制)
16进制整数格式:0x7F000001
省略模式,例如127.0.0.1这个IP可以写成127.1

句号代替点

127.0.0.1 变为127。0。0。1

短地址绕过

http://127.0.0.1可以变为http://suo.im/5UHEvD
# 转换地址有很多,可以采用http://tool.chinaz.com/tools/dwz.aspx

利用@绕过

http://example.com@127.0.0.1

防御

  1. 禁止302跳转,或者没跳转一次都进行校验目的地址是否为内网地址或合法地址。
  2. 过滤返回信息,验证远程服务器对请求的返回结果是否合法。
  3. 禁用高危协议,例如:gopher、dict、ftp、file等,只允许http/https
  4. 设置URL白名单或者限制内网IP
  5. 限制请求的端口为http的常用端口,或者根据业务需要治开放远程调用服务的端口
  6. catch错误信息,做统一错误信息,避免黑客通过错误信息判断端口对应的服务

文章作者: 晓莎K
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 晓莎K !
评论
  目录