由于开发人员对用户上传文件的部分处理的不够严谨,从而导致用户可以上传恶意文件,并执行这种恶意文件,从而获取执行服务器的权限。
前端检查后缀名,指定jpg
将一句话木马的后缀改为jpg,然后上传,用burp suite抓包后,将上传的文件后缀改为php就可以直接上传成功
语言:asp/aspx 后缀:asp、aspx、asa、asax、ascx、ashx、asmx、cer
语言:php 后缀:php、php5、php4、php3、php2、phtml、pht、php7、php6、 phtm、PhP
语言:jsp 后缀:jsp、jspa、jspx、jsw、jsv、jspf、jhtml
在Apache里,.htaccess是一个配置文件。它可以用来控制所在目录的访问权限以及解析设 置。可以通过修改该文件的配置项,将该目录下的所有文件作为php文件来解析。
服务端允许.htaccess文件生效,需要在httpd.conf中,修改两处配置项:
在可以上传.htaccess文件时,先上传.htaccess文件,文件内容
SetHandler application/x-httpd-php
然后在上传shell.png,png里面写入一句话木马,然后就可以直接连接了
比如对方把第二点所有的后缀都给过了,但是只过了小写的,大写的没有过滤,我们就可以上传shell.PHP 来绕过
条件:
.user.ini,它会影响php.ini中的配置,从而将指定的文件内容按php来解析,影响的范 围该文件所在的目录以及子目录。需要等待php.ini中的user_ini.cache_ttl设置的时间 或重启Apache才能生效,且只在php5.3.0之后的版本才生效。.user.ini比.htaccess用 的更广,不管是nginx/Apache/IIS,只要是以fastcgi运行的php都可以用这个办法。如果 使用Apache,则用.htaccess文件有同样的效果。但是,.user.ini必须在当前目录下有以php为后缀的文件
利用方法
先上传一个.user.ini,内容是
auto_prepend_file = shell.jpg
shell.jpg
条件:
用户上传图片马时,用Burp拦截,在文件尾部加入空格。例如:shell.php (这有个空格)。带有空格的后缀可以绕过黑名单的检测,而文件存在在Windows服务器上,会自动去除后缀中的空格。
条件:
利用方式与空格相同
条件:
我们上传一个名为shell.php::$DATA的木马,然后,在浏览器中访问shell.php就行了
当服务端使用str_ireplace()函数将匹配到的内容替换为空,就可以用双写绕过
shell.phphpp
如果服务端只对Content-Type类型进行检查的话,就可以将Content-Type类型修改为能通过的就行,后缀名可以不用改。
比如用burp suite抓包,然后将Content-Type类型改为image/jpg,就可以上传通过
php.ini中的magic_quotes_gpc为off
通过抓包截断将【shell.php.jpg】后面的一个【.】换成【0x00】。在上传的时候,当文件系 统读到【0x00】时,会认为文件已经结束,从而将【shell.php.jpg】的内容写入到 【evil.php】中,从而达到攻击的目的。(上传文件后,服务端会重新命名文件名)
条件
方法与%00截断无异
一些开发者会检查文件头,如果文件头不符合,就算其他的符合,也不会给上传,所有可以伪造文件头,最常用的文件头就是GIF89a
getimagesize()函数会返回一个数组,其中下标2是图像的类型。1=GIF,2=JPG, 3=PNG。这 里上传一个正常图像后缀的图片马,使用文件包含漏洞运行图片马中的恶意代码即可。
exif_imagetype()— 判断一个图像的类型。检查图像的第一个字节。可能返回的常量有 IMAGETYPE_GIF=1;IMAGETYPE_JPEG=2;MAGETYPE_PNG=3;文件头不正确返回false。 上传具有正常文件头的图片马即可。 gif的文件头为GIF89a;png的文件头为89504E47;jpg的文件头为FFD8FF。然后使用文件包含 漏洞运行图片马中的恶意代码。
可配合IIS5.x-6.x解析漏洞,apache解析漏洞,nginx解析漏洞,IIS7.5解析漏洞或文件包含漏洞。
条件竞争漏洞(Race condition)官方概念是“发生在多个线程同时访问同一个共享代码、变 量、文件等没有进行锁操作或者同步操作的场景中。 upload-labs中的Pass-17是一个典型的条件竞争上传 代码执行逻辑:先移动,后检测,不符合再删除,符合则改名字。 因此我们可以让burp一直发包,让php程序一直处于移动php文件到upload目录这个阶段 我们使用多线程并发访问上传的文件,总会有一次在上传文件到删除文件这个时间段访问到上传的 php文件,一旦我们成功访问到上传的php文件,那么它就会向服务器写一个shell。
当服务端时apache是,可以上传一个复杂的后缀,比如
shell.php.asdfj apache遇到不认识的,就会往前跳