一、空格和点

Windows下xx.jpg[空格] 或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点。
如【muma.php.】此处会删除末尾的点之后以php解析。

二、.htaccess

.htaccess文件就是.htaccess文件,如果你将它改为muma.htaccess或者其他的名字是无法解析的。
在实战中有可能上传上去这个文件会被自动重命名(如upload-labs第三关给上传的文件赋予新的随机时间戳名字),被重命名了就无法再使用.htaccess文件

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

三、常用语言后缀名

PHP

  1. php,php5,php4,php3,php2,pHp,pHp5,pHp4,pHp3,pHp2,html,htm,phtml,pht,Html,Htm,pHtml

JSP

  1. jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml

ASP和ASPX,ASPX即asp.net

  1. asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr

四、::DATA流文件

Windows中ADS流文件格式为name::DAATA,流文件就是没有结构的文件。
如果文件名+”::$DATA”,那么服务器就会把::$DATA之后的数据当成文件流处理,不会检测后缀名。

例如:x.php::$DATA,Windows会自动去掉末尾的::$DATA变成x.php,可以利用来绕过黑名单。

五、大小写

Windows对大小写不敏感
什么意思呢?就是Windows识别不出大写和小写的区别,两者对Windows来说都一样的解析
Linux对大小写敏感

六、双写绕过

敏感字符检测如果没有循环检测,那么只检测一遍,可以通过双写去绕过检测

敏感字检测

如phphpp,敏感字检测会检测到中间的php,然后会将敏感字去除,去除之后两边的字符拼接起来,恰好又组成了php

敏感字符检测

同敏感字类似,我们写两个敏感字,如果开发者没有写循环语句,那就只执行一遍检测,只去除一个敏感字符。

七、00阶段

0x00,%00,/00之类的截断,都是一样的,只是不同表示而已
URL中,%00表示ascll码中的0
image.png
而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束
也就是程序读取到%00时就不会再往后进行读取,转而开始执行命令

八、图片马

图片马本质是包含解析执行图片里面的php语句

文件头标识

  1. 文件对自身文件内容,有着自己的文件头标识,我们只需要文件转为16进制,
  2. 然后看各个文件类型对文件头的定义,就可以知道文件的类型了。
  3. 例如,jpeg图片格式的文件头(2byte)标识为:0xff, 0xd8,结尾(2byte)标识为:0xff,0xd9

php在底层中已经实现了对图片格式的识别,文件类型头部有关于格式的标识,所以我们不能将php代码插入到图片头
插入到图片尾的一句话木马代码不会影响图片的正常解析,由于图片自身有自己的开始符号和结束符号,所以图片不会损坏(因为图片的解析过程为读到0xd8就知道接下来的内容是图片,读到0xd9就知道图片内容结束了,就和HTML标签类似)

php会将<?php标签外的字符当成了正常字符输出,只运行php的部分代码。

九、条件竞争

由于服务器端在处理不同用户的请求时是并发进行处理的,如果对这些并发操作处理不当的话会由于一些时序问题导致一些异常情况的发生

如upload-labs中的条件竞争。服务器接收到上传文件请求后直接将其文件存入系统,然后再对已经存入的文件进行判定是否符合白名单要求,若符合要求则将其进行改名,若不符合则再将该文件删除
问题出现在:服务器处理上传文件请求时,无论何种文件均被服务器直接存入系统,虽说后来又及时“补救”,将其不符合白名单的文件进行删除,但我们已经上传上来了,那么只要我们在服务器检测完我们上传的文件内容是否符合规定之前就利用该文件进行一些操作,如上传一个写一句话木马的文件,让它去在被删除之前写入一个一句话木马。

  1. <?php
  2. $file=fopen("muma.php","w");
  3. $string='<?php @eval($_POST["test"]); ?>';
  4. fwrite($file,$string);
  5. fcolse();
  6. ?>

问题

人的手速和服务器的处理速度没得比,但我们可以用脚本辅助,如使用Burp抓包再发送到Intruder,调成无参数爆破,接着不停地发包和访问执行该文件。
然后再使用蚁剑连接被该文件创建的一句话木马文件。

十、二次渲染

概念

目前很多网站都会对用户上传的图片再次压缩、裁剪等渲染操作(如PHP中的imagecreatefromjpeg()等函数),所以普通的图片马都难逃被渲染的悲剧。
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
判断是否被二次渲染可以从图片大小、图片尺寸、图片内容等方面着手。

利用思路

将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。

判断哪里没被二次渲染

上传图片,然后下载该图片,使用winhex、010 Editor等工具打开
010 Editor16进制编辑器使用文件对比,对比上传前后的文件哪里被改变了,哪里没改变,然后在不会被改变的内容中间插入一句话木马代码即可。