Linux Strength Training I

初学者 linux 命令加强学习

房间信息#

房间名称 Linux Strength Training
描述 简单的 linux 机器来练习技能
积分 110💰
作者 BadWiChell

0 x 001 - 文件查找#

作为一名安全研究人员,经常需要根据各种条件(包括但不限于以下条件)在系统上查找特定文件/文件夹:

  • 文件名
  • 大小
  • 用户/组
  • 修改日期
  • 访问日期
  • 其关键词内容

因此,我们可以使用以下语法来做到这一点:

我们可以做什么 语法 案例
根据文件名称查找文件 find [目录路径] -type f -name [文件名] find /home/Andy -type f -name sales.txt
根据目录名称查找目录 find [目录路径] -type d -name [文件名] find /home/Andy -type d -name image
根据大小查找文件 find [目录路径] -type f -size [大小] find /home/Andy -type f -size 10c
根据用户名查找文件 find [目录路径] -type f -user [用户名] find /etc/server -type f -user john
根据组名称查找文件 find [目录路径] -type f -group [组名] find /etc/server -type f -group teamstar
查找在特定日期之后修改的文件 find [目录路径] -type f -newermt ‘[日期和时间]’ find /-type f -newermt ‘6/30/2020 0:00:00’
根据修改日期查找文件 find [目录路径] -type f -newermt [开始日期范围] ! -newermt [结束日期范围] find /-type f -newermt 2013-09-12 !-newermt 2013-09-14
根据访问日期查找文件 find [目录路径] -type f -newerat [开始日期范围] ! -newerat [结束日期范围] find  / -type f -newerat 2017-09-12 !-newerat 2017-09-14
查找具有特定关键字的文件 grep -iRl [目录路径/关键字] grep -iRl ‘/folderA/flag’
阅读 find 命令的手册 man find man find

注意! 根据大小找文件:

c 为字节、k 为千字节、M 为兆字节、G 为千兆

问题:#

阅读名为“ReadMeIfStuck.txt”的文件。

topson@james:~$ cat ReadMeIfStuck.txt

Looking for flag 1?:It seems you will have to think harder if you want to find the flag. Perhaps try looking for a file called additionalHINT if you can't find it..

Looking for flag 2?: look for a file named readME_hint.txt

好吧,让我们找到字符串 addittionalNINT 的文件,我们可以使用以下命令

find /-type f -name addittionalNINT 2>/dev/null

/ 告诉该工具查看该路径内的所有文件夹。/ 是 Linux 上可能的最高路径,-type f 告诉工具只查找文件 -name additionalHINT 告诉工具只查找该字符串。由于我无权访问系统上的所有文件夹,当查找工具试图遍历它们时,我也会遇到很多错误。2>/dev/null 告诉工具丢弃这些消息。

topson@james:~$ find / -type f -name additionalHINT 2>/dev/null
/home/topson/channels/additionalHINT

topson@james:~$ cat /home/topson/channels/additionalHINT
try to find a directory called telephone numbers... Oh wait.. it  contains a space.. I wonder how we can find that....

根据上述指令找到了该文件,我们进行 cat 该文件得知,我们还需要找到 telephone numbers

find / -type d -name telephone\ numbers 2>/dev/null

我使用 \ 这是一个转义字符,转义字符让我们搜索一个有特殊用途的字符。在这种情况下它是“”。

topson@james:~$ find / -type d -name telephone\ numbers 2>/dev/null
/home/topson/corperateFiles/xch/telephone numbers

我们使用 cat 查看该文件

topson@james:~$ cd /home/topson/corperateFiles/xch/telephone\ numbers/
topson@james:~/corperateFiles/xch/telephone numbers$ ls
readME.txt
topson@james:~/corperateFiles/xch/telephone numbers$ cat readME.txt
202-555-0150
202-555-0125
617-555-0115
+1-617-555-0115
+1-617-555-0186
+1-617-555-0138
use the Find command to find a file with a modified date of 2016-09-12 from the /workflows directory

