CSRF原理介绍及文件上传

别来无恙 提交于 2020-02-27 19:07:16

CSRF原理介绍

CSRF漏洞定义

CSRF(cross-site request forery,跨站请求伪造),也被称为one click attack或者session riding,通过缩写为CSRF或者XSRF

XSS与CSRF区别

  • 1.XSS利用站点内的信任用户,盗取cookie

  • 2.CSRF通过伪装成受信任用户请求信任的网站

CSRF漏洞原理

利用目标用户的合法身份,以目标用户的名字执行某些非法操作

如:
正常用户转账
http://www.xxx.com/pay.php?user=xx&money=100

恶意用户转账
http://www.xxx.com/pay.php?user=恶意用户&money=1000

CSRF漏洞利用

在修改密码的时候,抓包抓到修改密码的请求

http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change

GET型CSRF代码分析

http://127.0.0.1/csrf/csrf_get.php?username=admin&password=admin

CSRF防御措施

CSRF漏洞实质:服务器无法准确判断当前请求是否是合法用户的自定义操作

  • 1.验证码防御
  • 2.referer check防御

文件上传

靶场环境

GitHub地址: https://github.com/c0ny1/upload-labs

文件上传-绕过JS验证

1.JS验证代码分析,在page-1中的index.php

burpsuite剔除响应JS

对于JS前端验证,直接删除掉JS代码之后就可以绕过JS验证

浏览器审计工具剔除JS

利用浏览器的审查工具剔除JS之后,保存为新文件然后进行文件上传

文件上传-绕过MIME-Type验证

MIME-Type介绍

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件 用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

常见的MIME类型

https://www.jianshu.com/p/50ea483d62b6

验证MIME-Type代码分析

Pass-2中index.php

burpsuite绕过MIME-Type验证

利用Burpsuite工具截断HTTP请求,在Repeater重放修改MIME-Type类型绕过验证。image/jpeg

文件上传-绕过黑名单验证

基于文件后缀名验证介绍

对于文件上传模块来说,尽量避免上传可执行的脚本文件。为了防止上传脚本需要设置对应的验证方式。最简单的就是设置文件后缀名验证。

基于文件后缀名验证方式的分类:

1.基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2.基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功

基于黑名单验证代码分析

对于黑名单中的后缀名筛选。绕过黑名单可以通过寻找“漏网之鱼” ,寻找某些可以被作为脚本执行 同时也不在黑名单中。

Pass-3中index.php

Burpsuite绕过黑名单验证

利用Burpsuite工具截断HTTP请求,利用Intruder模块进行枚举后缀名,寻找黑名单中没有过滤的后 缀名。

绕过黑名单验证(大小写验证)

大小写绕过原理

Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的。

Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。

基于黑名单验证的代码分析

只存在于Windows当中,不存在于Linux系统

在Pass-5中的index.php

WeBaCoo上传Webshell
1.WeBaCoo生成Webshell: webacoo -g -o a.php

2.上传Webshell

3.连接Webshell:webacoo -t -u Webshell地址

绕过黑名单验证(空格验证)

空格绕过原理

Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。

针对这样的情况需要使用Burpsuite截断HTTP请求之后,修改对应的文件名添加空格。

Burpsuite 绕过黑名单验证

利用Burpsuite工具截断HTTP请求,对上传文件名后加空格

绕过黑名单验证(.号绕过)
.号绕过原理

Windows系统下,文件后缀名最后一个点会被自动去除

Burpsuite 绕过黑名单验证

利用Burpsuite工具截断HTTP请求,上传文件加 . 绕过上传。

生成并上传Webshe
使用weevely生成Webshell并上传

1.生成:weevely generate 密码 路径 文件名

2.上传

3.连接:weevely shell文件地址 密码

绕过黑名单验证(路径拼接绕过)

路径拼接绕过原理

在没有对上传的文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单

例如: 用户新建 1.php.空格

修改文件名 绕过黑名单验证
在kali Linux下修改文件名,上传1.php. . 文件

绕过黑名单验证(双写绕过)

双写绕过原理

代码编写过程中,只对黑名单中的内容进行空替换,因为只替换一次所以造成双写绕过。

例如: 1.phphpp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!