《CTFshow - Web入门》03. Web 21~30

news2025/7/20 9:25:13

Web 21~30

  • web21
    • 知识点
    • 题解
  • web22
    • 知识点
    • 题解
  • web23
    • 知识点
    • 题解
  • web24
    • 知识点
    • 题解
  • web25
    • 知识点
    • 题解
  • web26
    • 知识点
    • 题解
  • web27
    • 知识点
    • 题解
  • web28
    • 知识点
    • 题解
  • web29
    • 知识点
    • 题解
  • web30
    • 知识点
    • 题解


web21

知识点

  • tomcat 认证爆破
  • burpsuite暴力破解(Sniper)之custom iterator使用

Payload Sets 中选择类型:custom iterator(自定义迭代器)。
Payload Processing 中进行编码设置:进行base64编码。
取消 Palyload Encoding 编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响 base64 加密的结果。

题解

随便输入用户名:admin,密码:111

在这里插入图片描述
抓包看一下。没找到username和password的字段。but:
Authorization 请求头中,输入的 用户名 / 口令 以base64的形式传输。

在这里插入图片描述
格式是:用户名:密码

在这里插入图片描述
Intruder爆破设置

在这里插入图片描述
选择自定义迭代

在这里插入图片描述
拼接语句1

在这里插入图片描述
拼接语句2

在这里插入图片描述
拼接语句3
添加爆破密码字典

在这里插入图片描述
拼接完成后,设置base64编码。在payload processing 进行编码设置。
最后的 URL编码 不用选择。

在这里插入图片描述
最后的密码是shark63。

在这里插入图片描述

下面的代码提供了另一种解题思路

# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-11-20 19:16:49
# @Last Modified by:   h1xa
# @Last Modified time: 2020-11-20 20:28:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

import time
import requests
import base64

url = 'http://41a801fe-a420-47bc-8593-65c3f26b7efa.chall.ctf.show/index.php'
# URL换成实际的靶场网址

password = []

# 使用字典
with open("1.txt", "r") as f:  
	while True:
	    data = f.readline() 
	    if data:
	    	password.append(data)
	    else:
	      break
	    


for p in password:
	strs = 'admin:'+ p[:-1]
	header={
		'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8'))
	}
	rep =requests.get(url,headers=header)
	time.sleep(0.2)
	if rep.status_code ==200:
		print(rep.text)
		break
		

web22

知识点

  • 域名也可以爆破

题解

域名更新后,flag.ctf.show域名失效
所以这道题没法做了。but爆破方式没有太大差别。

web23

知识点

  • MD5加密:产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。生成结果是固定的128字节,通常用一个32位的16进制字符串表示。
  • PHP:substr()、intval()、以及代码分析

题解

分析代码:变量token被md5加密,且它的第一位=第十四位=第十七位,化为整数后(第一位+第十四位+第十七位)/ 第一位=第三十一位,则可获得flag。
在这里插入图片描述
选择burp爆破也可以,但可以直接用写脚本跑出需要传递的值

# coding: utf-8

import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
for a in dic:
    for b in dic:
        c = (str(a)+str(b)).encode('utf-8')    # python3中必须进行utf-8编码
        token = hashlib.md5(c).hexdigest()
        if token[1:2] == token[14:15] and token[14:15] == token[17:18]:
            if (int(token[1:2])+int(token[14:15])+int(token[17:18]))/int(token[1:2]) == int(token[31:32]):
                print(c)

传递 token=3j

在这里插入图片描述

web24

知识点

  • PHP:伪随机数、mt_srand()、mt_rand()

提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数。
如果设置了 seed参数,生成的随机数就是伪随机数,即每次生成的随机数是一样的
简单来说就是通过这个函数mt_srand()来设定一个种子seed
再通过mt_rand()来结合种子按照一定的规则得到一个随机数
这是一个线性的计算,每次请求得到的随机数都是不一样的,但是只要种子一样,得到的随机数都是像一个一次函数一样变化的,就像y=ax=b,x就是请求的次数,a和b就是由种子决定

题解

题目已经告诉了我们种子

在这里插入图片描述
可以直接写一个php脚本来得到随机数

<?php
    mt_srand(372619038);
    echo mt_rand();
    

在这里插入图片描述
解决

在这里插入图片描述

web25

知识点

  • 和上题一样是伪随机数的题目。
  • 这个题需要使用工具 php_mt_seed 。专门用来跑mt_srand()种子和 mt_rand()随机数。
    下载地址:https://www.openwall.com/php_mt_seed/

题解

通过分析可以得出如下思路:

