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

CTTSHOW-WEB入门-爆破21-24

  1. web21
    1. 题目:
    2. 解题思路及步骤:进入题目之后发现有一个登录界面,于是就尝试登录,用户名猜测为admin,密码未知,结合给的字典,应该是要爆破,进行抓包:(没有输入时)输入了密码之后再抓包,发现:多了一个验证的:于是对这段文字进行base64解码,得到结果正好是我们输的用户名和密码,于是对密码进行爆破,这里先进行对payload的位置进行确定,爆破密码,所以是这里:绿色部分,对其进行base64加密并导入字典:爆破得到结果:
    3. 相关知识点:关于Athorialization:
HTTP 中,Authorization 头用于提供客户端身份验证信息,以便服务器能够验证请求的发送者。这个头通常用于需要身份验证的 API 或资源访问。
  1. web22
    1. 题目:
    2. 解题思路及步骤:题目flag已经给出,本题的目的是域名的爆破
    3. 相关知识点:可以使用nslookup和dnsenum的命令来获取域名信息
  2. web23
    1. 题目:
    2. 解题思路及步骤:首先分析代码:
include('flag.php');//包含文件flag.php
if(isset($_GET['token'])){//获取一个token的参数
    $token = md5($_GET['token']);//对参数进行MD5加密,输出为32位的16进制数,不论字符串长度
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
      //检验索引为1  14  17  的字符是否相同,相同则进入后面执行
        if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1)))
        //检验索引为1   14  17的数相加除以索引为1的值是否等于索引为31处的整数值
        {
            echo $flag;//满足条件就输出flag
        }
    }
}
3. 编写脚本:
import hashlib
dic = '1234567890qazwsxedcrfvtgbyhnujmikolp' # 字典
for a in dic:
    for b in dic:
        t=str(a)+str(b) # t是两个字符字符串的组合
        md5=hashlib.md5(t.encode('utf-8')).hexdigest()
        # 这段代码的逻辑是:先获取一个对象hashlib.md5(),
        # 由于对象要求的字符串必须为字节串,于是使用encode('utf-8')将其转换为字节串
        # 最后将其转换为十六进制
        if(md5[1]!=md5[14] or md5[14]!=md5[17]):
            continue
            # 先判断第一个条件,索引为1  14  17的位置必须一样
        if((ord(md5[1])>=48 and ord(md5[1])<=57) and  (ord(md5[31])>=48 and ord(md5[31])<=57)):
            # 四个位置的字符转换能够转换字 ord()函数是将单个unicode字符转换为对应在unicode字符集中的编码顺序,即ASCII编码值
            if((int(md5[1])+int(md5[14])+int(md5[17]))/int(md5[1])==int(md5[31])):
                # 判断最后一个条件,索引为1 14 17出的值转换为数字后再除以所以为1对应的整数值,是否等于索引为31出的整数值
                # 这里是因为php的MD5()函数输出为16进制的32位数,因此要先转换为16进制数
                # 固定长度: 无论输入字符串的长度如何,MD5 哈希值的输出始终是 32 个字符的十六进制字符串。
                print(t)
4. 相关知识点:python语言简单脚本的编写,phpMD5()函数以及intval()函数,python中hashilb包MD5() ord()函数的使用
    1. php  MD5():
在 PHP 中,md5() 函数用于计算一个字符串的 MD5 哈希值。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密哈希函数,生成一个 128 位(16 字节)的哈希值,通常以 32 位十六进制数表示。

语法
string md5(string $str, bool $raw_output = false)
$str: 要计算哈希值的字符串。
$raw_output: (可选)如果设置为 true,则返回原始二进制数据;如果为 false(默认值),则返回十六进制字符串。
    2. php intval()
在 PHP 中,intval() 函数用于将一个变量转换为整数。它可以处理多种类型的输入,包括字符串、浮点数和布尔值,并将其转换为相应的整数值。

函数语法
int intval(mixed $var, int $base = 10)
$var: 要转换为整数的变量。
$base: (可选)指定基数(进制),默认为 10。
返回值
返回转换后的整数值。
字符串处理: 当输入为字符串时,intval() 会从字符串的开头开始解析,直到遇到无法转换的字符为止。例如,"123abc" 会被转换为 123。