从命令中得知文件在/workflows

find / -type d -name workflows 2>/dev/null

topson@james:~/corperateFiles/xch/telephone numbers$ find / -type d -name workflows 2>/dev/null
/home/topson/workflows

好了,我们找到了目录,但是要找到这个文件,需要找到该文件我们可以使用上述终端中提到的日期

find /home/topson/workflows -type f -newermt 2016-09-11 ! -newermt 2016-09-13

topson@james:~/corperateFiles/xch/telephone numbers$ find /home/topson/workflows -type f -newermt 2016-09-11 ! -newermt 2016-09-13
/home/topson/workflows/xft/eBQRhHvx

用 less /home/topson/workflows/xft/eBQRhHvx 后输入/后接关键词 Flag 查看我们的旗帜

0 x 002 - 文件操作#

我们可以做如下操作:

  • 复制文件和文件夹
  • 移动文件和文件夹
  • 重命名文件和文件夹
  • 创建文件和文件夹
我们能做什么 语法 案例
复制文件/文件夹 cp [文件/文件夹] [目录] cp ssh.conf /home/new
移动文件/文件夹 mv [文件/文件夹] mv ssh.conf /home/new
同时移动多个文件/文件夹 mv [file1] [file2] [file3] -t [要移动到的目录] mv logs.txt keys.conf script.py -t /home/savedWork
将所有文件从当前目录移动到另一个目录 mv * [要将文件移动到的目录] mv * /home/脚本
重命名文件/文件夹 mv [当前文件名] [新文件名] mv ssh.conf 新 SSH.conf
创建一个文件 touch [文件名] touch 1.txt
创建一个文件夹 mkdir [文件夹名] mkdir new 1
输出文件内容 cat [文件名] cat 1. Txt
上传文件到远程机器 scp [文件名] [用户名]@[远程机器 IP]:/[上传目录] scp example.txt john@192.168.100.123 :/home/john/
运行 bash 脚本程序 ./脚本名称 ./sh. Sh

问题:#

在 topson 的目录中找到一个名为 readME_hint.txt 的文件并阅读它。使用它给你的说明,得到第二个标志。

我们连接到靶场:

topson@james:~$ find / -type d -name  readME_hint.txt 2>/dev/null
topson@james:~$ find / -type f -name  readME_hint.txt 2>/dev/null
/home/topson/corperateFiles/RecordsFinances/readME_hint.txt

我们来 cat 这个文件:

topson@james:~$ cat /home/topson/corperateFiles/RecordsFinances/readME_hint.txt
Instructions: Move the MoveMe.txt file to the march folder directory and then execute the SH program to reveal the second flag.

 you need to research three things:
				 how to execute bash files
				 how to work with files that begin with a - (dash) whether that is to do with copying or moving files 
				 how to work with files with spaces

find / -type f -name *MoveMe.txt* 2>/dev/null

注意 * 号为匹配任何字符

mv -- /home/topson/corperateFiles/RecordsFinances/-MoveMe.txt /home/topson/corperateFiles/RecordsFinances/-march\ folder/cd --

/home/topson/corperateFiles/RecordsFinances/-march\ folder/

0 x 003 - hash 是什么#

如何破解哈希?#

可以通过暴力破解的方法破解哈希。这实质上意味着使用单词列表并将单词列表中的每个潜在密码输入哈希函数,以查看我们是否获得与数据库中存储的任何哈希值相等的哈希等效输出。但是,在示例中,我们在指定要与计算出的哈希值进行比较的单词列表之前,将哈希值存储在文本文件中。

使用一个名为 John the Ripper 的程序,我们可以指定我们希望破解的哈希 (md5) 单词列表 (rockyou.txt) 和单词列表 (hash.txt) 的格式。请参阅完整的手册页,以更全面地了解您可以使用该程序运行的所有命令。

