CTF_Show Web入门 信息收集 爆破
一个CTFer的小窝
CTF

CTF_Show Web入门 信息收集 爆破

W1lsp0
2021-09-08 / 1 评论 / 7 阅读 / 正在检测是否收录...

信息搜集

  1. vim缓存 vim在编辑文档的过程中如果异常退出,会产生缓存文件,第一次产生的缓存文件后缀为.swp,后面会产生swo等…所以直接访问url/index.php.swp下载访问备份文件即可。
  2. 查看cookie
  3. 域名缓存 https://zijian.aliyun.com/
  4. 后缀admin,这个地方进入admin会被重定
  5. 技术文档为document.pdf,默认后台地址:http://your-domain/system1103/login.php 默认用户名:admin 默认密码:admin1103
  6. 后缀直接输入/editor,但是会自动去掉端口,而且没有https,选择上传文件,选择/var/www/html/nothinghere/fl000g.txt,然后原链接后缀加上/flag000g.txt进入
  7. 找到网页下面的邮箱,进入url+/admin,查询邮箱QQ号发现地址,忘记密码填写地址找到答案
  8. 网页探针,讲的什么是探针。进入后发现可以进入phpinfo,搜寻flag
  9. 直接ping ctfer.com
  10. 分析js,关注下面的代码,进入110.php找到flag
    var result=window.confirm("\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b"); # var result=window.confirm("你赢了,去幺幺零点皮爱吃皮看看");
    var result=window.confirm("GAMEOVER\n鏄惁浠庢柊寮€濮�");
  1. 前端会将密码以AES加密发送到后端,只要前段发送到后端加密过的密码和$p一样就可以。抓包修改发送的password为注释部分的密码即可获得。或者去进行AES加密获得
    error_reporting(0);
    $flag="fakeflag"
    $u = $_POST['username'];
    $p = $_POST['pazzword'];
    if(isset($u) && isset($p)){
        if($u==='admin' && $p ==='a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04'){
            echo $flag;
        }
}
  1. 进入url/db/db.mdb,可以获得一个文件,使用记事本打开,直接搜flag

爆破

  1. 抓包发现admin:pasword是被base64加密过,直接爆破选择base64加密
  2. 域名也可以爆破的,试试爆破这个ctf.show的子域名,直接访问:http://flag.ctfer.com/index.php
  3. php代码,subset:获取字符
    intval:获取整数值get传参token,并进行md5加密
    判断 第2位 === 第15位 并且 第15位 === 第18位
    判断 (第2位整数值+第15位整数值+第18位整数值)/第2位整数值===第32位整数值,

    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__);
    
    }
    ?>

    跑脚本得到以下结果,测试得到3j正确,url/?token=3j得到结果[h]]1m 3j k0 kv ll mw[hi]

    import hashlib
    dic = '0123456789qwertyuiopasdfghjklzxcvbnm'
    for a in dic:
        for b in dic:
            t = str(a) + str(b)
            md5 = hashlib.md5(t.encode('utf-8')).hexdigest()
            if md5[1:2] == md5[14:15] and md5[14:15] == md5[17:18]:
                print(t)
  4. mt_srand(372619038)生成一个随机数
    如果给r的参数等于随机生成的随机数则,获得flag

    [em] 注:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,意思就是每次生成的随机数 是一样的[/em]

    <?php
    mt_srand(372619038);
    echo (mt_rand());
    ?>
  5. 需要配置一下环境,php_mt_seed - PHP mt_rand() 随机数种子破解使用 随机数种子破解使用),配置完成后,传参使用r=0获得一个种子的负数,然后进行使用上面的程序编译运行得到该随机值的可能seed。这个时候会获得多个数字,观察网站的响应头发现是php7,使用获得的数字运行下面的代码获得token,burp添加cookie得到flag

    <?php
    mt_srand(4059711086);
    echo mt_rand()."<br/>";
    echo mt_rand()+mt_rand()."<br/>";
    ?>
    25_1.png
    25.png
  6. 观察界面的script,发现需要在url/checkdb.php界面POST四个变量,使用Hackbar直接post[hi]a=&p=&d=&u=&pass=获得flag

            function check(){
                $.ajax({
                url:'checkdb.php',
                type: 'POST',
                dataType:'json',
                data:{
                    'a':$('#a').val(),
                    'p':$('#p').val(),
                    'd':$('#d').val(),
                    'u':$('#u').val(),
                    'pass':$('#pass').val()
                },
                success:function(data){
                    alert(data['msg']);
                },
                error:function(data){
                    alert(data['msg']);
                }
    
            });
            }
  1. PS:被这个题整麻了,进入界面发现了登录下面有录取名单和查询系统,下载名单进入查看到名字和损失的身份证号。进入查询系统发现需要名字和身份证号。直接爆破,成功后在rquest获得身份证号,在response获得学号。在登录界面输入身份证号和学号获得flag。

    在抓包的时候,使用火狐会抓不到包,还有在最后输入的时候提示错误,最后莫名其妙就成功了。
    
  2. 直接对路径进行爆破,去掉2.txt,观察response获得flag
0

评论 (1)

取消