Linux基础知识(持续更新)

Linux基础知识(持续更新)
LkaiLinux基础知识
VPN 连接
这个当时搞了好一会,首先先从hackbox中下载好vpn文件,然后放到kali里面中去
先加好代理
1 | source proxy.sh |
然后进入root权限,再去使用
1 | openvpn 加上你的文件名 |
出现这个之后就代表你成功了,然后进行ssh连接
ssh+用户名+@+你的靶机 ssh htb-student@10.10.15.208, 然后再输入密钥就可以连接成功了
这样子就是连接成功了
系统信息
1 | whoami 显示当前用户名 |
题目
找出机器硬件名称并将其作为答案提交。
使用
1 | uname -m |
htb-student 的主目录的路径是什么?
直接使用
1 | pwd |
htb-student 邮件的路径是什么?
使用env 查看环境变量,|
(管道符):将 env
输出的内容传递给 grep
命令,grep mail
:在 env
输出中查找包含 “mail” 字符串的行
1 | env |grep mail(MAIL) |
为 htb-student 用户指定了哪个 shell?
根据上面同理可得
1 | env |grep SHELL |
系统上安装了哪个内核版本?(格式:1.22.3
根据刚刚的表可知
1 | uname -r |
MTU 设置为 1500 的网络接口的名称是什么?
MTU是什么?最大传输单元MTU(Maximum Transmission Unit,MTU),是指网络能够传输的最大数据包大小,以字节为单位。MTU的大小决定了发送端一次能够发送报文的最大字节数。如果MTU超过了接收端所能够承受的最大值,或者是超过了发送路径上途经的某台设备所能够承受的最大值,就会造成报文分片甚至丢弃,加重网络传输的负担。如果太小,那实际传送的数据量就会过小,影响传输效率。)
使用命令
1 | ifconfig -a |
得到答案 ens192
导航
1 | ls -l 可以列出文件的信息就比如 |
1 | ls -a 可以列出以.开头的隐藏的文件 |
当然两个可以一起并用
题目
htb-user 的主目录中隐藏的 “history” 文件的名称是什么?
“/etc” 目录中的 “sudoers” 文件的索引号是什么?
首先先移动到这个文件夹再去搜索
ls -i
:列出当前目录下的文件,并显示它们的 inode 号
1 | cd etc |
使用文件和目录
mv命令
touch 命令 用来创建新文档
mkdir 命令用来创建目录 使用 -p参数 可以用来创建多个目录
题目
“/var/backups” 目录中最后修改的文件的名称是什么?
1 | cd /var/backups |
可以很清晰的看清楚时间
“/var/backups” 目录中的 “shadow.bak” 文件的 inode 编号是多少?
又是查看编号,那跟之前那题目一样
1 | ls -i |grep shadow.bak |
编辑文件
了解一下vim等的基本指令
查找文件和目录
1 | which 此工具返回应执行的文件或链接的路径。这使我们能够确定作系统上是否提供了特定程序 |
1 | find 除了查找文件和文件夹的功能外,此工具还包含过滤结果的功能。我们可以使用过滤器参数,例如文件大小或日期。我们还可以指定是否只搜索文件或文件夹 |
过滤器功能如下
1 | find / -type f -name *.conf -user root -size +20k -newermt 2020-03-03 -exec ls -al {} \; 2>/dev/null |
1 | locate 这个工具没有我们可以使用的那么多过滤器选项,但是还有好处和坏处 |
题目
1.2020 年 3 月 3 日之后创建的小于 28k 但大于 25k 的配置文件名称是什么?
这个题目条件比较多,于是我们可以用find命令 去查看usr下的
/usr/bin
:存放大部分用户级别的程序(例如常用的命令和应用程序)。
/usr/lib
:存放共享库文件,这些库文件是程序运行时需要的。
/usr/local
:存放本地安装的程序和数据,通常是管理员手动安装的软件。
/usr/share
:存放共享的只读数据,例如文档、帮助文件、图标等。
/usr/include
:存放头文件(通常是 C 程序的头文件),用于编译程序时引用。
1 | find /usr -type f -name "*.conf" -size +25k -size -28k -newermt 2020-03-03 |
2.系统上存在多少个扩展名为 “.bak” 的文件?
这个就一个条件
使用locate命令
3.提交 “xxd” 二进制文件的完整路径。
让我们查找路径于是用 which命令去搜索得到答案
文件描述和重定向
1.用于输入的数据流 STDIN – 0
2.用于输出的数据流 STDOUT – 1
3.Data Stream (用于与发生的错误相关的 Output) STDERR – 2
这里使用案例来会比较好理解一些
这里的大于符号 将标准输出重定向到文件,如果文件存在,会覆盖原有内容
如果是两个大于符号 将标准输出追加到文件的末尾,如果文件存在,内容会被追加到文件末尾。
假如使用命令
1 | find /etc/ -name shadow |
终端会出现以下情况
1.在这种情况下,将错误标记显示,我们可以通过对错误的重定向到“null device”,这样就会丢弃数据
1 | find /etc/ -name shadow 2>/dev/null |
这样就不会报错了
2.我们也可以将输出的地方写进一个文件
1 | find /etc/ -name shadow 2>/dev/null > results.txt |
3.然后我们也可以将输出和报错都重定向到单独的文件
1 | find /etc/ -name shadow 2> stderr.txt 1> stdout.txt |
输入重定向(<
):
小于号的基本作用是将一个文件的内容传递给一个命令作为输入。
4.我们可以用来重定向输入
1 | cat < stdout.txt |
总感觉没有区别,于是去搜了一下
5.重定向stdout并附加文件
当我们使用大于号 () 重定向 时,如果 文件尚不存在,则会自动创建一个新文件。如果此文件存在,则无需确认即可覆盖该文件。如果我们想附加到现有文件,我们可以使用双 greater-than 号
1 | find /etc/ -name passwd >> stdout.txt 2>/dev/null |
6.将STDIN流重定向到文件
我们还可以使用双小字符 () 通过流添加我们的标准输入。我们可以使用 Linux 系统文件的所谓 () 函数,它定义了输入的结束。在下一个示例中,我们将使用命令通过流读取流输入,并将其定向到名为 “.” 的文件
1 | cat << EOF > stream.txt |
7.pips
使用文件重定向 + 过滤符
1 | find /etc/ -name *.conf 2>/dev/null | grep systemd |
可以再使用指令计算获得的结果的总数
1 | find /etc/ -name *.conf 2>/dev/null | grep systemd | wc -l |
题目
系统上存在多少个文件扩展名为 “.log” 的文件?
因为是.log后缀,然后又要计算所以用命令
1 | find / -type f -name "*.log" 2>/dev/null | wc -l |
目标系统上总共安装了多少个软件包?
1 | dpkg -l |grep ^ii |wc -l |
dpkg -l
:列出系统中安装的所有软件包及其状态。
grep ^ii
:过滤出所有已安装的包(ii
表示安装的包状态)。
wc -l
:统计输出结果的行数,即已安装的包的数量
ii
(installed installed):已安装的包
rc
(removed config-files):已卸载但配置文件仍然保留的包
un
(unknown):从未安装过的包
筛选内容
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
1 | more /etc/passwd |
less 命令
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
1 | less /etc/passwd |
顺便去搜了下他两的区别
head 命令
有时我们只对文件开头或结尾的特定问题感兴趣。如果我们只想获取文件的行数,我们可以使用 工具 .默认情况下,如果未另行指定,则打印给定文件或输入的前十行
1 | head /etc/passwd |
tail命令
如果我们只想查看文件或结果的最后部分,我们可以使用 called 的对应项,它返回十行
1 | tail /etc/passwd |
sort命令
根据处理的结果和文件,它们很少被排序。通常有必要按字母或数字顺序对所需的结果进行排序,以获得更好的概览。为此,我们可以使用一个名为 的工具
1 | cat /etc/passwd | sort |
grep命令
在许多情况下,我们需要搜索与我们定义的模式匹配的特定结果。用于此目的的最常用工具之一是 grep,它为模式搜索提供了广泛的强大功能。例如,我们可以使用 grep 来搜索默认 shell 设置为 ./bin/bash
1 | cat /etc/passwd | grep "/bin/bash" |
这只是如何应用 grep 根据预定义模式有效筛选数据的一个示例。另一种可能性是排除特定结果。为此,选项 “” 与 一起使用。在下一个示例中,我们排除了禁用了名称为 “” 或 “” 的标准 shell 的所有用户
1 | cat /etc/passwd | grep -v "false\|nologin" |
cut命令
具有不同字符的特定结果可以分隔为分隔符。在这里,了解如何删除特定的分隔符并在指定位置的行上显示单词很方便。可用于此目的的工具之一是 。因此,我们使用选项 “” 并将分隔符设置为冒号 () 并使用选项 “” 定义我们想要输出的行中的位置
1 | cat /etc/passwd | grep -v "false\|nologin" | cut -d":" -f1 |
cut -d":" -f1
的作用是从文本中提取以 :
分隔的第一列。
tr命令
用我们定义的字符替换一行中的某些字符的另一种可能性是 工具 .作为第一个选项,我们定义要替换的字符,作为第二个选项,我们定义要替换它的字符。在下一个示例中,我们将冒号字符替换为空格
1 | cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " |
column 命令
由于搜索结果通常具有不明确的表示形式,因此该工具非常适合使用 “.” 以表格形式显示此类结果
1 | cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " | column -t |
awk命令
正如我们可能已经注意到的,用户 “” 的行有一列太多了。为了尽可能简单地整理出这样的结果,() 编程是有益的,它允许我们显示该行的第一个 () 和最后一个 () 结果
1 | cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " | awk '{print $1, $NF}' |
awk
处理文本数据,$1
代表第一列(用户名),$NF
代表最后一列(默认 shell)。
作用:只输出用户名和其对应的默认 shell。
sed命令
有时我们想更改整个文件或标准输入中的特定名称。我们可以为此使用的工具之一是名为 .最常见的用途之一是替换文本。在这里,查找我们以正则表达式 (regex) 形式定义的模式,并将其替换为我们也定义的另一个模式。让我们坚持最后的结果,并假设我们想将单词 “” 替换为 “”
开头的 “” 标志代表 substitute 命令。然后我们指定要替换的模式。在斜杠 () 之后,我们在第三个位置输入要用作替换的模式。最后,我们使用 “” 标志,它代表替换所有匹配项
1 | cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " | awk '{print $1, $NF}' | sed 's/bin/HTB/g' |
wc -l 命令
最后但并非最不重要的一点是,了解我们有多少成功的比赛通常很有用。为避免手动计算行数或字符,我们可以使用 工具 .使用 “” 选项,我们指定仅计算行数
1 | cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " | awk '{print $1, $NF}' | wc -l |
题目
在所有接口上侦听目标系统上有多少个服务?(不仅仅是在 localhost 和 IPv4 上
哈哈,完全不会啊,然后去搜了一下
1 | ss -l -4 | grep -v "127\.0\.0" | grep "LISTEN" | wc -l |
ss -l -4
ss
是 Linux 系统下的一个网络工具,用于显示套接字(socket)信息。它比 netstat
更加高效和快速。
-l
选项表示显示当前系统中所有处于 监听(LISTEN) 状态的网络连接。监听状态通常指的是那些等待进入连接的服务端口,比如 HTTP 服务(80 端口)或 SSH 服务(22 端口)。-4
选项表示只显示 IPv4 地址的网络连接。如果没有这个选项,它默认会显示所有协议(IPv4 和 IPv6)。在此命令中,使用了-4
,所以它只会列出 IPv4 地址相关的连接
grep -v "127\.0\.0"
grep
是 Linux 下常用的文本搜索工具,用来筛选符合条件的行。
-v
选项表示 反向匹配,即排除包含某些文本的行。"127\.0\.0"
代表 IP 地址127.0.0.x
(本地回环地址)。回环地址通常用于网络进程之间的通信,比如一个程序与同一台机器上的服务进行交互。因此,这个命令通过grep -v
排除了所有包含127.0.0
(即本地回环地址)的行
wc -l
wc
是 Linux 下的一个命令,用来统计行数、字数、字符数等。
-l
选项表示只输出行数。它会统计前面所有命令输出的行数。
确定 ProFTPd 服务器在哪个用户下运行。提交用户名作为答案。
1 | cat /etc/proftpd/proftpd.conf | grep "User" |
查找这个文件中的字符
嘿嘿第三个题目不会写
正则表达式
1 | (a) --圆括号用于分组 圆括号用于将正则表达式的一部分分组,表示这一部分可以作为一个整体进行处理。它们常用于将多个字符或模式组合成一个子模式,并且可以与量词或其他操作符一起使用 |
1 | grep -E "(my|false)" /etc/passwd |
AND运算符
1 | grep -E "(my.*false)" /etc/passwd |
1 | grep -E "my" /etc/passwd | grep -E "false" |
在etc/passwd 中查找存在my的行,然后在这基础上再去寻找false的行
权限管理
在linux系统中,如果没有目录的权限,用户将无法访问目录的内容,而是会看到 “” 错误消息
跟windows系统差不多,权限差不多,就是可读,可写,可执行 对应英文字母分别是 r,w,s
更改权限
我们可以使用命令来修改权限,比如先查看权限
更改所有者
题目
用户管理
在这里先讲一下一些文件存放的东西
/etc/passwd
是 Linux/Unix 系统中 用户账号信息 的存放文件。它包含了系统中的 所有用户,包括普通用户、系统用户(如 root
、daemon
)、服务账户等
/etc/shadow : 该文件是一个关键的系统文件,用于存储所有用户帐户的加密密码信息。出于安全原因,它只能由 root 用户读取和写入,以防止未经授权访问敏感的身份验证数据
当读取一些重要的文件,或执行一些重要的指令的时候,就不能只用普通的权限了,就要进入到最高管理权限也就是root
按道理我本来应该是能够运行的,但是密码总输入不对
1 | sudo 以其他用户身份执行命令 |
useradd
于 创建新用户*。当你需要添加一个新的用户时,使用 useradd
来创建账户及其相关的目录、组等。
-m
:自动创建用户的主目录。
-d
:指定用户的主目录。
-s
:指定用户的登录 shell。
-G
:指定附加组。
-u
:指定用户的 UID(用户 ID)。
usermod
是用来修改已经存在的用户账户的配置,如更改用户的主目录、组、shell 等。
-l
:修改用户名。
-d
:修改用户的主目录。
-m
:移动主目录中的文件到新目录。
-s
:修改用户的登录 shell。
-G
:修改用户的附加组。
-u
:修改用户的 UID。
-a
:将用户追加到附加组(与 -G
配合使用)
-L
或 --lock
锁定用户账户,防止该用户登录。锁定后,用户无法使用密码进行身份验证。这个选项常用于临时禁用某个账户。
-U
或 --unlock
解锁用户账户,使其可以重新登录。解锁后,用户可以再次通过密码登录。
-aG <组名>
或 --append --groups <组名>
将用户添加到附加组。-a
选项表示将用户追加到指定组,而不是替换掉用户原有的附加组。如果没有使用 -a
,则会替换用户的所有附加组。
-r
或 --system
修改用户为系统账户。系统账户通常不需要登录功能,主要用于运行系统服务和守护进程。通常,系统账户的 UID 比较低,一般用于没有登录需求的用户。
su -c ‘命令’ <用户名>
-c或
–command:该选项后面跟着你要执行的命令。
su` 命令将会以指定的用户身份执行此命令,执行完后会退出该用户的环境,返回到原来的用户。
<用户名>:如果不指定用户名,
su默认为
root` 用户。若要以其他用户身份执行命令,指定目标用户名即可。
所以三个答案的答案就是
需要设置哪个选项才能使用 “useradd” 命令为新用户创建主目录? -m
需要设置哪个选项才能使用 “usermod” 命令锁定用户帐户?(选项的加长版) –lock
需要设置哪个选项才能使用 “su” 命令以其他用户身份执行命令?(选项的加长版) –command
执行流程管理
systemctl
是一个用于管理 systemd
系统和服务管理器的命令。systemd
是现代 Linux 系统(如 Ubuntu、Debian、CentOS、Fedora 等)中广泛使用的初始化系统和服务管理器,负责启动和管理系统中的服务、进程、网络、硬件和日志等
这是一个很强大的命令,但是对现在我来说还运用不到,以后再详细理解
有三种方法可以一个接一个地运行多个命令
分号 双字符(&&) 和 管道(|)
题目
使用“systemctl”命令列出所有服务单元,并提交单元名称,并提交描述为“加载由 snapd 内部管理的 AppArmor 配置文件”作为答案。
1 | systemctl list-units --all | grep "Load AppArmor profiles managed internally by snapd" |
任务调度
不嘻嘻又是一个不太懂的章节
Systemd 与 Cron
Systemd 和 Cron 都是可以在 Linux 系统中用于调度和自动化流程的工具。这两个工具之间的主要区别在于它们的配置方式。使用 Systemd,您需要创建一个计时器和服务脚本,告诉作系统何时运行任务。另一方面,使用 Cron,您需要创建一个文件来告诉 cron 守护进程何时运行任务
题目
“dconf.service” 的服务类型是什么?
1 | systemctl show dconf.service -p Type |
但是我这里没显示不知道为什么
在 systemd
中,服务类型通常分为以下几种:
simple
:默认的服务类型,指示服务会立即启动并保持运行,且没有依赖其他进程。forking
:服务会在启动时创建一个子进程来运行,主进程在完成启动后会退出。oneshot
:用于执行一次性任务的服务,执行完后会退出。dbus
:用于与 D-Bus 系统进行交互的服务。notify
:服务会通知systemd
启动成功。idle
:服务会等待所有其他服务启动完成后才会启动。
但是答案是 dbus
求下列函数是否在0,0处连续 z=sin(x的三次方 + y的三次方)/x的平方+y的平方 x的平方+y的平方不等于0 0
x的平方+y的平方=0
web服务
简单了解一下apache
Apache 的真正优势在于其模块化 — 它可以通过各种模块进行自定义和扩展以执行特定任务。例如,它的作用类似于密码箱,通过加密数据来保护浏览器和 Web 服务器之间的通信。该模块就像一个流量控制器,将请求定向到正确的目的地,在设置代理服务器时特别有用。其他模块(例如 and)可让您精细控制在浏览器和服务器之间传输的数据,从而允许您动态修改 HTTP 标头和 URL,例如调整流的路线。除了处理静态web内容外,apache还支持通过服务器端脚本语言创建动态 Web 页面
先启动apache
1 | sudo systemctl start apache2 |
Apache 启动后,我们使用浏览器导航到默认页面 (http://localhost)。默认情况下,Apache 将在 HTTP 端口 80 上提供服务,只要您输入 HTTP URI,您的浏览器也将默认使用此端口(除非另有说明)
一般是80端口,启动之后打开本地网页
出现这个就是成功了
cURL
是一种工具,它允许我们通过 、 、 、 或 等协议从 shell 传输文件,通常,它使我们能够通过命令行远程控制和测试网站。除了远程服务器的内容外,我们还可以查看单个请求以查看客户端和服务器的通信
1 | curl http://localhost |
可以用本地测试一下
curl 的替代方案是 工具 .使用此工具,我们可以直接从终端从 FTP 或 HTTP 服务器下载文件,它是一个可靠的下载管理器。如果我们以相同的方式使用 wget,则与 curl 的不同之处在于网站内容是在本地下载和存储的,
题目
找到一种方法,在 Pwnbox 或本地 VM 中使用 “npm” 启动一个简单的 HTTP 服务器。提交在端口 8080 上启动 Web 服务器的命令(使用 short 参数指定端口号)
http-server
是一个 Node.js 工具,用于在本地启动一个简单的 HTTP 服务器,通常用于开发和测试静态网站 -p 这个参数就是指定端口号的
所以构造payload
1 | http-server -p 8080 |
找到一种方法,在 Pwnbox 或本地 VM 中使用 “php” 启动一个简单的 HTTP 服务器。提交在 localhost (127.0.0.1) 端口 8080 上启动 Web 服务器的命令
你可以使用 PHP 自带的 内置 HTTP 服务器 来启动一个本地 Web 服务器。
-S参数用来启动PHP内置服务器
1 | php -S 127.0.0.1:8080 |
文件系统管理
不嘻嘻看不懂
题目
我们的 Pwnbox 中有多少个分区?(格式: 0)
lsblk
会列出系统上的所有块设备(如硬盘和分区),并显示它们的挂载点和大小。
发现有三个