john --format=md5 --wordlist=/usr/share/dict/rockyou.txt hash1.txt

$ john --format=raw-md5 --wordlist=/usr/share/dict/rockyou.txt hash1.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 128/128 AVX 4x3])
Warning: no OpenMP support for this hash type, consider --fork=16
Press 'q' or Ctrl-C to abort, almost any other key for status
secret123        (?)
1g 0:00:00:00 DONE (2023-05-10 16:05) 50.00g/s 854400p/s 854400c/s 854400C/s extremo..jaymark
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed

注意:如果遇到不知道其类型的哈希,可以使用称为哈希标识符的工具。(注意,它可能并不准确)

hash-identifier 5d7845ac6ee7cfffafc5fe5f35cf666d

Hash-identifier 是一款用于识别各种 hash 算法和编码的命令行工具。 它可以识别的 hash/编码类型包括:

  • MD 5
  • SHA 1
  • SHA 2 (SHA 224, SHA 256, SHA 384, SHA 512)
  • NTLM
  • LM
  • Double MD 5
  • Triple MD 5
  • MD 4
  • MD 2
  • RIPEMD-160
  • CRC 32
  • Etc. 以及各种编码方式, 如:
  • Base 64
  • ROT 13
  • URL Encoding
  • Hex Encoding
  • Etc. 使用 hash-identifier, 你可以输入一个 hash 字符串或编码, 它会自动检测该串的类型和对应的算法, 以帮助你识别和验证各种 hash。 例如, 如果我们输入一个 MD 5 hash: Bash $ hash-identifier 5 d 41402 abc 4 b 2 a 76 b 9719 d 911017 c 592

Analyzing ‘5 d 41402 abc 4 b 2 a 76 b 9719 d 911017 c 592’ [+] MD 5 hash 它会正确识别这是 MD 5 hash。 再如一个 Base 64 编码的字符串: Bash $ hash-identifier YTUxMDEx

Analyzing ‘YTUxMDEx’ [+] Base 64 encoded 它也可以正确识别这是 Base 64 编码。 Hash-identifier 支持识别大多数常见的 hash 算法和编码方式, 可以非常方便地在命令行下快速识别 hash 或编码类型, 无需手动测试各种算法, 极大提高效率。

注意:如果您有兴趣,一个更现代、更强大的 hash-identifer 替代工具是一个名为 haiti 的工具: https:
//github.com/noraj/haiti

问题:#

我们进入机器,发现在目录没有该文件,我们尝试查找:

sarah@james:~$ find / -type f -name hashA.txt 2>/dev/null
/home/sarah/system AB/server_mail/server settings/hashA.txt

我们查看这个文件中存储的 hash。我们使用:

hash-identifier f9d4049dd6a4dc35d40e5265954b2a46

后查看 hash 类型后使用:

john --format=raw-md4 /usr/share/dict/rockyou.txt 1.txt

得到我们的密码

找到文件扩展名为“.mnf”的单词列表,并使用它来破解文件名为 hashC.txt 的哈希。密码是什么?

我们使用 find 来查找该后缀文件:

find / -type f -name *.mnf 2>/dev/null

sarah@james:~$ find / -type f -name *.mnf 2>/dev/null
/home/sarah/system AB/db/ww.mnf

后查找 hashC. Txt:

find / -type f -name hashC.txt 2>/dev/null

后使用命令: john --format=raw-sha256 --wordlist=/home/hughug/Downloads/ww.mnf 3.txt

0 x 004 - 什么是 base 64?#

Base64 是一组二进制到文本的编码方案,以 ASCII 字符串格式表示二进制数据。总之,它只是表示数据的另一种方式;一些系统依赖于 base64 数据编码进行处理,而其他系统则可能不依赖。

找到一个名为 encoded.txt 的文件。什么是特殊答案?

让我们使用:find / -type f -name encoded.txt 2>/dev/null

