Skip to content

十八、爆破

题目复现

题目:[Login]

  • 题目来源:Polarctf-web-[Login]

image-20250404210146816

  • 解题:

查看网页源码,观察到注释了20200101 20200101

image-20250404210229023

尝试输入

image-20250404210339688

点击提交,显示登录成功,但无任何可疑回显

image-20250404210411405

尝试修改学号和密码,发现随着学号的增大,逐渐回显字母,而密码部分没做校验(除了20200101),输入任意密码都可正常回显

image-20250404210952940

image-20250404211007816

抓包并将包发送到爆破模块(Intruder),添加username为爆破参数image-20250404211211503

设置Payload为数值类型,生成类型为Sequential(顺序的),间隔为1

image-20250404211341200

点击"开始攻击",查看响应包学号(用户名)为20200102到20200111都有一个相应字符,将字符拼接起来即为flag

image-20250404211853757

image-20250404211910020

...

最终flag为:flag{dlcg}

题目:[爆破]

  • 题目来源:Polarctf-web-[爆破]

image-20250404234021568

  • 解题:

代码审计

php
<?php
error_reporting(0);

if(isset($_GET['pass'])){
    $pass = md5($_GET['pass']);	# 将pass的值修改为pass参数值的md5值
    if(substr($pass, 1,1)===substr($pass, 14,1) && substr($pass, 14,1) ===substr($pass, 17,1)){	
        # pass的第一位,第十四位,第十七位相等(切片位置从0开始)
        if((intval(substr($pass, 1,1))+intval(substr($pass, 14,1))+substr($pass, 17,1))/substr($pass, 1,1)===intval(substr($pass, 31,1))){	
		# 如果pass的第一位、第十四位、第十七位转化为数值后相加,再除以第一位等于第三十一位转化为数值,那么输出flag
            include('flag.php');
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);

}
?>

方法一:脚本爆破

  • 期待字符串长度为2的爆破
php
<?php
error_reporting(0);
$string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 
# echo strlen($string); #62位
for ($a = 0; $a < 62; $a++) {
	for($b = 0;$b < 62;$b++){
		$flag = $string[$a].$string[$b];
		$pass = md5($flag);
		if (substr($pass, 1, 1) === substr($pass, 14, 1) && substr($pass, 14, 1) === substr($pass, 17, 1)) {
			if ((intval(substr($pass, 1, 1)) + intval(substr($pass, 14, 1)) + substr($pass, 17, 1)) / substr($pass, 1, 1) === intval(substr($pass, 31, 1))) {
				echo $flag . "\n";
			}
		}
	}
            
}
?>

image-20250405001628618

  • 期待字符串为数字的爆破(不固定位数)
<?php
$i = 0;
while(true) {
    $pass = md5($i);
    if($pass[1] === $pass[14] && $pass[14] === $pass[17]) {
        $x = intval($pass[1]);
        $y = intval($pass[31]);
        if((3*$x)/$x === $y) {
            echo "Found: $i\n";
            echo "MD5: $pass\n";
            break;
        }
    }
    $i++;
}
?>

image-20250405001655693

方法二:抓包爆破

传参pass为随意的一个值进行抓包

image-20250405002922266

发送到爆破模块(Intruder),将pass添加为Payload

image-20250405002952282

设置Payload爆破规则:爆破,尝试使用默认字符集、长度为2的字符串爆破

image-20250405003013387

点击"开始攻击",点击"长度"进行排序,得到不同于其他响应包长度的包,点击查看获得flag

image-20250405003040860

题目:[被黑掉的站]

  • 题目来源:Polarctf-web-[被黑掉的站]

image-20250405152904867

  • 解题:

查看源代码,标题中提示DIR,使用御剑进行目录扫描

image-20250405153718630

扫描得到可疑文件index.php.bakshell.php

image-20250405153812875

查看index.php.bak,看到一个字典

image-20250405154008511

查看shell.php,是一个输入验证

image-20250405154049084

然后抓包爆破

image-20250405154512459

发送到爆破模块,添加Payload

image-20250405154606517

将字典内容复制(原始字典页面中无换行,可查看源码,有换行),设置Payload

image-20250405154744661

image-20250405154634033

点击"开始攻击",点击"长度"进行排序,得到flag

image-20250405154813801

image-20250405154922037

滇ICP备2025057983号-1