upload-labs

upload-labs,第1张

upload-labs      简括:

     文件上传漏洞利用是指用户绕过检测,非法上传一个可执行的动态脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

     区分客户端验证与服务器端验证:

       通过js或VB来进行本地验证,不用把这个过程提交到服务器,比如说一个注册页面,填好注册信息后,你点击提交按钮,那么它没有跳转就提示你填写有误,这一过程一般很快,返回时页面也不晃动,但如果用服务器端验证,你填好后,可能会跳到另一页面,返回得很慢,中间有可能有一段空白时段,返回后页面出现重写或晃动返回

Pass-01

1.写一句话木马:

并以php为后缀名。

上传此文件:

2.页面出现提示,说明是客户端验证:

 

 3.此时我们只需禁用js验证即可,在Pass-01做题页面,按F12进入开发者工具,在设置里禁用js。

4. 再次上传文件,上传成功。在新标签页面打开,复制链接,连接蚁剑

5. 进行测试连接,添加数据

 Pass-02

1.上传同样的文件,提示文件类型不正确。

 

 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-05

1.我们上传.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-06

1.无法上传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.最后复制链接,蚁剑。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5436306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存