愿浪飒精神伴你左右,网络安全之路任重而道远。

文件上传绕过

Web渗透学习笔记 langsa 3年前 (2021-12-07) 621次浏览 0个评论
文章目录[隐藏]

一句话木马

PHP:    
<?php @eval($_POST['chopper']);?>

ASP:    
<%eval request("chopper")%>

ASP.NET:    
<%@ Page Language="Jscript"%><%eval(Request.Item["z"],"unsafe");%>

图片马制作:copy 1.jpg /b + 1.txt /a 2.jpg(1.txt为一句话木马,2.jpg新生成的图片马)

文件上传防御

1.图床(A网站上传图片放到另一个网站或服务器)

2.加强检测*(白名单+内容检测+权限设置+安全中间件)

如果没有防护规则的文件上传,只要上传就可以拿下目标

检测恶意代码:

​ 前端检测(js)= 没有检测

​ 后端检测:黑白名单机制(比较危险),白名单更安全

服务端检测几个常见的手段: 检查Content-Type (内容类型) 检查后缀 (检查后缀是主流) 检查文件头

文件上传流程:

上传,检测,上传到缓存文件(tmp),后端代码移动,移动到指定目录重命名

文件上传绕过

1.前端验证绕过

抓返回包删除js(Do intercept)

抓包改后缀(上传正常文件或图片,数据包中改木马后缀)

2.Content-Type方式绕过

检查文件类型,抓包改后缀(上传正常文件或图片,数据包中改木马后缀)

3.黑名单绕过

默认状态下.php3,.php4,.php5,.phtml 都是会被解析为php的,

其他能被解析的扩展
jsp jspx jspf
asp asa cer aspx
php phptml php3 php4
exe exee

4..htaccess文件绕过

.htaccess是什么?全称是Hypertext Access(超文本入口) .htaccess文件也被成为分布式配置文件

.htaccess功能(默认是不开启的,伪静态网站一般会开启): 文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表

例如:AddType application/x-httpd-php .jpg 这个指令代表着.jpg文件会当做php来解析

cmd重命名:ren 文件 .htaccess

方法:上传图片马.jpg后再上传AddType application/x-httpd-php .jpg内容的.htaccess文件即可将图片马作为php连接成功。

5.后缀大小写绕过

WEB容器除非非常老的版本,不然都不区分大小写

例如php.php=>php.PhP/PHp

6.文件后缀(空)绕过

黑名单中没有过滤空值,那么php和php空格是不一样的,抓包文件名后缀添加空格即可绕过

7.文件后缀(点)绕过

与6类似,windows有一个特性,会自动去掉后缀名最后的点。

文件名.php.和文件名.php相同。抓包文件名后缀添加点即可绕过

8.::$DATA(Windows文件流绕过)

利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。

也就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。(隐藏的寄生虫)

例如:a.txt::$DATA ::$DATA就是默认不修改文件流的情况 所以生成一个正常的a.txt。但后端检测的时候a.txt::$DATA和a.txt是不一样,从而绕过。

藏文件:echo 内容 > 被依附的文件:新建文件

9.构造文件后缀绕过

strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。

$file_ext = strrchr($file_name, '.'); 是检测末尾最后是否是点,返回点以及后面的部分。

php. .,也就是文件名.php点空点。

去掉点→返回点空→最后剩下 文件名.php.可以解析,完美绕过。

10.双写文件后缀绕过

$file_name = str_ireplace($deny_ext,"", $file_name);
将敏感后缀替换为空
因此我们可以利用双写绕过,eg:pphphp=>php

11.%00截断绕过

%00(url编码):表示结束

上传过程中被重命名,后面添加为自定的名称格式并截断即可上传成功。

属于php5.3以下的一个漏洞

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

12.00截断绕过

get传参变为post,通过修改hex编码使得截断形成,完成绕过。

00(Hex):表示结束

13.图片马绕过

14.getimagesize图片类型绕过

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

15.php_exif模块图片类型绕过

16.二次渲染绕过

一般渲染不会渲染图片的所有部分。

利用gif动态图图片马绕过,在第三行第四行添加比较好。

17.条件竞争绕过

①先上传后检测:拼速度以至于来不及删除

竞争条件:”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

对php做手脚,在php插入新建文件的代码

<?php file_put_contents('123.php','<?php @eval($_REQUEST[8])?>');?>

本地测试发现访问该php即可生成一句话木马123.php

img

我们用burp模块抓包然后去爆破就行,一个不断上传,一个不断访问

img

直到能够访问到123.php即可连接木马管理。

②先检测后上传

18.条件竞争(二)

与7相同,只不过上传的是图片马

19.move_uploaded_file()截断(另一个00截断)

move_uploaded_file() ,这是移动文件的函数,上传上去然后移动到这边重命名

修改后缀,用hex编辑00在php后截断

文件上传解析漏洞

IIS6.0解析漏洞(一):

​ IIS6.0除了将ASP后缀当做ASP进行解析的同时,当文件后缀名字为.asa .cer .cdx 也会当做asp去解析,这是因为IIS6.0在应用程序扩展中默认设置了.asa .cer .cdx 都会调用 asp.dll。

直接通过抓包修改后缀上传cer的图片马连接成功

IIS6.0解析漏洞(二):

IIS5.1和IIS7.5无此漏洞。 IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式: test.asp;.jpg 他将当做asp进行解析 test.asp/123.jpg 他将当做asp进行解析

请求 /aaa.asp;xxxx.jpg N1:从头部查找查找 "."号,获得 .asp;xxxx.jpg N2:查找";"号,如果有则内存截断 N3:查找"/",如果有则内存截断 最终,将保留下来 .asp 字符串,从META_SCRIPT_MAP脚本映射表里与扩展名匹配对比,并反馈给了asp.dll处理

①test.asp;.jpg

②test.asp/123.jpg

CGI解析漏洞

Nginx默认是以CGI的方式支持PHP解析的。

普遍的做法是在Nginx配置文件中通过正则匹配设SCRIPT_FILENAME。

当访问http://www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME(绝对路径)传递给PHP CGI,如果开启了cgi.fix_pathinfo=1选项(这个默认值就是1,所以没有设置过就是开启)。

PHP会认为SCRIPT_FILENAME(绝对路径)是phpinfo.jpg,而1.php是PATH_INFO,所以就会phpinfo.jpg作为PHP文件来解析了.

我们只需要在正常的.jpg后面加/.php就可以成功的绕过解析

上传php图片马php.jpg

后面添加/123.php连接成功


本文标题:文件上传绕过
本文链接:https://blog.langsasec.cn/index.php/2021/12/07/uploadshell/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
喜欢 (3)
[]
分享 (0)
langsa
关于作者:
一个网络安全从业人员
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址