[CTF]CTFSHOW-Web应用安全与防护第一章

第一题

bash 复制代码
Base64编码隐藏
100
本系列题目FLAG格式固定为CTF{xxxxxx}

适合纯新手入门使用,难度极低。

解题:

访问网页,查看源代码,发现base64加密密码,解密拿到flag

bash 复制代码
<script>
        document.getElementById('loginForm').addEventListener('submit', function(e) {
            const correctPassword = "Q1RGe2Vhc3lfYmFzZTY0fQ==";
            const enteredPassword = document.getElementById('password').value;
            const messageElement = document.getElementById('message');
            
            if (btoa(enteredPassword) !== correctPassword) {
                e.preventDefault();
                messageElement.textContent = "Login failed! Incorrect password.";
                messageElement.className = "message error";
            }
        });
    </script>

第二题

bash 复制代码
HTTP头注入
100
本系列题目FLAG格式固定为CTF{xxxxxx}

解题:与第一题页面一致,用第一题密码登录,获得提示

直接抓包或者浏览器改UA访问:

User-Agent: ctf-show-brower

第三题

bash 复制代码
Base64多层嵌套解码
100
本系列题目FLAG格式固定为CTF{xxxxxx}

解题:

bash 复制代码
<script>
        document.getElementById('loginForm').addEventListener('submit', function(e) {
            const correctPassword = "SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=";
            
            function validatePassword(input) {
                let encoded = btoa(input);
                encoded = btoa(encoded + 'xH7jK').slice(3);
                encoded = btoa(encoded.split('').reverse().join(''));
                encoded = btoa('aB3' + encoded + 'qW9').substr(2);
                return btoa(encoded) === correctPassword;
            }

            const enteredPassword = document.getElementById('password').value;
            const messageElement = document.getElementById('message');
            
            if (!validatePassword(enteredPassword)) {
                e.preventDefault();
                messageElement.textContent = "Login failed! Incorrect password.";
                messageElement.className = "message error";
            }
        });
    </script>

查看源码,发现比对代码,逆向解析一下

1、倒着来看,首先 SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU= 解b64后:

IzUFQxM1UzRmtSRk0wU2xSU05qRXdUVVk9cVc5 == btoa('aB3' + encoded + 'qW9').substr(2);

解密出中间的encoded,暴力破解一下

bash 复制代码
encodede4 = "IzUFQxM1UzRmtSRk0wU2xSU05qRXdUVVk9cVc5"
for i in (chars):
    for j in (chars):
        new = i+j+encodede4 
        try:
            b1 = base64.b64decode((new).encode('utf-8'))
            strb1 = b1.decode('utf-8')
        except:
            strb1 = ''

        #if strb1 : print(strb1)
        if strb1[:3] == 'aB3' and strb1[-3:] =='qW9':
            print("[*]倒数3为:",b1,'前两位为:',i,j)

得出结果:\*倒数3为: b'aB3PT13U3FkRFM0SlRSNjEwTUY=qW9' 前两位为: Y U。

取出中间的 PT13U3FkRFM0SlRSNjEwTUY= --> 解b64:wSqdDS4JTR610MF,
反转一下:FM016RTJ4SDdqSw

2、继续往上走,FM016RTJ4SDdqSw== 应该等于 btoa(encoded + 'xH7jK'),所以爆破前面少的3位,逻辑和上面一样,不过结果会有很多,任选一个登录拿到flag:

第四题

bash 复制代码
HTTPS中间人攻击
100

解题:下载附件是要给pacp流量包和sslkey文件,用wireshark加载sslkey文件,然后解密流量得到flag。

第五题

bash 复制代码
Cookie伪造
100

解题:打开网站,默认guest用户,使用guest作为密码登录后发现返回cookie带有角色参数

直接修改cookie中role=admin,重新发包后获取flag