文件上传基础详解

前言
tips:
*如果我们在使用蚁剑发现了返回值为空说明一句话木马语法错误,如果我们发现返回值是一串乱码 则是链接地址填写错误*

目录

一、前端js验证

二、mime类型绕过

三、黑名单绕过

四、.htaccess文件配置文件漏洞,无过滤

五、PHP的.user.ini文件(. 空格 .)

六、大小写

七、trim()去空操作

八、winous特性,以.结尾无效

九、::$data

十、一次过滤没有循环

十一、这一关进行了过滤php字符串

十二、%00截断:url 的终止符

十三、post %00截断

十四、文件包含漏洞+图片马上传(只对图片的文件头进行了检测,可以只保留文件头)

十五、文件包含漏洞+图片马上传

十六、文件包含漏洞+图片马上传

十七、二次渲染

十八、逻辑漏洞+文件竞争

十九、图片马和文件包含漏洞

二十、截取数据包

二十一、数组和文件上传检测的结合


一、前端js验证

先上传php文件尝试一下,提示只能上传\jpgpng\gif的文件,并且是在前端过滤。

文件上传基础详解_第1张图片

做一个图片马

文件上传基础详解_第2张图片

burp抓包改包,修改为php

文件上传基础详解_第3张图片

上传成功

文件上传基础详解_第4张图片

文件上传基础详解_第5张图片

二、mime类型绕过

1、JS前端绕过修改后缀也是可行的
​
2、修改mime类型

文件上传基础详解_第6张图片

Content-Type: application/octet-stream修改为image/jpeg

文件上传基础详解_第7张图片

文件上传基础详解_第8张图片

上传成功

文件上传基础详解_第9张图片

三、黑名单绕过

首先要在httpd.conf中配置 因为默认是未启用的

随便上传一个文件查看提示不允许上传asp.aspx.php.jsp

文件上传基础详解_第10张图片

有很多类型可以绕过这几种
​
php3 php4 php5 phtml  PHphpp

文件上传基础详解_第11张图片

 文件上传基础详解_第12张图片

 文件上传基础详解_第13张图片

文件上传基础详解_第14张图片

 文件上传基础详解_第15张图片

四、.htaccess文件配置文件漏洞,无过滤

适用条件
​
php版本 5.6一下 未开启nts
​
   htaccess”文件或者称为分布式配置文件,它是 Apache  服务器中的配置文件,提供了针对每个目录设置不同的配置的方法。有些服务器在上传认证时没有拦截 .htaccess  文件上传,就会造成恶意用户利用上传 .htaccess 文件解析漏洞,来绕过验证进行上传 WEBShell,从而达到控制网站服务器的目的。

将其进行上传,因为 .htaccess 是 apache 服务器中的一个配置文件,不在上传的文件的黑名单之内,所以 .htaccess 文件是可以上传成功。

文件上传基础详解_第16张图片

再上传图片马,由于 .htaccess 文件上传之后就生效了,此时所有的 png 文件都会以 php 文件的形式被解析,即可进行连接。

文件上传基础详解_第17张图片

五、PHP的.user.ini文件(. 空格 .)

自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的INI文件,此类文件仅被 CGI/FastCGI SAPI  处理。除了主 php.ini 之外,PHP 还会在每个目录下扫描INI文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录。
 使用 user.ini 文件进行文件上传时,需要服务器脚本语言为 PHP,对应目录下面有可执行的php文件,且服务器使用 CGI/FastCGI 模式。.user.ini.它比 .htaccess 用的更广,不管是nginx/apache/IIS,只要是以 fastcgi 运行的 php 都可以用这个方法。(user.ini文件利用还没搞明白 我再研究一下)
直接上传shell文件,修改为shell.php. .

文件上传基础详解_第18张图片

上传成功

文件上传基础详解_第19张图片

六、大小写

此方法只适用于windous,而linux是区分大小写的,不能正常执行

.php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".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",".htaccess",".ini"

pHP \PHP \Php \pHP3 \PHP3 \Php3 种类比较多 自行发挥

文件上传基础详解_第20张图片

 文件上传基础详解_第21张图片

七、trim()去空操作

上传shell.php后加空格绕过

文件上传基础详解_第22张图片

 文件上传基础详解_第23张图片

八、winous特性,以.结尾无效

上传shell.php后加.

文件上传基础详解_第24张图片

 文件上传基础详解_第25张图片

九、::$data

::$data的作用是将webshell.php当做字符流处理,所以对其后缀名检测不成功。

文件上传基础详解_第26张图片

 文件上传基础详解_第27张图片

十、一次过滤没有循环

. .绕过

文件上传基础详解_第28张图片

十一、这一关进行了过滤php字符串

phphpp\Phphpp等等 自行发挥

