Web应用安全

CSRF跨站请求伪造

CSR概念

什么是CSRF跨站?

  • 全称是Cross-Site Request Forgery,中文跨站请求伪造

CSRF原理

  • 黑客利用已经登录的用户,诱导其访问或登录某个早已构造好的恶意链接或者页面,然后在用户毫不知情的情况下,以用户名义完成了非用户本意的非法操作

CSRF攻击流程

14.2.1

CSRF实例

打开pikachu靶场,选中右侧导航栏中的CSRF

14.2.2

通过页面右上角的提示,可以获取用户名称和密码

14.2.3

登录后,修改用户信息,点击提交,获取提交的url

14.2.4

攻击者获取修改信息的URL后,就可以构造出CSRF攻击的URL

14.2.5

攻击者获取修改信息的URL后,就可以构造出CSRF攻击的URL例如:将kobe的性别修改为girl

14.2.6

将以下url放到某个其它网站上,引诱被攻击者点击

  • 如果被攻击者此时登录状态或cookie/session没有过期,则信息被修改
  • 注意:实际的IP地址是对应的被攻击的网站的IP

14.2.7

CSRF防御实例

增加token的验证的页面

14.2.8

增加token的验证,页面部分代码

14.2.9

修改信息后,点击submit按钮后抓包,连同token一起提交修改成功

注意,token是随机的

14.2.10

构造的url没有包含token或错误的token都将请求失败

14.2.11

CSRF与XSS的区别

  • CSRF攻击者并没有拿到用户的权限,是借用户的权限完成攻击
  • XSS可以通过盗取cookie来获取用户权限来完成攻击

SSRF服务器端请求伪造

SSRF概念

什么是SSRF

  • 全称Server-Side Request Forgery,中文是服务器端请求伪造
  • 由攻击者构造形成,但是由服务器端发起请求
  • 攻击目标是从外网无法访问的内部系统

SSRF成因

  • 服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据

SSRF攻击流程

14.2.12

SSRF场景

Web项目中出现SSRF漏洞的常见功能点

  • 分享:通过URL地址栏分享网页内容
  • 转码服务:通过URL地址把原地址的网页内容调优以适合手机屏幕
  • 图片加载、下载:通过URL地址加载或下载图片
  • 收藏:图片及文章的收藏功能
  • API:未公开的api实现以及其它调用URL的功能

SSRF相关的PHP函数

curl_exec()

  • 执行CURL会话

file_get_contents()

  • 将整个文件读入一个字符串

fsockopen()

  • 打开一个网络连接或者一个Unix套接字连接

SSRF危害

  • 扫内网
  • 向内部任意主机的任意端口发送精心构造的Payload
  • 攻击内网的web应用
  • 利用file协议读取本地文件等

SSRF漏洞利用

打开pikachu靶场,选择SSRF标签

14.2.13

SSRF(curl)的核心代码

14.2.14

正常操作,点击页面内容

14.2.15

将url的值换成自己的payload,实现漏洞利用

  • 假设我们部署的dvwa只允许内网访问

14.2.16

SSRF(file_get_content)

  • 点击页面,内容显示如下,关注url

14.2.17

SSRF(file_get_content)核心代码

14.2.18

将url的值换成自己的payload,实现漏洞利用

  • 读取指定的文件内容

14.2.19

SSRF漏洞防御

  • 禁用不需要的协议,例如:仅仅允许http和https请求
  • 设置白名单方式
  • 限制请求的端口