文件上传漏洞利用是指用户绕过检测,非法上传一个可执行的动态脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
区分客户端验证与服务器端验证:通过js或VB来进行本地验证,不用把这个过程提交到服务器,比如说一个注册页面,填好注册信息后,你点击提交按钮,那么它没有跳转就提示你填写有误,这一过程一般很快,返回时页面也不晃动,但如果用服务器端验证,你填好后,可能会跳到另一页面,返回得很慢,中间有可能有一段空白时段,返回后页面出现重写或晃动返回
Pass-011.写一句话木马:
并以php为后缀名。
上传此文件:
2.页面出现提示,说明是客户端验证:
3.此时我们只需禁用js验证即可,在Pass-01做题页面,按F12进入开发者工具,在设置里禁用js。
4. 再次上传文件,上传成功。在新标签页面打开,复制链接,连接蚁剑
5. 进行测试连接,添加数据
Pass-021.上传同样的文件,提示文件类型不正确。
2.查看提示:
注:
Content-Type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型, 在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。MIME: MIME:多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序打开的方式类型,当该种扩展名的文件被访问的时候,浏览器会自动使用指定应用程序来打开,多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
MIME 类型: 每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型:
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-ta
3.查看源码:允许通过的文件类型为:
($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))
4.使用bp抓包,修改请求主体中的Content-Type为源代码中允许的类型 eg:image/png
将 application/octet-stream改为Content-Type: image/jpeg 5.找到上传的图片链接,进行测试 Pass-03 1.上传我们的文件,页面显示为:2.查看源码:
黑名单中的类型,我们不能上传
$deny_ext = array('.asp','.aspx','.php','.jsp'); if(!in_array($file_ext, $deny_ext))
分析代码,是进行黑名单验证,截取后缀名,只有 !in_array() 才能上传成功,即不在数组中,这是后端检查
通过畸形后缀名绕过: php1、php2、php3、php4、php5、php7、pht、phtml、 phar、 phps、Asp、aspx、cer、cdx、 asa、asax、jsp、jspa、jspx等 上述如果想要被当成php执行,需要有个前提条件,即Apache的httpd.conf有配置代码 AddType application/x-httpd-php .pht .phtml .phps .php5 .pht . 改一下httpd.conf文件里的#AddType application/x-httpd-php .php .phtml
为AddType application/x-httpd-php .php .phtml .php5 .php3
上传文件:
上传成功:
接下来同上关一样,复制连接,连接蚁剑
Pass-04 1.我们可以用.htaccess 来进行绕过 注:.htaccess .htaccess文件(或者”分布式配置文件”),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。 启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。 .htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。写一个.htaccess文件:
- 以php解析.htaccess文件所在目录及其子目录中的后缀为.xxx的文件文件
AddType application/x-httpd-php jpg之后上传.htaccess文件,再上传我们的一句话木马。
复制文件连接,连接蚁剑
Pass-051.我们上传.htaccess文件,发现被限制。
2.查看源码:
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
3.观察发现没有被限制的后缀名有 .php7 以及 .ini
注:
ini的知识:
user.ini : 自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。 除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['document_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。 在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。 两个新的 INI 指令,user_ini.filename 和 user_ini.cache_ttl 控制着用户 INI 文件的使用。 user_ini.filename 设定了 PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。默认值是 .user.ini。 user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
但是想要引发 .user.ini 解析漏洞需要三个前提条件:
服务器脚本语言为PHP 服务器使用CGI/FastCGI模式 上传目录下要有可执行的php文件
4.创建一个.user.ini文件并把它上传
auto_prepend_file=2.jpg
.user.ini文件里的意思是:所有的php文件都自动包含666.jpg文件。.user.ini相当于一个用户自定义的php.ini
5.然后再上传一个内容为php的一句话马,命名为=后面的文件名,上传成功后,连接蚁剑
Pass-061.无法上传php文件,我们查看源代码:发现也限制了.ini类型文件。但是没有使用strtolower()函数,可以使用大小写绕过黑名单
把.php 格式改为 .Php 上传上去之后,就会自动解析为.php
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
注:
strtolower()函数:
把所有字符转换为小写:
2.最后复制链接,蚁剑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)