24-9-24-web爆破-学习笔记

24-9-24-web爆破-学习笔记

CTFshow-web23-条件爆破

QQ截图20240924223109

​ 首先我们需要了解substr()函数,

1
2
3
Substr(string/*字符串*/, start/*开始位置*/, length/*截取范围*/)

substr() 函数是 PHP 中的一个字符串函数,用于返回字符串的一部分12345substr() 函数的语法为:substr(string, start, length),其中 string 是被截取的字符串,start 是开始截取的位置,length 是截取的长度1345。如果 start 参数是负数且 length 小于或等于 start,则 length 为 015

​ 鉴于此,我们需要一个令token的值为一个数,且这个数经过MD5加密后的的第1,14,

,17位必须为数字,且1+14+17/1等于第31位数

​ 我们可以编写一个token参数的爆破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
# CTFshow-web23-条件爆破

error_reporting(0);//抑制错误输出
for($a=0;$a<10000;$a++)/*设置循环范围*/{
$token = md5($a);
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 'token='.$a,' ','md5'.md5($a)."\n";//输出爆破结果
}
}
}
?>

image-20240924224641464

image-20240924224712551

将爆破出来的token使用get传参后,成功get flag

CTFshow-web24-伪随机数爆破

image-20240924231621719

先分析代码,通过GET方式传入r,使得intval($r)=intval(mt_rand())

咱们先看,mt_srand``mt_randintval这三个函数

1
2
3
4
5
mt_srand(seed):函数用于初始化随机数生成器的种子(seed)
这是Mersenne Twister 算法,按seed的范围生成一个随机数,每一个相同的seed,生成的随机序列也是相同的,
mt_rand():函数根据先前由 mt_srand() 设置的种子来生成一个伪随机数,种子不变,生成的伪随机数也不变
intval():是用来确保结果是一个整数,
函数通过使用指定的进制 base 转换(默认是十进制),返回变量 varinteger 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1

分析理解代码之后,我们可以写一个脚本,来爆破出题目seed的随机数,

1
2
3
4
5
# CTFshow-web24-伪随机数爆破

mt_srand(372619038);
echo intval(mt_rand());
echo "\n";
image-20240924233357287

获取输出结果后,令$r=1155388967,即可成功get flag

image-20240924231500891

CTFshow-web25-伪随机数爆破+

image-20240925144132549

这道题我们需要先看懂代码,

1
hexhec()函数:把十六进制转换为十进制

第一段if,我们需要令$rand=0,所以我们你可以先令$r-0,这样我们就能知道intval(mt_rand())的值了

接下来需要爆破出seed的值,这一步就需要用工具了,php_mt_seed

QQ截图20240925151104

将这三个爆破出来的seed,用脚本全部生成两次随机数,将结果分别用GET的$r 和Cookie的$token传参

1
2
3
4
5
6
7
$array = ['26734044', '2631744564', '3161089573'];
foreach ($array as $a) {
mt_srand($a);
echo mt_rand() . " ";
echo mt_rand() + mt_rand();
echo "\n"; // 添加换行以便区分每次循环的结果
}

将生成的mt_rand()+mt_rand()全试一遍,成功get flag

QQ截图20240925152236

CTFshow-web26-密码爆破

image-20240925162319181

密码爆破,无需多言

CTFshow-web27-身份证出生日期爆破

image-20240925195335230

先看源码并尝试admin/admin,都不行,点击录取名单,下载下一个xls文件表,发现查询功能仅需要姓名和身份证,xls中除了出生日期剩下的全给了,直接爆破

QQ截图20240925195927

成功get身份证的出生日期,查询后,将内容Unicode解码

image-20240925200326481

成功获得账号密码后,登录,直接get flag

image-20240925200053944

CTFshow-web28-目录遍历

按照提示,从/0/0遍历到/100/100,其中包含flag

在/72/20/下的响应包中,成功get flag

QQ截图20240925201055

使用的脚本总汇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
# 24-9-24-web爆破-学习笔记
//========================================
# CTFshow-web23-条件爆破

//error_reporting(0);
//for($a=0;$a<10000;$a++){
// $token = md5($a);
// 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 'token='.$a,' ','md5'.md5($a)."\n";
// }
// }
//}
//========================================
# CTFshow-web24-伪随机数爆破

//mt_srand(372619038);
//echo intval(mt_rand())."\n";
//echo "\n";
//========================================
# CTFshow-web25-伪随机数爆破

//$array = ['26734044', '2631744564', '3161089573'];
//foreach ($array as $a) {
// mt_srand($a);
// echo mt_rand() . " ";
// echo mt_rand() + mt_rand();
// echo "\n"; // 添加换行以便区分每次循环的结果
//}
//========================================

?>