20240221

LeetCode

3的幂

判断一个整数是否是3的幂。首先对输入的整数进行判断,如果小于等于0则直接返回false。然后对输入的整数进行循环除以3的操作,直到除以3得到的结果为1为止。在循环过程中,如果发现余数不为0则返回false,表示输入的整数不是3的幂。最终如果循环结束,说明输入的整数是3的幂,返回true。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
bool isPowerOfThree(int n) {
if(n<=0) return false;
int x=n;
while(x!=1)
{
if(x%3==0)
{
x=x/3;
}
else
{
return false;
}
}
return true;
}
};
4的幂

判断一个整数是否是4的幂。首先对输入的整数进行判断,如果小于等于0则直接返回false。然后对输入的整数进行循环除以4的操作,直到除以4得到的结果为1为止。在循环过程中,如果发现余数不为0则返回false,表示输入的整数不是4的幂。最终如果循环结束,说明输入的整数是4的幂,返回true。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
bool isPowerOfFour(int n) {
if(n<=0) return false;
int x=n;
while(x!=1)
{
if(x%4==0)
{
x=x/4;
}
else
{
return false;
}
}
return true;
}
};
统计能整除数字的位数

计算一个整数中有多少个数字能整除这个整数本身。首先定义一个变量n用于记录符合条件的数字个数,另一个变量m用于保存输入的整数。然后对输入的整数进行循环,每次取出最后一位数字进行判断是否能整除整数本身。如果能整除,则n加1。最后返回n,表示整数中有多少个数字能整除这个整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int countDigits(int num) {
int n=0;
int m=num;
while(m!=0)
{
if(num%(m%10)==0)
{
n++;
}
m=m/10;
}
return n;
}
};

BuuCTF

17、BackupFile

题目名称叫备份文件,直接用dirsearch扫描:py -3.9 http://2677258c-1c01-46a9-9f37-cef51bea8534.node4.buuoj.cn:81/ -e php

响应成功的

image

image

image

访问/index.php.bak文件,下载下来了

image

查看文件,如果key=123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3,输出flag

image

如果直接构造payload:/?key=123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3

显示只要数字

image

==是弱相等,所以当key=123时,就会输出flag

构造payload:/?key=123

得到flag

image

1
flag{7e29466e-c1e3-4679-8eda-80c196664fe2}
18、Easy Calc

查看源代码,没看到啥

抓包,发现一个calc.php文件

image

查看该文件,有一个黑名单

image

1
2
3
4
5
知识点:
chr() 函数:从指定的 ASCII 值返回字符。 ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置0,而十六进制值被定义为带前置 0x。
file_get_contents() 函数:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
scandir() 函数:返回指定目录中的文件和目录的数组。

查看源码,$(“#content”).val()相当于 document.getElementById(“content”).value;

image

PHP的字符串解析特性

尝试一下/calc.php?num=phpinfo()

image

1
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

加个空格

image

由于“/”被过滤了,所以我们可以使用chr(47)来进行表示,进行目录读取:
calc.php? num=1;var_dump(scandir(chr(47)))

image

构造:/flagg——chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)

payload:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

得到flag

image

1
flag{21d2d1ed-ae60-4490-a8b0-0f712482f7cd}