浮点数处理: 对于浮点数,intval() 会截断小数部分,只保留整数部分。

布尔值处理: 布尔值 true 会被转换为 1,而 false 会被转换为 0。

数组处理: 如果输入是数组,intval() 将返回数组的第一个元素的整数值。如果数组为空,则返回 0。

基数参数: 如果提供了基数参数,intval() 将根据指定的基数进行转换,支持的基数范围是 236
    3. python ord()
在 Python 中,ord() 函数用于返回给定字符的 Unicode 码点(即整数表示),这是一个非常实用的函数,尤其是在处理文本和字符时。
语法
ord(character)
character: 这是一个字符串参数,长度必须是 1,即只允许一个字符。
返回值
返回给定字符的 Unicode 码点(整数)。
使用实例:
# 示例 1: 获取字母的 Unicode 码点
char_a = 'a'
unicode_a = ord(char_a)
print(unicode_a)  # 输出: 97
char_A = 'A'
unicode_A = ord(char_A)
print(unicode_A)  # 输出: 65
# 示例 2: 获取数字字符的 Unicode 码点
char_1 = '1'
unicode_1 = ord(char_1)
print(unicode_1)  # 输出: 49
# 示例 3: 获取特殊字符的 Unicode 码点
char_special = '@'
unicode_special = ord(char_special)
print(unicode_special)  # 输出: 64
# 示例 4: 获取汉字的 Unicode 码点
char_chinese = '你'
unicode_chinese = ord(char_chinese)
print(unicode_chinese)  # 输出: 20320
注意事项
输入验证: 如果传递给 ord() 的字符不是一个单字符字符串,Python 会抛出 TypeError。例如,ord('abc') 会引发错误。
Unicode 支持: ord() 支持所有 Unicode 字符,这意味着它可以处理任何语言的字符。
与 chr() 的对应: ord() 的对应函数是 chr(),后者可以根据 Unicode 码点返回对应的字符。例如,如果你有一个整数 97,你可以使用 chr(97) 得到字符 'a'
    4. python  hashlib.md5()
在 Python 中,hashlib 模块提供了多种算法的哈希函数,而 hashlib.md5() 函数是用来创建一个 MD5 哈希对象的。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密散列函数,生成一个 128 位的哈希值,通常以 32 个十六进制数字表示。
用法
要使用 hashlib.md5(),首先需要导入 hashlib 模块,然后可以通过以下步骤计算字符串或二进制数据的 MD5 哈希值:
创建一个 MD5 哈希对象。
使用 update() 方法输入要哈希的数据(可以多次调用)。
使用 hexdigest() 方法获取最终的十六进制字符串表示。
示例
以下是使用 hashlib.md5() 的几个示例:
import hashlib
# 示例 1: 对字符串进行哈希
data = "Hello, World!"
md5_hash = hashlib.md5()  # 创建一个 MD5 哈希对象
md5_hash.update(data.encode('utf-8'))  # 输入数据(需编码为字节)
result = md5_hash.hexdigest()  # 获取十六进制哈希值
print(result)  # 输出: 65a8e27d8879283831b664bd8b7f0ad4
# 示例 2: 对多个数据块进行哈希
md5_hash = hashlib.md5()
md5_hash.update(b"Hello, ")
md5_hash.update(b"World!")
result = md5_hash.hexdigest()
print(result)  # 输出: 65a8e27d8879283831b664bd8b7f0ad4 (与前面相同)
# 示例 3: 对文件内容进行哈希
def hash_file(file_path):
    md5_hash = hashlib.md5()
    with open(file_path, 'rb') as f:  # 以二进制模式打开文件
        # 分块读取文件内容
        for chunk in iter(lambda: f.read(4096), b""):
            md5_hash.update(chunk)
    return md5_hash.hexdigest()

# 使用示例(请替换为实际存在的文件路径)
# print(hash_file("example.txt"))
注意事项
不可逆性: MD5 是一种单向哈希函数,无法通过哈希值反推出原始数据。
字节流: 请注意,update() 方法期望输入为字节流,因此字符串需要使用 .encode() 方法转换为字节(可以指定编码,例如 'utf-8')。
效率: MD5 算法速度较快,适用于文件完整性校验和非安全性的散列计算。
  1. web24
    1. 题目:
    2. 解题思路及步骤:给出了代码:分析代码可以知道
