Python全栈(五)Web安全攻防之10.CSRF和文件上传

一、存储型XSS测试

1.环境搭建

可点击https://download.csdn.net/download/CUFEECR/12255996下载测试环境。
下载之后解压并拷贝到PHPStudy的根目录下的WWW目录下,再访问http://127.0.0.1/pconline/,会出现:
access pcline forbidden
需要进行安装配置:
(1)如果未勾选php_pdo_mysql,需要手动勾选,如下:
php pdo mysql
(2)设置允许目录列表访问如下:
php allow listaccess
(3)修改pconline目录下的app目录下的config目录下的db_config.php
密码行密码改为root,如下:
pconline dbconfig password
保存,同时获取到数据库名为rocboss_2_1
(4)使用数据库管理工具如sqlyog等创建数据库并执行pconline目录下的install.sql文件中的SQL语句,演示如下:
pconline dbconfig rocboss_2_1
此时再访问,会显示:
pconline normal  access
此时即可正常访问。
用默认账号admin和密码123456进行登录即可。

2.定向挖掘XSS漏洞

XSS漏洞可以存在于个人资料处、文章发表处或留言评论处。
对搜索和发帖进行测试,如下:
pconline search  release test
显然,只有发帖的添加标签可触发反射型XSS。

黑名单审计

私信位置没有被实体化,可以进行XSS,但是会被黑名单过滤。
查看system\util\Filter.php文件如下:

$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'base', 'style'); 

$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');        

显然,没有过滤detailsontaggle,可以利用其进行测试。
payload如下:

"><details open οntοggle=eval("\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3aalert('xss')")><"

绕过进行测试,在标签中添加payload和互相私信时发送payload会成功触发XSS,如下:
pconline xss bypass test

Kali中XSSer的使用

XSSer是Kali中XSS的自动化探测漏洞和挖掘工具,简单的使用和测试如下:

pconline kali xsser test

二、CSRF原理介绍

1.CSRF漏洞定义

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

XSS与CSRF区别

  • XSS利用站点内的信任用户,盗取cookie
  • CSRF通过伪装成受信任用户请求信任的网站

2.CSRF漏洞原理

利用目标用户的合法身份,以目标用户的名字执行某些非法操作。
举例:
正常用户转账的链接为http://www.xxx.com/pay.php?user=xx&money=100,则恶意用户转账链接可能为
http://www.xxx.com/pay.php?user=恶意用户&money=1000

3.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
进行测试:
pconline csrf test
显然,将安全级别增加到impossible之后,在请求的链接后多了一个参数user_token,用来唯一识别用户,并且每次请求都会产生不同的token,如果在站外访问链接是达不到修改密码的目的的,从而保证了安全性。当然,如果安全级别是low的时候,在站外访问请求链接可以达到修改密码的目的。
将安全级别设为low,写一个简单的模拟中奖的html脚本,其中一个元素为图片,放入修改密码的链接,打开该html,在打开请求图片链接的时候即请求修改密码。修改成功,再用默认密码password登录便不能成功,需要使用改过之后的密码进行登录,演示如下:
pconline csrf password test
在很多网页中出现的提示中奖等具有诱导性的链接中即使用了这个原理,只要你点击链接,便会在无意中修改自己的密码,被别人盗用还浑然不知。

4.CSRF防御措施

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

  • 验证码防御
  • referer check防御

三、文件上传

1.环境搭建

可点击https://download.csdn.net/download/CUFEECR/12256008下载靶场环境。
下载完成后解压拷贝到PHPStudy的根目录下的WWW目录下,并在upload-labs目录下手动创建一个文件夹upload
进行测试如下:
pconline upload test1
显然,上传的文件只能是图片,并且上传的文件自动保存到之前创建的upload目录中。
这主要是因为页面中有JS进行文件验证:
fileupload withJS

2.绕过JS验证

方式一:burpsuite剔除响应JS

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

fileupload JS burpsuite

显然,BURPSUITE去除了页面中的所有JS,如下:
fileupload noJS

方式二:浏览器审计工具剔除JS

利用浏览器的审查工具剔除JS之后,保存为新文件然后进行文件上传。
修改网页代码实现表单提交测试如下:
fileupload JS newhtml

3.绕过MIME-Type验证

MIME-Type介绍

MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型),是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
常见的MIME类型可查看https://www.cnblogs.com/korea/p/11787460.html

绕过MIME-Type测试

利用Burpsuite工具截断HTTP请求,修改MIME-Type类型绕过验证。
测试如下:

fileupload mimetype test

4.绕过黑名单

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

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

对于黑名单中的后缀名筛选,绕过黑名单可以通过寻找漏网之鱼,寻找某些可以被作为脚本执行同时也不在黑名单中的文件。
利用Burpsuite工具截断HTTP请求,利用Intruder模块进行枚举后缀名,寻找黑名单中没有过滤的后缀名。
测试如下:

fileupload blacklist test

显然,.php文件不能上传,而其他格式的文件如.py、.php1、.php2、.php3和.php4格式的文件能成功上传,即.php文件在黑名单中。

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

大小写绕过原理:
Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的;
Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。
只存在于Windows当中,不存在于Linux系统。
在Windows中测试如下:
fileupload blacklist case Windows test
在Kali中测试如下:
fileupload blacklist case  Kali test

6.Webacoo上传Webshell

使用webacoo上传webshell的步骤如下:

  • WeBaCoo生成Webshell
    webacoo -g -o a.php
  • 上传Webshell
  • 连接Webshell
    webacoo -t -u Webshell地址

测试如下:

fileupload webshell webacoo test

显然,当上传a.php后可以对目标服务器目录进行操作。

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

空格绕过原理:
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格,从而绕过黑名单。
针对这样的情况需要使用Burpsuite截断HTTP请求之后,修改对应的文件名添加空格。
测试如下:
fileupload blacklist space test

8.绕过黑名单验证(英文句号.绕过)

句号绕过原理:
Windows系统下,文件后缀名最后一个点会被自动去除。
利用Burpsuite工具截断HTTP请求,上传文件加 . 绕过上传。
测试如下:
fileupload blacklist period test

9.使用weevely生成Webshell并上传

使用weevely上传Webshell:

  • 生成Webshell
    weevely generate 密码 路径/文件名
  • 上传Webshell
  • 连接Webshell
    weevely shell文件地址 密码

测试如下:

fileupload webshell weevely test

显然,weevely比webacoo的功能稍强大一点。

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

路径拼接绕过原理:
在没有对上传的文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单。
在BURPSUITE中修改文件名,再上传1.php. . 文件。
测试如下:

fileupload path test

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

双写绕过原理:
代码编写过程中,只对黑名单中的内容进行空替换,因为只替换一次所以造成双写绕过。
在BURPSUITE中修改文件名,如1.phphpp
测试如下:
fileupload doublewrite test
显然,如果后缀名只有一个php,会从文件名中去除,成为一个没有后缀名的文件,所以必须双写才可以绕过。

发布了89 篇原创文章 · 获赞 651 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/CUFEECR/article/details/104962812
今日推荐