文件上传基础详解_第29张图片

十二、%00截断:url 的终止符

本题考查%00截断,相当于复现CVE-2006-7243,所以需将php版本设置为PHP 5.3.4以下, 并关闭`magic_quotes_gpc`选项。

php.ini

文件上传基础详解_第30张图片

可见保存的路径也可以由用户所控制,GET类型的传参。因此在保存路径中修改为:
save_path=../upload/test.php%00

文件上传基础详解_第31张图片

文件上传基础详解_第32张图片

十三、post %00截断

文件上传基础详解_第33张图片

解码以后变成不可见字符

文件上传基础详解_第34张图片

十四、文件包含漏洞+图片马上传(只对图片的文件头进行了检测,可以只保留文件头)

刚开始图片一直上传不上去,一直报识别不了图片格式,到最后才发现是图片的问题 ,前几关就没有那么严格,没检测出来
创建图片马后直接上传

文件上传基础详解_第35张图片

文件上传基础详解_第36张图片

直接上传图片马,拿到图片路径名字-----../upload/7020220721113955.jpg

文件上传基础详解_第37张图片

因为本关卡还提示需要通过文件包含来读取jpg里面的小马代码拿shell,所以需要建立一个包含代码的文件,我这里就定义名称为in.php,内容如下:
然后直接利用文件包含拿shell

文件上传基础详解_第38张图片

 文件上传基础详解_第39张图片

十五、文件包含漏洞+图片马上传

十六、文件包含漏洞+图片马上传

和上边类同
​
前提条件:要开启一个php.ini的配置
​
黑屏的情况下重启[phpstudy](https://so.csdn.net/so/search?q=phpstudy&spm=1001.2101.3001.7020),删除upload再新建一个upload
​
删掉分号

文件上传基础详解_第40张图片

十七、二次渲染

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

文件上传基础详解_第41张图片

对比上传后和上传前木马文件

文件上传基础详解_第42张图片

文件上传基础详解_第43张图片

发现一句话木马被过滤,对比不检测修改的的地方加入进去

文件上传基础详解_第44张图片

再次上传,发现并没有被过滤

文件上传基础详解_第45张图片

没看到一句话木马应该是被转化格式了

文件上传基础详解_第46张图片

另外两种方式转载分享
​https://blog.csdn.net/weixin_45588247/article/details/119177948?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165871609416781818770412%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165871609416781818770412&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-119177948-null-null.142^v33^new_blog_pos_by_title,185^v2^control&utm_term=%E4%BA%8C%E6%AC%A1%E6%B8%B2%E6%9F%93%E7%BB%95%E8%BF%87&spm=1018.2226.3001.4187

十八、逻辑漏洞+文件竞争

上传木马文件

');?>

文件上传基础详解_第47张图片

设置多线程并发,

先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除
 这就在文件的处理顺序上出现了问题,不管文件类型是否合格就上传至服务器,之后再对其类型进行判断,这样的处理顺序导致了在多线程的情况下,有可能对于不合格的文件还没来得及删除就已经被访问,导致不合格的文件绕过了限制
​
因此我们可以打个时间差:上传木马,只需要在它删除之前访问即可

文件上传基础详解_第48张图片

 文件上传基础详解_第49张图片

#用来请求fopen.php
import requests
url = "http://172.16.1.148/upload-labs-master/upload/fopen.php"
url_2 = "http://172.16.1.148/upload-labs-master/upload/shell.php"
while True:
    html = requests.get(url)
    html_2 = requests.get(url_2)
    if html_2.status_code == 200:  #判断shell.php是否写入成功
        print("OK")
        break
生成shell.php成功

文件上传基础详解_第50张图片

连接成功 

文件上传基础详解_第51张图片

文件上传基础详解_第52张图片

十九、图片马和文件包含漏洞

#跟18是一样的,附上脚本
import requests
 
url = "http://www.bj.com/upload-labs/upload/include.php?page=./../shell.png"
 
while True:
 
    html = requests.get(url)
 
    if ( 'Warning'  not in  str(html.text)):
 
        print('ok')
 
        break

二十、截取数据包

有一个更改上传后名称的功能点

文件上传基础详解_第53张图片

正常的绕过也都是可以的

文件上传基础详解_第54张图片

文件上传基础详解_第55张图片

 文件上传基础详解_第56张图片

二十一、数组和文件上传检测的结合

代码审计看别人写的吧 我不会
​
参考链接
​
https://baynk.blog.csdn.net/article/details/102917199?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-102917199-blog-110919368.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-102917199-blog-110919368.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2

抓包修改上传

文件上传基础详解_第57张图片

文件上传基础详解_第58张图片

你可能感兴趣的:(漏洞top10,php,安全,网络安全)