VishwaCTF 2022 部分wp

2023-10-29

学长推荐的一个相对平易近人的ctf,对我这种菜鸡友好一点,

就想着web要多写几道出来毕竟简单的比赛不常见,

继续加油积累经验吧

My Useless Website

一个最简单的sql 万能密码注入

Stock Bot

注意源码,有hint,

主要就是注意到这个提示了,根据路径直接查Flag

Hey Buddy!

这题考点是SSTI ,大佬们也许一眼就看出来了,所谓经验重要性

我这里也就是偶然看到右下角源码里的特征好像是SSTI

然后看到这里get传入name,就很可能

所以先尝试一下

那么证明猜想没错,这里只需寻找payload往里怼,

rce时发现空格禁了,cat<flag.txt即可 ,这里<绕过空格过滤 

Request Me FLAG

这道题看着人畜无害的一直搞不出来,看题目一直以为把请求方式变成FLAG

在burp里面如何尝试都不行,以为思路错了。

竟然需要将目录404.php删掉,不删除会一直访问404.php

真是蠢哭

Keep Your Secrets

是一个jwt题目

 获得的jwt 用hashcat 爆破出密钥

修改 role 为 admin 

post+路径传入, 作为header插进来传入,做的时候卡在这里很久,原因比较玄

Strong Encryption

<?php

    // Decrypt -> 576e78697e65445c4a7c8033766770357c3960377460357360703a6f6982452f12f4712f4c769a75b33cb995fa169056168939a8b0b28eafe0d724f18dc4a7

    $flag="";

    function encrypt($str,$enKey){

        $strHex='';
        $Key='';
        $rKey=69;
        $tmpKey='';

        for($i=0;$i<strlen($enKey);$i++){
            $Key.=ord($enKey[$i])+$rKey;  //ord()将字符转为10进制
            $tmpKey.=chr(ord($enKey[$i])+$rKey); //chr()10进制转为字符
        }    

        $rKeyHex=dechex($rKey); //10进制转为16进制

        $enKeyHash = hash('sha256',$tmpKey);

        for ($i=0,$j=0; $i < strlen($str); $i++,$j++){
            if($j==strlen($Key)){
                $j=0;
            }
            $strHex .= dechex(ord($str[$i])+$Key[$j]);
        }
        $encTxt = $strHex.$rKeyHex.$enKeyHash;
        return $encTxt;
    }

    $encTxt = encrypt($flag, "VishwaCTF");

    echo $encTxt;

?>

需要仔细阅读,理清逻辑, 事例演示的是$flag为空的,我们要根据给出的 Decrypt找到$flag值

1,第一个for循环没有用到$str,根本与$flag无关,

所以让$flag为空跑出$rKeyHex.$enKeyHash发现与Decrypt后部分重合,

2,那我们只需要考虑前面部分的$strHex

那自然第二个for循环就是关键了,读懂也就是说$flag每个字符的10进制值+$Key对应位置的值,再去16进制一下,就得到了576e78697e65445c4a7c8033766770357c3960377460357360703a6f6982

这里面还有个条件,翻译过来就是$Key长度用完了再从头开始与$flag匹配

我直接在$Key后面再复制一份就行了,长度就够了也满足条件

3,根据已知的Decrypt,和$Key ,反推出$flag

python脚本实现比较容易,

Python学的不熟,自己瞎写了个辣鸡脚本(还是反复修改后的),慢慢提升吧

a='576e78697e65445c4a7c8033766770357c3960377460357360703a6f6982'
Key = '155174184173188166136153139155174184173188166136153139'
length=len(a)
i=0
j=0

while i<length:
    a2 = a[i:i + 2] #切片获取每个字符的16进制(两位数)
    i += 2

    b=int(a2,16)  #16进制换10进制

    c=b-int(Key[j]) #这就是$flag每个字符的10进制
    j += 1  #对应的$Key下标往后移
    print('%d'%c+' ',end='')

拿到十进制去转ASCII文字

So Forgetful! 

找到密码base64解码

The Last Jedi

给了个图片,binwalk出两张图

分别记事本打开,就会发现flag

Todo list(php反序列化)

没有写出来,理解的有点问题

vishwactf_php反序列化_rurald的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VishwaCTF 2022 部分wp 的相关文章

随机推荐