进行了 base64 加密,我们来进行转换一下:

cat /home/hughug/Downloads/encoded.txt | base64 -d > test.txt

我们使用 less text. Txt 来查找关键词

我们继续查找 ent. Txt

find / -type f -name ent.txt 2>/dev/null

现在,找到文件“ ent.txt ”。它似乎不是 base64 编码的字符串。使用 hash-identifier 检查哈希算法。使用散列标识符进行检查时,会看到它是md4散列。

0 x 005 - 什么的 gpg#

如何加密?#

如何解密?#

找到一个名为 layer4.txt 的加密文件,其密码为 bob。使用它来定位标志。旗帜是什么?

0 x 006 - John 破解 gpg 文件#

现在对使用 gpg 有了基本的了解,下一个问题是,如果我们没有解密文件的密码或密钥怎么办?我们怎样才能破解这个。

我们可以使用 gpg2john 来进行破解

我们可以通过任务来一一解答:

问题:
找到一个名为 personal.txt.gpg 的加密文件,并找到一个名为 data.txt 的单词表。在对加密文件进行暴力破解之前,使用 tac 来反转单词表。加密文件的密码是什么?

sarah@james:~$ find / -type f -name personal.txt.gpg 2>/dev/null
/home/sarah/oldLogs/units/personal.txt.gpg

首先使用 find 命令来查找该文件,在定位到该文件,我们将他下载到我们的物理机中。

拿到 data.txt 后我们需要用 tac 命令来反转一下单词表:

tac data.txt

gpg2john personal.txt.gpg > hash //首先使用`gpg2john`来转化密钥文件生成hash文件

john --wordlist=data.txt --format=gpg hash //指定字典来进行爆破

得到 gpg 密钥后使用密钥来得到答案

0 x 007 - 读取 SQL 数据库#

SQL 是一种用于存储、操作和从数据库中检索数据的语言。因此,牢牢掌握如何在 Linux 中从数据库中读取数据的概念非常重要。如果您对数据库的理解薄弱或对它们一无所知,请在继续之前先阅读此内容:   //www.elated.com/mysql-for-absolute-beginners/  因为它将为初学者充分解释数据库的概念。要记住的关键是,开发人员大多创建“关系数据库”,它使用多个相互引用的数据库来组织数据,因此得名“关系数据库”。此外,每个数据库都包含记录表,每个表都可以包含多个列和行,这些列和行以有组织的格式存储数据。现在我们已经解决了这个问题,让我们开始吧。

服务 mysql 启动/停止#

Start 启动 mysql,而 stop 停止它。此外,如果您在 mysql 运行时遇到任何问题,可以使用 restart

service start mysql

连接到远程 SQL 数据库#

可以托管 Mysql 数据库以供远程访问。要访问远程数据库,请使用以下命令:

mysql -u [用户名] -p -h [主机 ip]

在本地打开 SQL 数据库文件#

要在本地打开 mysql 文件,只需切换到 mysql 文件的目录并键入 mysql,如下所示。您将被带到 mysql 的专门命令提示符。 

注意:在某些情况下,如果 mysql 系统配置为需要身份验证,您可能必须运行 mysql -p [password]。

mysql -u [用户名] -p

显示数据库#

在此之后,将看到 mysql 如何花费一点时间来加载数据库。完成后,键入以下内容也可以查看所有关系数据库:

显示数据库;

SHOW DATABASES;

选择要查看的数据库#

我们可以使用 use 命令后跟数据库名称来选择其中一个数据库。在下面的示例中,我们选择“employees”数据库。

USE [数据库名称];

显示所选数据库中的表#

我们可以显示我们之前选择的数据库中的哪些表:

SHOW TABLES;

显示表格;

描述表数据结构#

我们还可以使用 DESCRIBE 命令查看单个表的表结构:

DESCRIBE [表名];

显示存储在特定表中的所有数据#