种子涉及到flag,不能直接求到
if((!$rand)) 要使这个为真,就要让 $rand=0 ,
而 $rand = intval($r)-intval(mt_rand()) 
所以要得到随机数才能构造 $r=$mt_rand()

所以我们还要求得种子,这就要用到php_mt_seed来逆推种子了

在这里插入图片描述
先传递 r=0,可得到随机数的相反数,这里随机数为2140655666。(不同靶场获得的随机数不一样)

在这里插入图片描述
下载好工具后拉到kali里面,打开文件夹,运行终端,输入 make

在这里插入图片描述
输入 ./php_mt_seed 随机数 ,开始爆破

在这里插入图片描述
因为不知道是第几次得到这个随机数,所以爆破出了很多个
398826382
398826383
966551370
1162957153
1259472860
3045777377
3123628127

这就需要写一个php的脚本来测试是哪个种子第一次就得到这个随机数

<?php
    $num = 1162957153;
    mt_srand($num);
    echo mt_rand();
    

发现种子可能有多个,分别是1162957153、1259472860、3045777377

在这里插入图片描述
接下来就得一个一个试了
对其中一个可能的种子请求两次并求和得到token的值

在这里插入图片描述

<?php
    $num = 3045777377;
    mt_srand($num);
    $a1 = mt_rand();
    $a2 = mt_rand();
    $a3 = mt_rand();
    echo $a1."<br/>";
    echo $a2."<br/>";
    echo $a3."<br/>";
    echo ($a2 + $a3)."<br/>";

    

这样需要的值都拿到了,接下来用burp改个包提交即可。
最后得到:
r=3045777377
token=3295063840

在这里插入图片描述

web26

知识点

这题确实是可以爆破出来。不过…

题解

点击“同意协议,开始安装”后,点击下面的按钮,竟然弹出了连接成功。
在这里插入图片描述
直接上burp获得了flag。

在这里插入图片描述

第二种方法

当然也可以直接用burp爆破。

在这里插入图片描述
选择字典后就可以开始爆破了。这里用了之前的一个字典。然后密码看了其他师傅的writeup后手动添加到字典里的…密码是7758521

在这里插入图片描述
最后通过长度筛选获得请求成功的信息

在这里插入图片描述

web27

知识点

  • burpsuite暴力破解(Sniper)之Dates使用

题解

网页是菜鸡学院教务管理系统
可以下载录取名单,可以查讯学生学籍信息

在这里插入图片描述
录取名单里面有学生姓名和部分身份证号,屏蔽的信息是生日年月日。

在这里插入图片描述
学生学籍信息查询系统中只需要输入姓名和身份证就可以查询信息。
那就以第一个同学为例。

在这里插入图片描述
burp抓包

在这里插入图片描述
爆破模块有一个Dates模块,专门用来爆破日期信息,把格式调好,就设定一个范围开始爆破

在这里插入图片描述
爆破出来生日为19900201
burp获取的结果是html编码过的,可以直接在浏览器控制台解析

在这里插入图片描述
也可以直接查询

在这里插入图片描述
登录

在这里插入图片描述

web28

知识点

  • burpsuite暴力破解(Cluster bomb)之 Numbers 使用

题解

看url会比较奇怪,是0/1/2.txt。如果修改最后的2.txt会被无限重定向,不删除2.txt只修改前面的0和1依旧会被无限重定向。

在这里插入图片描述
所以,先去掉2.txt,对前面两个数字进行爆破。

攻击类型选择Cluster bomb(集束炸弹)

在这里插入图片描述
设置 payload 1

在这里插入图片描述
payload 2 同理

在这里插入图片描述
爆破成功

在这里插入图片描述

web29

知识点

  • PHP:preg_match() 、eval()、嵌套eval逃逸参数
  • Linux命令:system() 函数、tac 命令、反引号、通配符、nl 命令、cp 命令
  • 注意内联命令执行的反引号
  • 注意php语句的结束符分号

当然该题涉及的原理也很重要ヾ(✿゚▽゚)ノ

题解

preg_match 函数用于执行一个正则表达式匹配。
这次的判断是不能出现flag字样,后面 i 意思是不分辨大小写。
匹配字符串flag,那么使用通配符、单引号(成对)等方式简单绕过。

在这里插入图片描述

方法一

url + ?c=system('tac fla?.php');
  • system() 这个函数是系统调用。类似于在cmd窗口中执行,其参数是可执行的命令。
  • tac 命令本质上是cat命令,但其目的是反向连接文件。
    tac 命令用于按相反顺序逐行连接和打印文件内容。和 cat 命令一样,将每个文件连接到标准输出,但顺序相反,逐行打印,首先打印最后一行。
  • 利用Linux系统的通配符 ? 绕过
  • 所以使用 cat 命令也可以获取flag,但需要在源码中查看。

