Web入门

发布时间 2023-12-24 10:42:12作者: QxrwQ

爆破

一、ctf.show web21 穷举--base64解码登录

  1. 使用BP抓包如下图所示,
  2. 发送到拦截器里
  3. 标记
  4. 选择Payloads,Payloads类型选择自定义迭代
  5. 该变红框的值进行多次值设置,本次需要进行三次设置,分别为 账号 冒号 密码
  6. Position为1 导入字典
  7. Position选择2写入:

    8.Position选择3导入字典

    9.选择规则

    10.去掉Payload encoding

    11.开始穷举

    12.发送到Decoder,进行解码,得到账号密码

二、ctf.show web23穷举

题目

<?php
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
    $token = md5($_GET['token']);	//将一个数使用md5加密
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){ //第2位、第15位,第18位相等
        if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){	//(第2位+第15位+第18位)/第2位 == 等32位
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);

}
?>
### 解析:

(1) python脚本跑出来

# 将一个数使用md5加密之后,它的第2位、第15位,第18位相等
# 将(第2位+第15位+第18位)/第2位 == 等32位
import hashlib
import string
characters = string.digits + string.ascii_letters
#  + string.punctuation
def is_int(s):
    try:
        int(s)
        return True
    except ValueError:
        return False
    
for i in characters:
    for j in characters:
        res = str(i)+str(j)
        md5_res = hashlib.md5(res.encode('utf-8')).hexdigest()
        if is_int(md5_res[1:2]) and is_int(md5_res[14:15]) and is_int(md5_res[17:18]) and is_int(md5_res[31:32]):
            if md5_res[1:2]==md5_res[14:15] and md5_res[14:15]==md5_res[17:18] and int(md5_res[1:2])!=0:
                if(int(md5_res[1:2])+int(md5_res[14:15])+int(md5_res[17:18]))/int(md5_res[1:2])==int(md5_res[31:32]):
                    print(md5_res + '======>' + md5_res[1:2]+'========>'+md5_res[14:15]+'======>'+md5_res[17:18]+'=======>'+md5_res[31:32])
                    print(res)

(2) 使用BP进行爆破

  1. 使用BP进行抓包

  2. 选择Brute forcer模式

  3. 进行爆破,得到结果

三、ctf.show web24穷举

题目

<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(372619038);			//设置随机种子为:372619038
    if(intval($r)===intval(mt_rand())){	//如果get(r)的值为mt_rand()则输出flag
        echo $flag;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}

?>

解题

  1. 环境可使用菜鸟教程的PHP编译环境
<?php
    mt_srand(372619038);
    echo mt_rand();
?>

四、ctf.show web25穷举

题目

<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));	//将flag的前8个字母作为随机种子
    $rand = intval($r)-intval(mt_rand());	//如果get到的r = 0 rand=-mt_rand()
    if((!$rand)){	
        if($_COOKIE['token']==(mt_rand()+mt_rand())){	//将'token'=第2个随机数+第3个随机数
            echo $flag;
        }
    }else{
        echo $rand;		//r=0 输出 第一个随机数
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}

题解

(1)根据r = 0,可以输出第一个随机数

(2)由第一个随机数,可以由php_mt_seed4.0得到随机种子是多少

(3)获取该随机种子的第二个、第三个随机数进行相加得到token

4.1 php_mt_seed4.0在kali使用

1. 通过 https://www.openwall.com/php_mt_seed/ 进行下载
2. tar -zxvf php_mt_seed-4.0.tar.gz 
3. make                          进行编译
4. ./php_mt_seed  1647299849 


对上面的数一个一个试

<?php
mt_srand(3592921990);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
?>

将r的值与token的值都进行替换,得到答案

五、ctf.show web26穷举

直接抓包

六、ctf.show web27穷举

  1. 点击录取名单 点击学生学籍信息查询系统
  2. 打开录取名单,进行年月日的爆破



七、ctf.show web28穷举

删除2.txt,对前面的0与1进行穷举。