- web21
- 题目:
- 解题思路及步骤:进入题目之后发现有一个登录界面,于是就尝试登录,用户名猜测为admin,密码未知,结合给的字典,应该是要爆破,进行抓包:(没有输入时)输入了密码之后再抓包,发现:多了一个验证的:于是对这段文字进行base64解码,得到结果正好是我们输的用户名和密码,于是对密码进行爆破,这里先进行对payload的位置进行确定,爆破密码,所以是这里:绿色部分,对其进行base64加密并导入字典:爆破得到结果:
- 相关知识点:关于Athorialization:
在 HTTP 中,Authorization 头用于提供客户端身份验证信息,以便服务器能够验证请求的发送者。这个头通常用于需要身份验证的 API 或资源访问。
- web22
- 题目:
- 解题思路及步骤:题目flag已经给出,本题的目的是域名的爆破
- 相关知识点:可以使用nslookup和dnsenum的命令来获取域名信息
- web23
- 题目:
- 解题思路及步骤:首先分析代码:
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1)))
{
echo $flag;
}
}
}
3. 编写脚本:
import hashlib
dic = '1234567890qazwsxedcrfvtgbyhnujmikolp'
for a in dic:
for b in dic:
t=str(a)+str(b)
md5=hashlib.md5(t.encode('utf-8')).hexdigest()
if(md5[1]!=md5[14] or md5[14]!=md5[17]):
continue
if((ord(md5[1])>=48 and ord(md5[1])<=57) and (ord(md5[31])>=48 and ord(md5[31])<=57)):
if((int(md5[1])+int(md5[14])+int(md5[17]))/int(md5[1])==int(md5[31])):
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() 将根据指定的基数进行转换,支持的基数范围是 2 到 36。
3. python ord()
在 Python 中,ord() 函数用于返回给定字符的 Unicode 码点(即整数表示),这是一个非常实用的函数,尤其是在处理文本和字符时。
语法
ord(character)
character: 这是一个字符串参数,长度必须是 1,即只允许一个字符。
返回值
返回给定字符的 Unicode 码点(整数)。
使用实例:
char_a = 'a'
unicode_a = ord(char_a)
print(unicode_a)
char_A = 'A'
unicode_A = ord(char_A)
print(unicode_A)
char_1 = '1'
unicode_1 = ord(char_1)
print(unicode_1)
char_special = '@'
unicode_special = ord(char_special)
print(unicode_special)
char_chinese = '你'
unicode_chinese = ord(char_chinese)
print(unicode_chinese)
注意事项
输入验证: 如果传递给 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
data = "Hello, World!"
md5_hash = hashlib.md5()
md5_hash.update(data.encode('utf-8'))
result = md5_hash.hexdigest()
print(result)
md5_hash = hashlib.md5()
md5_hash.update(b"Hello, ")
md5_hash.update(b"World!")
result = md5_hash.hexdigest()
print(result)
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()
注意事项
不可逆性: MD5 是一种单向哈希函数,无法通过哈希值反推出原始数据。
字节流: 请注意,update() 方法期望输入为字节流,因此字符串需要使用 .encode() 方法转换为字节(可以指定编码,例如 'utf-8')。
效率: MD5 算法速度较快,适用于文件完整性校验和非安全性的散列计算。
- web24
- 题目:
- 解题思路及步骤:给出了代码:分析代码可以知道
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 之间的伪随机整数。
示例
// 生成一个 0 到 100 之间的随机数
$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() 来设置种子。这样,每次运行程序都将生成相同的一组随机数。