web21
打开后要求登录
附件是一个密码字典
使用bp抓包,将抓到的东西进行base64解码
发现是admin:密码
的键值对
添加payload,padload类型为自定义迭代器,位置1为admin:
位置2为导入的字典
添加base64编码和取消url编码
然后开始攻击,发现长度和其他不同的包,查看响应,发现flag
web22
这道题现在好像不能做了?
web23
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/
error_reporting(0);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;}}
}else{highlight_file(__FILE__);}
?>
- md5算出的值是32位的16进制数
- substr($token, 1, 1)是将token的字符串的第二个字符开始,取一个字符
php > $token = 'abcdefg';
php > echo substr($token,1,1);
b
-
第一个判断条件是要求md5字符串第2个字符,第15个字符,第18个字符相等
-
第二个判断条件是第2个字符,第15个字符,第18个字符转换为整数后相加的和与第2个字符的整数相除的结果(3)与最后一个字符的整数相等
综合两个条件:第2个字符,第15个字符,第18个字符相等,最后一个字符为3
使用如下脚本爆破:
import hashlibfor num in range(1,10000):md5_value = hashlib.md5(str(num).encode('utf-8')).hexdigest()if md5_value[-1] == '3':if md5_value[1:2] == md5_value[14:15] and md5_value[1:2] == md5_value[17:18]:print(num)
得到如下结果:
$ python 1.py
422
1202
尝试传入url?token=422,得到flag
web24
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){$r = $_GET['r'];mt_srand(372619038);if(intval($r)===intval(mt_rand())){echo $flag;}
}else{highlight_file(__FILE__);echo system('cat /proc/version');
}?> Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023
-
mt_srand(372619038);
- 这行代码使用
mt_srand
函数设置Mersenne Twister随机数生成器的种子为372619038
。设置种子后,每次调用mt_rand
都会生成相同的随机数序列。
- 这行代码使用
-
intval(mt_rand())
- 将生成的随机数转换为整数。
使用本地php生成随机数
php > mt_srand(372619038);
php > echo mt_rand();
1155388967
传入url?r=1155388967,得到flag
web25
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:56:57
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){$r = $_GET['r'];mt_srand(hexdec(substr(md5($flag), 0,8))); #十六进制转换为十进制$rand = intval($r)-intval(mt_rand());if((!$rand)){if($_COOKIE['token']==(mt_rand()+mt_rand())){echo $flag;}}else{echo $rand;}
}else{highlight_file(__FILE__);echo system('cat /proc/version');
}
Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023
先传入r=0,得到
要满足条件if((!$rand))
,则$rand=0;
则r=1141567437,为第一次生成的随机数
下载工具:https://www.openwall.com/php_mt_seed/
解压后使用Linux终端执行命令make
,得到elf可执行文件
Usage: ./php_mt_seed VALUE_OR_MATCH_MIN [MATCH_MAX [RANGE_MIN RANGE_MAX]] ...
$ ./php_mt_seed 1141567437
Pattern: EXACT
Version: 3.0.7 to 5.2.0
Found 0, trying 0x50000000 - 0x53ffffff, speed 13421.8 Mseeds/s
seed = 0x51f33dba = 1374895546 (PHP 3.0.7 to 5.2.0)
seed = 0x51f33dbb = 1374895547 (PHP 3.0.7 to 5.2.0)
Found 2, trying 0xfc000000 - 0xffffffff, speed 12434.9 Mseeds/s
Version: 5.2.1+
Found 2, trying 0x16000000 - 0x17ffffff, speed 269.4 Mseeds/s
seed = 0x16415710 = 373380880 (PHP 7.1.0+)
Found 3, trying 0x58000000 - 0x59ffffff, speed 261.3 Mseeds/s
seed = 0x59135498 = 1494439064 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0x59135498 = 1494439064 (PHP 7.1.0+)
Found 5, trying 0x66000000 - 0x67ffffff, speed 262.1 Mseeds/s
seed = 0x662adf41 = 1714085697 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0x662adf41 = 1714085697 (PHP 7.1.0+)
Found 7, trying 0xc6000000 - 0xc7ffffff, speed 259.5 Mseeds/s
seed = 0xc7b65f2e = 3350617902 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0xc7b65f2e = 3350617902 (PHP 7.1.0+)
Found 9, trying 0xfe000000 - 0xffffffff, speed 258.4 Mseeds/s
Found 9
尝试这几个值,发现373380880、1494439064、1714085697、3350617902都可以得到第一个相同的随机数,但是后两个随机数不同
php > mt_srand(3350617902);
php > echo mt_rand();
1141567437
依次尝试传入,只有最后一个可以
php > mt_srand(3350617902);
php > echo mt_rand();
1141567437
php > echo mt_rand()+mt_rand();
3544738301
Cookie传入,得到flag
web26
点击同意协议,开始安装
点击确认无误,开始安装,使用bp抓包,(只有用Chrome才能抓到包,Firefox不行)
填写以下值,爆破数据库密码
得到flag
web27
点击下载录取名单
发现需要姓名和身份证号
录取名单里有姓名和部分身份证号
缺失的部分正好是出生日期,于是使用bp爆破(同样只能用Chrome抓包)
选择爆破日期,格式为:yyyyMMdd
点击开始攻击,得到身份证号为621022199002015237
查看响应
解码后得到学号和初始密码
登录后得到flag
web28
发现路径为url/0/1/2.txt
于是爆破目录url/0-100/0-100/ # 仅爆破目录,删除2.txt
在Linux执行命令$ seq 0 100 > 1.txt
,生成字典
选择集群炸弹攻击,在两个位置都添加相同的字典
开始攻击,发现flag在目录/72/20/