在这里插入图片描述

方法二

url + ?c=echo `tac fl''ag.php`;
  • 反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。
  • '' 符号并不会影响命令的执行,所以我们可以插入这些符号来绕过。在linux中可以使用 ’ 来绕过,比如 fl’'ag 就等效于 flag。

在这里插入图片描述
方法三

url + ?c=echo `nl fl?g.php`;
  • nl 命令:Linux中nl命令和cat命令很像,不过nl命令会打上行号
    nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号。
    注意nl指令没有回显,要echo出来才有效果

查看源码获得flag

在这里插入图片描述
方法四

url + ?c=`cp fl?g.php 1.txt`;

复制 flag.php 成为 1.txt 再访问 1.txt 来获得信息

在这里插入图片描述
方法五
嵌套eval逃逸参数

url + ?c=eval($_GET[1]);&1=system('tac flag.php');

逃逸出一个1,flag在1里不会被过滤 。

在这里插入图片描述
除此以外还有三种方法。先放个链接在这里,之后再研究(tql
ctfshow-web入门-命令执行-web29

web30

知识点

方法都和上一题差不多。掌握原理就轻松很多了。果然上一题学了那么多方法是不亏的啊 o(* ̄3 ̄)o

题解

在这里插入图片描述
随便用上一题的一种方法就好了。这里用的是

url + ?c=echo `tac f''lag.ph''p`;

得手

在这里插入图片描述

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

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

相关文章

用Numba:一行代码将Python程序运行速度提升100倍

用Numba&#xff1a;一行代码将Python程序运行速度提升100倍 在《用PyPy加速Python程序》中我们看到&#xff0c;PyPy通过JIT技术可以将Python的运行速度平均提高3-4倍。但即便是提升后&#xff0c;Python的执行速度依然无法与C/C/Rust同日而语。并且PyPy对Python程序的优化对…

【计算机毕业设计】33.快递取件预约系统源码

一、系统截图&#xff08;需要演示视频可以私聊 摘 要 本论文主要论述了如何使用JSP技术开发一个快递取件预约系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

GEO振弦式钢筋计适用范围

适用范围 钢筋计&#xff1a;用于监测岩土工程混凝土建筑物的应力&#xff0c;适用于长期埋设在水工建筑物或其他建 筑物内部&#xff0c;测量结构物内部的钢筋应力。 锚杆应力计&#xff1a;钢筋计用于测量锚杆应力时&#xff0c;成为锚杆应力计。装上锚杆应力计的锚杆称…

Flink部署之Yarn

Flink部署之Yarn 一、环境准备 1、Flink 是一个分布式的流处理框架&#xff0c;所以实际应用一般都需要搭建集群环境。 需要准备 3 台 Linux 机器。具体要求如下&#xff1a; 系统环境为 CentOS 7.5 版本。安装 Java 8。安装 Hadoop 集群&#xff0c;Hadoop 建议选择 Hadoop…

ORB-SLAM2 ---- Tracking::TrackReferenceKeyFrame函数

目录 1.函数作用 2.步骤 3.code 4.函数解析 4.1 将当前帧的描述子转化为BoW向量 4.2 总体解释 1.函数作用 用参考关键帧的地图点来对当前普通帧进行跟踪。 2.步骤 Step 1&#xff1a;将当前普通帧的描述子转化为BoW向量 Step 2&#xff1a;通过词袋BoW加速当前帧与参考帧…

PG::Covfefe

nmap -Pn -p- -T4 --min-rate1000 192.168.205.10 nmap -Pn -p 22,80,31337 -sCV 192.168.205.10 先查看31337端口的robots.txt目录&#xff0c;几个隐藏文件未发现可利用的地方 dirb对31337路径的枚举中发现了.ssh 访问后发现存在私钥 下载id_rsa和id_rsa.pub 得知用户名为…

Vscode-Git graph怎么看?

VScode可以使用插件查看git提交图谱&#xff0c;这个图谱看起来眼花缭乱&#xff0c;今天花时间看懂了&#xff0c;在这里分享一下。 在Vscode插件中搜索git graph安装 打开git项目&#xff0c;在左下角可以看到git graph 在右侧可以看到按照时间分布的commit&#xff0c;代表…

Java JSP JAVAweb在线考试系统源码网上考试系统源码(ssm考试管理系统)

JSP在线考试系统源码网上考试系统源码&#xff08;ssm考试管理系统&#xff09;

PLC中ST编程的IF判断

如果判断条件是如果...否则...的时候&#xff1b; 如果wData的值是16进制的FFFF&#xff0c;十进制的65535&#xff1b;就执行IF中的语句&#xff0c;否则就执行ELSE中的&#xff1b; 当wData的值为0时&#xff0c;因不符合IF的判断条件&#xff0c;执行了ELSE中的语句&#x…

MySQL索引底层数据结构

索引简介 索引是一个排好序的数据结构&#xff0c;包含着对数据表里所有记录的引用指针&#xff0c;如下图所示。索引文件和数据文件一样都存储在磁盘中&#xff0c;数据库索引的目的是在检索数据库时&#xff0c;减少磁盘读取次数。 常见的索引数据结构包括二叉树、红黑树、…

node多版本控制

今天遇到一个问题&#xff1a; 下载了一个vue项目&#xff0c;一直卡在npm install阶段&#xff0c;折腾了半天&#xff0c;发现是版本太高了&#xff0c;需要降低一下版本&#xff0c;但是其他项目需要高版本的&#xff0c;这不就冲突了&#xff1b; 找到了一个node多版本控制…

基于SSM的亲子活动平台的搭建与实现(源码+数据脚本+论文+技术文档)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

葡萄糖-聚乙二醇-刀豆球蛋白A,ConcanavalinA-PEG-Glucose

葡萄糖-聚乙二醇-刀豆球蛋白A&#xff0c;ConcanavalinA-PEG-Glucose 中文名称&#xff1a;葡萄糖-刀豆球蛋白A 英文名称&#xff1a;Glucose-ConcanavalinA 别称&#xff1a;刀豆球蛋白A修饰葡萄糖&#xff0c;ConA-葡萄糖 存储条件&#xff1a;-20C&#xff0c;避光&…

数据结构复习题

数据结构课程复习纲要 核心知识点 从数据结构的逻辑结构、存储结构和数据的运算三个方面去掌握线性表、栈、队列、串、数据、广义表、数和图等常用的数据结构。掌握在各种常用的数据结构上实现的排序和查找运算。对算法的时间和空间复杂度有一定的分析能力。针对简单的应用问…

Python:每日一题之四平方和

题目描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a; 每个正整数都可以表示为至多 4 个正整数的平方和。 如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 比如&#xff1a; 5 0^2 0^2 1^2 2^2&#xff1b; 7 1^2 1^2 1^2 2^2&am…

CF385D Bear and Floodlight

题意简述&#xff08;翻译&#xff09; 在平面直角坐标系上&#xff0c;沿直线从 (l,0)(l,0)(l,0) 走到 (r,0)(r,0)(r,0) 。有 nnn 盏灯&#xff0c;第 iii 盏灯位于 (xi,yi)(x_i,y_i)(xi​,yi​) &#xff0c;可以照亮的角度为 aia_iai​ &#xff08;注意不是弧度制&#xf…

浅尝辄止:数据库--数仓大数据平台--数据中台

很久没有更新博客了&#xff0c;今天主要是想谈一谈自己工作几年总结的心得。 1.浅尝辄止 数据库&#xff1a;基于mysql&#xff0c;oracle来实现数据库分析&#xff08;存储在数据库&#xff0c;使用数据库语言直接分析&#xff0c;最后成报表形式&#xff09;。 数仓&大…

rust编程-通用编程概念(chapter 3.2 3.3 数据类型和函数)

目录 2. 数据类型 2.2 复合类型 3. 函数 2. 数据类型 Rust中的所有值都是有特定数据类型的&#xff0c;rust是强类型语言&#xff0c;也是静态类型语言&#xff08;编译器类型必须确定&#xff09;。 编译器可以根据值来进行类型推断&#xff0c;但对有歧义的&#xff0c;必…

计算机毕业设计——基于SpringBoot框架的网上购书系统的设计与实现

文章目录前言一、背景及意义选题背景选题目的二、系统设计主要功能运行环境三、系统实现部分页面截图展示部分代码展示四、源码获取前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 二十一世纪是网络化&#xff0c;信息化的时代&#xff0c;为了满足广大…

Linux的子shell

linux运行一个shell脚本&#xff0c;其本身能启动它自己的子进程。 一般来说&#xff0c;脚本里的一个外部命令能生成出一个紫禁城&#xff0c;而Bash内建命令却不这样。 将一组命令放在圆括号里执行&#xff0c;形成一个命令列表连续执行。在圆括号里的命令会在一个子shell里…