24-9-24-web爆破-学习笔记
CTFshow-web23-条件爆破
首先我们需要了解substr()函数,
Substr(string/*字符串*/, start/*开始位置*/, length/*截取范围*/)
substr() 函数是 PHP 中的一个字符串函数,用于返回字符串的一部分12345。substr() 函数的语法为:substr(string, start, length),其中 string 是被截取的字符串,start 是开始截取的位置,length 是截取的长度1345。如果 start 参数是负数且 length 小于或等于 start,则 length 为 015。
鉴于此,我们需要一个令token的值为一个数,且这个数经过MD5加密后的的第1,14,
,17位必须为数字,且1+14+17/1等于第31位数
我们可以编写一个token参数的爆破脚本
<?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";//输出爆破结果
}
}
}
?>
将爆破出来的token使用get传参后,成功get flag
CTFshow-web24-伪随机数爆破
先分析代码,通过GET方式传入r,使得intval($r)=intval(mt_rand())
咱们先看,mt_srand``mt_rand
和intval
这三个函数
mt_srand(seed):函数用于初始化随机数生成器的种子(seed)
这是Mersenne Twister 算法,按seed的范围生成一个随机数,每一个相同的seed,生成的随机序列也是相同的,
mt_rand():函数根据先前由 mt_srand() 设置的种子来生成一个伪随机数,种子不变,生成的伪随机数也不变
intval():是用来确保结果是一个整数,
函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
分析理解代码之后,我们可以写一个脚本,来爆破出题目seed的随机数,
# CTFshow-web24-伪随机数爆破
mt_srand(372619038);
echo intval(mt_rand());
echo "\n";
获取输出结果后,令$r=1155388967,即可成功get flag
CTFshow-web25-伪随机数爆破+
这道题我们需要先看懂代码,
hexhec()函数:把十六进制转换为十进制
第一段if,我们需要令$rand=0,所以我们你可以先令$r-0,这样我们就能知道intval(mt_rand())的值了
接下来需要爆破出seed的值,这一步就需要用工具了,php_mt_seed
将这三个爆破出来的seed,用脚本全部生成两次随机数,将结果分别用GET的$r 和Cookie的$token传参
$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
CTFshow-web26-密码爆破
密码爆破,无需多言
CTFshow-web27-身份证出生日期爆破
先看源码并尝试admin/admin,都不行,点击录取名单,下载下一个xls文件表,发现查询功能仅需要姓名和身份证,xls中除了出生日期剩下的全给了,直接爆破
成功get身份证的出生日期,查询后,将内容Unicode解码
成功获得账号密码后,登录,直接get flag
CTFshow-web28-目录遍历
按照提示,从/0/0遍历到/100/100,其中包含flag
在/72/20/下的响应包中,成功get flag
使用的脚本总汇
<?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"; // 添加换行以便区分每次循环的结果
//}
//========================================
?>