现在是真正有趣的部分。让我们使用以下命令显示存储在 employees 数据库中的所有数据:

SELECT * FROM [表名]

如下图,我们可以看到很多员工信息:

我们该如何在海量数据中找到我们需要的内容,我们可以使用以下语句:

SELECT * FROM employees WHERE last_name LIKE "%{%}%";

现在,可以注意到该标志包含答案空间中给出的格式中的“{”符号。从员工表中哪个数据类型会有那个符号,所以 int 不能有,因为它只有所有数字,数据也不能有那个符号,同样适用于性别。
最后,它缩小到first_namelast_name,因为它使用 varchar 数据类型。我们将使用模式来查找标志。
可以找到有关 w3schools 的更多信息:https ://www.w3schools.com/SQL/func_sqlserver_patindex.asp

最终挑战#

  1. 进入 /home/shared/chatlogs 目录并阅读名为:LpnQ 的第一条聊天记录。使用它来帮助您继续执行下一个任务。
  1. Sameer 的 SSH 密码是什么?

首先,我需要区分消息的相关部分。对于这个问题,我想找到 Sameer 的 SSH 密码。
露西说新的安全工程师不小心在某个地方以明文形式存储了一个 SSH 密码。
我通过使用 grep -iRl Sameer /home 2>/dev/null在文件中搜索 Sameer 来检查是否可以找到任何内容,我发现了三个聊天记录,其中一个是我刚刚阅读的。

我们分别对他们进行阅读,并找到了 SSH 密码

这里注意

-i 用于进行不区分大小写的搜索。  
-R 用于递归搜索所有文件  
-l 用于仅打印与我正在搜索的单词匹配的文件。我在 /home 中搜索,因为我主要是在寻找聊天记录,在这种情况下,它们存储在 home/shared 下。我使用 /home 而不是 /home/shared 因为我想同时搜索 home/shared 和 home/sarah。
  1. sql 数据库备份副本的密码是多少

通过参考第二条消息,我被告知我需要登录 Sameers 帐户并进行搜索。我还被告知我应该在 home/shared/sql/conf中寻找一个大约 50mb 的文件。通过找到该文件,我将知道词表的存储位置,以及我要查找的词表中有一个以“ebq”开头的词。首先,我通过 ssh 进入 Sameer 的帐户。之后,我使用find /home/shared/sql/ -type f -size 50M来搜索文件。cat 的时候发现一个满是 文字的文件,用 nano 打开搜索,发现信息在最上面。

解密 base64 (因为看到是=号结尾,我就判定为 base64 就没有再用 hash 工具继续校验)

并获取单词列表所在的目录。现在我需要找到单词列表,我使用: grep -iRl ebq /home/sameer/History\ LB/labmind/latestBuild/configBDB/ 来搜索单词列表。

我用 cat 将他们合并成一个文件:

使用 grep -e ebq wordlistall.txt 我们会得到所有以ebq开头的单词,所以让我们复制它们并将其保存在另一个文件中。

接下来我需要找到并下载实际的备份:

根据 Sameer 在上一条消息中的目录。备份将以消息的日期 (2020-08-13) 命名。我用:

find /home/shared/sql/ -type f -name *2020–08–13* 2>/dev/null

找到了

gpg2john 2020–08–13.zip.gpg 2020.zip

现在让john使用ebq.txt wordlist破解密码

john — format=gpg — wordlist=ebq.txt 2020–08–13.zip

john — format=gpg — show 2020–08–13.zip

得到密码:ebqattle

找到用户 James 的 SSH 密码。密码是什么?

现在解压2020–08–13.zipcd到文件夹中

打开 mysql 并使用以下命令:

mysql -u sarah -p (enter password for password)
source employees.sql
show databases;
use employees;
describe employees;
select * from employees where first_name like ‘James’;

ssh password of james

最后一步就是找到 flag, 自己登陆 james 用户在 root 查看吧~