代码审计之csrf,ssrf

目录

CSRF (Cross -site request forgery)跨站请求伪造

csrf原理:

CSRF流程图

CSRF漏洞的利用

CSRF修复建议

SSRF(服务器端请求伪造)

原理

类型:

危害

寻找SSRF漏洞:

二:从URL关键字中寻找

SSRF的绕过

验证SSRF漏洞

利用SSRF漏洞

修复建议:


 

CSRF (Cross -site request forgery)跨站请求伪造

csrf原理:

攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件,发私信,添加管理用户,甚
至于交易转账等。
攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用程序发送一个改变用户信息的请求。由于发生CSRF攻击后,攻击者是强迫用户向服务器发送请求,所以会造成用户信
息被迫修改,更严重者引发蠕虫攻击。

  • 从站内发起

需要利用网站本身的业务,比如“自定义头像”功能, 恶意用户指定自己的头像URL是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。

  • 从站外发起

则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的html页面,并把页面地址发给受害者用户,受害者用户打开时,会发起一个请求。

CSRF流程图

代码审计之csrf,ssrf_第1张图片

CSRF漏洞的利用

常用步骤:
1. 如果只是一个URL=>直接发送URL或者转换为短链接之后再发送给受害者
2.如果是一个表单=>使用Brupsuite抓包=>构造一个表单=>构造页面发送给受害者

 

CSRF修复建议

CSRF攻击是攻击者利用用户的身份操作用户帐户的一种攻击方式,通常可以采用如下措施来进行防御:
1. Referer校验 ,对HTTP请求的Referer校验,如果请求Referer的地址不在允许的列表中,则拦截请求。
2. Token校验, 服务端生成随机token,并保存在本次会话cookie中,用户发起请求时附带token参数,服务端对该随机数进行校验。如果不正确则认为该请求为伪造
请求拒绝该请求。
3. Formtoken校验 ,Formtoken校验本身也是Token校验,只是在本次表单请求有效。
4.对于高安全性操作则可使用验证码、短信、密码等二次校验措施
5.增删改请求使用POST请求

 

SSRF(服务器端请求伪造)

原理

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

 

 

类型:

  • curl造成的ssrf

  • file_get_contents

  • fsockopen()

 

危害

  • 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息,
  • 攻击运行在内网或本地的应用程序(比如溢出) ;
  • 对内网web应用进行指纹识别,通过访问默认文件实现;
  • 攻击内外网的web应用,主要是使用get参数就可以实现的攻击( 比如struts2,sqli等) ;
  • 利用file协议读取本地文件等。

 

寻找SSRF漏洞:

  1. 通过url地址分享网页内容
  2. 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
  3. 在线翻译:通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度有道等
  4. 图片加载与下载:通过URL地址加载或下载图片
  5. 图片、文章收藏功能
  6. 未公开的api实现以及其他调用URL的功能

二:从URL关键字中寻找

一些的url中的关键字: share、 wap、url、 link、 src、 source、 target、 u、3g、display、sourceURI、 imageURL、 domain....Google doking: inurl:imageURL=

SSRF的绕过

  1. 利用@,http://[email protected]相当于访问http://127.0.0.1

  2. 利用特殊的域名:xip.io                   http://127.0.0.1.xip.ip=>127.0.0.1

  3. 利用Enclosed alphpanumerics特殊编码

  4. 利用句号      127。0。0。1  ====>127.0.0.1

  5. 进制转换

  6. 利用[::]绕过localhost       http://[::]:80  ===>http://127.0.0.1

  7. 利用短地址

  8. 利用dns解析,在域名上设置A记录,指向127.0.0.1

  9. 利用上传,type=file改为file=url,上传图片出可能存在ssrf

  10. 利用特殊地址:http://0/

  11. 利用协议,dict,sftp,tftp,gohper

  12. 添加参数绕过构造http:127.0.0.1/appcms/pic.php?url=..base64编码&type=png

 

 

 

验证SSRF漏洞

  1. 排除法:浏览器f12查看源代码看是否是在本地进行了请求
  2. 利用Ceye等平台进行测试,查看访问的回显。
  3. 抓包分析发送的请求是不是 由服务器的发送的,如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务的内网地址
  4. 从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址
  5. 通过二级域名暴力猜解工具模糊猜测内网地址
  6. 留意直接返回 的Banner、title、 content等信 息
  7. 留意bool型SSRF

利用SSRF漏洞

1.让服务端去访问相应的网址
2.让服务端去访问自己所处内网的一-些指纹文件来判断是否存在相应的cms
3.可以 使用file、dict、 gopher[11]、 ftp协议 进行请求访问相应的文件
4.攻击内网web应用 (可 以向内部任意主机的任意端口发送精心构造的数据包{payload})
5.攻击内网 应用程序(利用跨协议通信技术)
6.判断内网主机是否存活: 方法是访问看是否有端口开放
7. DoS攻击(请求大文件,始终保持连接keep-alive always)

之前学习ssrf的链接

修复建议:

  • 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
  • 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
  • 限制请求的端口为http常用的端口,比如,80,443,8080,8090。
  • 黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
  • 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file://,gopher:// ftp://等引起的问题。

 

你可能感兴趣的:(PHP代码审计)