十八、爆破
题目复现
题目:[Login]
- 题目来源:Polarctf-web-[Login]
- 解题:
查看网页源码,观察到注释了20200101 20200101
尝试输入
点击提交,显示登录成功,但无任何可疑回显
尝试修改学号和密码,发现随着学号的增大,逐渐回显字母,而密码部分没做校验(除了20200101),输入任意密码都可正常回显
抓包并将包发送到爆破模块(Intruder),添加username为爆破参数
设置Payload为数值类型,生成类型为Sequential(顺序的),间隔为1
点击"开始攻击",查看响应包学号(用户名)为20200102到20200111都有一个相应字符,将字符拼接起来即为flag
...
最终flag为:flag{dlcg}
题目:[爆破]
- 题目来源:Polarctf-web-[爆破]
- 解题:
代码审计
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";
}
}
}
}
?>
- 期待字符串为数字的爆破(不固定位数)
<?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++;
}
?>
方法二:抓包爆破
传参pass为随意的一个值进行抓包
发送到爆破模块(Intruder),将pass添加为Payload
设置Payload爆破规则:爆破,尝试使用默认字符集、长度为2的字符串爆破
点击"开始攻击",点击"长度"进行排序,得到不同于其他响应包长度的包,点击查看获得flag
题目:[被黑掉的站]
- 题目来源:Polarctf-web-[被黑掉的站]
- 解题:
查看源代码,标题中提示DIR
,使用御剑进行目录扫描
扫描得到可疑文件index.php.bak
和shell.php
查看index.php.bak
,看到一个字典
查看shell.php
,是一个输入验证
然后抓包爆破
发送到爆破模块,添加Payload
将字典内容复制(原始字典页面中无换行,可查看源码,有换行),设置Payload
点击"开始攻击",点击"长度"进行排序,得到flag