文件上传,主要就是想方法将webshell上传到服务器。同时因为服务器一般不会任意文件上传,会有一定的过滤机制,这个时候就需要绕过这些成果上传了。
制作图片码 :copy 1.jpg/b + 2.txt 2.jpg
(1)前端验证、
绕过:先修改文件后缀为可上传后缀,再在burpsuite中修改后缀。
(2)验证文件类型(content-type)
绕过:先上传正常后缀的文件,再在burpsuite中修改后缀,这时候因为上传文件是正常的,所以文件类型是可通过的类型。
(3)黑名单过滤
这里绕过就只能希望写的代码不够严谨,黑名单不够全面,然后使用名单漏掉的后缀上传。
(4)后缀过滤
绕过:这里的后缀检测千奇百怪,比较常见一点的又大小写检测、空格检测、点检测。然而有点还会有一些字符串检测。绕过方式就是见机行事了,如果知道源码就可以根据源码的逻辑来构造后缀绕过。如果不知道,就尝试一下常见的大小写、空格、点等等。
(5)文件流绕过
有的没有改过滤的时候,可以考虑在.php后面加::$DATA(Windows文件流绕过)。这里的::$DATA表示将文件写入的是$DATA中,但是php解析的时候不会解析。
然后访问cx.php就可以了。
(6)apache配置漏洞
apache有个配置文件.htaccess。如果可以上传该配置,则可以在里面添加语句AddType application/x-httpd-php .jpg ,将jpg当做php代码执行。
将文件重命名为.htaccess:
cmd:ren 1.txt .htaccess
(1).%00绕过
move_uploaded_file(file,newloc)这个函数有一个遗留漏洞,就是在这个函数接收参数的时候,遇到0x00就视为结束。
get传参可以直接使用%00,如果是post,可以修改数据包的hex码为00.
(2)图片检测绕过
将恶意代码组合到图片中,就可绕过。比如下列三个函数都可简单绕过。
(1)getimagesize
(2)exif_imagetype
(3)imagecreatefromjpeg 二次渲染
(3)条件竞争
竞争条件”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
文件上传会先存下来,然后检测,如果不通过就删除,这里条件竞争就是利用删除之前的一点时间差,通过不断获取页面来达到目的。一般这种时候都是通过上传文件写入一些信息,只要有一次访问成功,信息写入,即是上传文件被删除也算是成功了。
(4)IIS6.0的漏洞
a.默认配置漏洞
IIS6.0 除了将ASP后缀当做ASP进行解析,当文件名为.asa .cer .cdx也会当做asp去解析,他们都使用了同样的解析dll。
b.IIS6.0解析逻辑错误
注:IIS5.1和IIS7.5无此漏洞,
IIS6.0 在处理含有特殊符号的文件路径时候会出现逻辑错误:
i) test.asp;.jpg,IIS6.0在处理此类文件时会将其当成asp解析,也就是只解析;之前的内容。
ii). test.asp/123.jpg 也会被当做asp进行解析。这里的test。asp被视为一个文件夹,里面的所有内容都将被当成.asp解析。
(5)CGI解析漏洞
Nginx(Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器)默认以CGI的方式解析php。
当url为www.xx.com/phpinfo.jpg/1.jpg时候,$fastcgi_script_name会被设置为”phpinfo.jpg/1.php”,然后传给php CGI,如果开启了fix_pathinfo,那么在解析的时候,1.php就会被视为path_info,作为路径信息,可类似于代码注释,说明该文件是php,这时候就会按照php去解析前面的phpinfo.jpg。
所以,只需要在.jpg后面加/.php就可以成功绕过。