error_reporting(0);
include("flag.php");//包含文件flag.php
if(isset($_GET['r'])){
    $r = $_GET['r'];//get一个参数r
    mt_srand(372619038);
    if(intval($r)===intval(mt_rand())){
        echo $flag;//当r的值等于生成这个随机数的时候就输出flag
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
} 
3. 于是查找函数mt_rand()和mt_srand()函数的信息:通过查找资料知道mt_srand()函数用于设置种子(相当于是某一个加密算法的初始值,只要加密算法和种子固定,就能生成一个伪随机数),mt_rand()用于生成伪随机数
4. 于是编写php脚本得知这个伪随机数是:<font style="color:rgb(26, 133, 255);background-color:rgb(248, 248, 248);">1155388967</font>
<?php
mt_srand(372619038);
echo intval(mt_rand());
?>
//输出:1155388967
5. 于是?r=<font style="color:rgb(26, 133, 255);background-color:rgb(248, 248, 248);">1155388967 可以得到 </font>
6. 相关知识点:两个函数的使用:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737437342915-24ba1fa6-660d-4d27-b144-9fb6e7db2709.png)
mt_rand() 和 mt_srand() 是 PHP 中与随机数生成相关的两个函数。它们分别用于生成随机数和设置种子
1. mt_rand()
mt_rand() 函数用于生成一个伪随机的整数值,使用 Mersenne Twister 算法,这种算法相较于 PHP 内置的 rand() 函数,提供了更好的随机性。
语法
mt_rand(int $min = 0, int $max = getrandmax()): int
$min: 可选的最小值(默认是 0)。
$max: 可选的最大值(默认是 getrandmax(),表示可生成的最大随机数)。
返回值
返回一个介于 $min 和 $max 之间的伪随机整数。
示例
// 生成一个 0100 之间的随机数
$randomNumber = mt_rand(0, 100);
echo $randomNumber;
2. mt_srand()
mt_srand() 函数用于设置 mt_rand() 函数的种子。种子是生成随机数序列的起始值,不同的种子会导致生成不同的随机数序列,使用相同的种子会生成相同的随机数序列。
语法
mt_srand(int $seed = 0): void
$seed: 可选的种子值。默认是 0。
示例
// 设置种子为 1234
mt_srand(1234);
// 生成几个随机数
echo mt_rand() . "\n"; // 生成的随机数
echo mt_rand() . "\n"; // 生成的随机数
使用场景
如果您需要使用随机数,例如在游戏中生成随机事件,或者在应用程序中需要随机化某些输出时,使用 mt_rand() 是个不错的选择。
如果您希望在同一时间生成相同的随机数序列,可以在程序的开始位置使用 mt_srand() 来设置种子。这样,每次运行程序都将生成相同的一组随机数。

http://www.kler.cn/a/513739.html

相关文章:

  • freecad1.0的编译
  • 【基于无线电的数据通信链】Link 11 仿真测试
  • 用于牙科的多任务视频增强
  • npm run dev 时直接打开Chrome浏览器
  • BH1750使用程序
  • OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
  • cnpm是什么鬼?
  • 视频m3u8形式播放 -- python and html
  • Python新春烟花
  • opencv-FindHomography接口-C语言实现
  • 靠右行驶数学建模分析(2014MCM美赛A题)
  • 日本IT|集成测试(結合テスト)的含义
  • office 2019 关闭word窗口后卡死未响应
  • 全新推理模型 DeepSeek-R1 问世,全面对标 OpenAI o1
  • “深入浅出”系列之C++:(10)nlohmann Json库
  • 【gopher的java学习笔记】Java中Mapper与Entity的关系详解
  • 虚拟mock
  • 学Python的人…
  • 【Spring Boot】Spring AOP动态代理,以及静态代理
  • 代码随想录刷题day13|(链表篇)24.两两交换链表中的结点
  • github无法访问配置
  • ubuntu24 springboot jar设置宕机重启
  • 【2024年华为OD机试】(C/D卷,200分)- 5G网络建设 (JavaScriptJava PythonC/C++)
  • Qt中自定义信号与槽
  • JAVA基础语句整理
  • 【JsonPath】JsonPath常用示例