河南省网络安全高校战队联盟CTF训练营-web文件上传第一期

文件上传

河南省网络安全高校战队联盟CTF训练营-web文件上传第一期_第1张图片

个人介绍

姓名:飞羽 CTF菜菜一枚

例题来源

ctfhub:https://www.ctfhub.com

pwnthebox:https://insider.pwnthebox.com

ctfshow:https://ctf.show

工具

burp、Antsword、PHPstudy、各脚本

链接:https://download.csdn.net/download/qq_52342676/85199599

原理

当一个网站或软件拥有可以向服务器或其他客户端传输文件数据的 功能时,若传输时不加以限制,可以任意的传输病毒或木马文件,或者通过某种绕过手段达到该传输目的的,这就会产生文件上传漏洞。通常攻击者上传的文件是以控制网站为目的的病毒文件,该漏洞还会和解析漏洞相结合进行联合攻击。

河南省网络安全高校战队联盟CTF训练营-web文件上传第一期_第2张图片

拓展知识

一句话木马

一句木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。黑客多在注册信息的电子邮箱或者个人主页等中运行该木马。顾名思义是执行恶意指令的木马,通过技术手段上传到指定服务器上并可以正常访问。

用最为常见的php一句话木马为例,为php固定规范写法,@再php中含义为后面如果执行错误不会报错,eval()函数表示括号里的语句全做代码执行,$_POST['password']表示从页面中以post方式获取变量password的值。

multipart/form-data

multipart/form-data是一种规范,统一表达文件上传请求的格式。

boundary 用来分割数据

Content-Disposition 传递文件信息

Content-Type 标记文件类型

text/plain 文本类型

image/jpeg 图片格式

application/octet-stream 脚本类型

webshell

webshell就是以asp、php、jsp或者cgj等网页文件形式存在的一种命令执行 环境,也可以将其称做为一种网页后门。

由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具

攻击者可以利用 webshell从而达到长期控制网站服务器的目的,并获得执行 操作权

攻击者上传的文件和普通用户的当然是不同的,为了达到控制网站的目的,攻击者需要上传网 站后门也就是webshell。

文件上传知识点

1、文件上传-前端验证

就是通过前端技术,在浏览器(B/S模式中的B(browser)端)上面可以进行简单的数据检查。

2、文件上传-黑名单

1.php后缀名大小写

2.php别名:php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名)

3.配合.htaccess或.user.ini

4.双写后缀

array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");上传的文件后缀名在列表内禁止上传。包括了所有的执行脚本。

3、文件上传-白名单

1.MIME绕过:MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。

常见的MME类型,例如:

超文本标记语言文本 .html,html text/htm

普通文本 .txt text/plain

RTF文本. rtf application/rtf

GIF图形 .gif image/gif

JPEG图形 . jpg image/jpeg

2.文件头检查:文件头检查是使用对于 文件内容 的验证机制,这种方法利用的是:每一个特定类型的文件都会有不太一样的开头或者标志位来表明它们的文件类型,也就是文件幻数。文件幻数:可以用来标记文件 或者协议的格式 ,很多文件都有幻数标志来表明该文件的格式。

3.00截断:PHP 内核是 C 实现的,使用了 C 中的字符处理函数,在连接字符串时,0 字节也就是 x00 会作为结束符,所以只要加入一个 0 字节,就可以截断字符串,0 经过 URL 编码后为 %00。php版本小于5.3.4。

4、文件上传-.htaccess

htaccess(伪静态文件)文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。.htaccess 默认不支持 nginx,设置后支持。
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。在htaccess里写入SetHandlerapplication/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。
先上传一个.htaccess文件,文件内容如下:


SetHandler application/x-httpd-php

这段内容的作用是使所有的文件都会被解析为php文件 再上传一个不被网站限制的木马文件,格式不限,如22.jpg


5、文件上传-user.ini

php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini(是防止脚本跨目录执行的 不是防止ftp)和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。

auto_prepend_file=22.jpg

让所有当前目录下可执行php文件包含22.jpg


6、文件上传-二次渲染

在我们上传文件后,网站会对图片进行二次处理(格式、尺寸,保存,删除 要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片(标准化)并放到网站对应的标签进行显示。

绕过方法:

1.配合条件竞争漏洞:

竞争条件是指多个线程在没有进行锁操作或者同步操作的情况下同时访问同一个共享代码,变量,文件等,运行的结果依赖于不同线程访问数据的顺序。

2.配合文件包含漏洞:

将一句话木马插入到网站二次处理后的图片中,也就是将二次渲染后保留的图片和一句话木马制作成图片马,再配合文件包含漏洞解析图片马中的代码,获取webshell。

7、文件上传-简单免杀变异

注意

后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)

如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门

如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还有.user.ini&.htaccess

文件二次渲染:

1、判断上传前和上传后的文件大小及内容

2、判断上传后的文件返回数据包内容

例题演示

JS 验证+user.ini+短标签+过滤

ctfshow(154.155.156.157.158.159.160

短标签

   //前提是开启配置参数short_open_tags=on

    //不需 要开启参数设置

<% echo ' ';%>  //前提是 开启配置参数 asp_tags=on

 //不需要修改参数开关

.user.ini:auto_prepend_file=2.png

22.png:

22.png: 

22.png:

160

包含默认日志,日志记录 UA 头,UA 头写后门代码

22.png:

JS 验证+user.ini+短标签+过滤+文件头

ctfshow (161)

文件头部检测是否为图片格式文件

.user.ini:GIF89a auto_prepend_file=22.png

22.png:GIF89a 

二次渲染

ctfshow(164.165)

get 0=system
post 1=tac flag.php

1、先上传 jpg 正常,返回包发现渲染 2、上传 jpg 渲染后保存,生成带代码图片

调用执行:php jpg.php 1.jpg

免杀

ctfshow(168.169.170


169 170 日志包含

构造.user.ini 利用条件:上传 index.php 内容随意

上传.user.ini 包含日志:

auto_prepend_file=/var/log/nginx/access.log

访问地址带后门UA头写入日志:


额外知识点-中间件

1- IIS6.X

大多数为Windows server 2003,网站比较古老,如果要支持aspx,需要安装.NET框架
	1.1- 利用2003系统的系统特性,但凡出现 \/.:;* 文件名的后面都会被舍弃
			形式:www.xxx.com/xx.asp;.jpg
	1.2-凡是文件名是apx结尾的,里面的任何文件都会被当作脚本语言解析
1.3-除了asp、aspx以外,还有cer、cdx、asa 的后缀都可以被当作asp或者aspx脚本语言解析
	形式:mamu.cer muma.cdx mamu.asa

2- Apache

1-muma.php.xxx.aaa 从左往右解析执行

3- Nginx

# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1- www.xxxx.com/1.jpg/1.php

2- www.xxxx.com/1.jpg%00.php

3- www.xxxx.com/1.jpg/%20\0.php

4-IIS7.5

# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1-在任意后缀后面加上x.php	
	形式:www.xxx.com/logo.jpg/x.php
		 www.xxx.com/logo.txt/x.php

HP解析的
1- www.xxxx.com/1.jpg/1.php

2- www.xxxx.com/1.jpg%00.php

3- www.xxxx.com/1.jpg/%20\0.php

4-IIS7.5

# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1-在任意后缀后面加上x.php	
	形式:www.xxx.com/logo.jpg/x.php
		 www.xxx.com/logo.txt/x.php
		 www.xxx.com/logo.doc/x.php

你可能感兴趣的:(CTF,网络安全,web,php)