level 1~6
Linux读文件的命令:
cat,more,less,tail,head,sort
level 7~9
Linux编辑器:
vim,emacs,nano
level 10~16
其他输出内容的命令:
rev
逆置输出文件内容
od
将指定文件内容以八进制、十进制、十六进制、浮点格式或 ASCII 编码字符方式显示,系统默认的显示方 式是八进制。
使用范例1: hacker@program-misuse~level11:/$ echo |od -tcx1 flag 0000000 p w n . c o l l e g e { s o 8 i 70 77 6e 2e 63 6f 6c 6c 65 67 65 7b 73 6f 38 69 0000020 g b 7 P p r 7 J 0 S h K I 5 3 v 67 62 37 50 70 72 37 4a 30 53 68 4b 49 35 33 76 0000040 l M H u 9 B L . 0 1 M 1 E D L w 6c 4d 48 75 39 42 4c 2e 30 31 4d 31 45 44 4c 77 0000060 Y T M 2 Q z W } \n 59 54 4d 32 51 7a 57 7d 0a 0000071 使用范例2:(去掉空格,转为16进制,*表示与前面重复,为6c) hacker@program-misuse~level11:/$ od -An -w1 -tx1 flag|awk '{for(i=1;i<=NF;++i){printf "%s",$i}}' 70776e2e636f6c*6567657b736f3869676237507072374a3053684b493533766c4d487539424c2e30314d3145444c7759544d32517a577d0ahacker@program-misuse~level11:/$ 转为ascii: pwn.college{so8igb7Ppr7J0ShKI53vlMHu9BL.01M1EDLwYTM2QzW}
hd(hex dump)
用来查看指定文件的十六进制编码
hacker@program-misuse~level12:/$ hd flag 00000000 70 77 6e 2e 63 6f 6c 6c 65 67 65 7b 77 69 4e 4c |pwn.college{wiNL| 00000010 66 31 74 6d 5a 79 30 66 33 63 51 30 4f 70 73 6f |f1tmZy0f3cQ0Opso| 00000020 67 5a 67 43 57 64 78 2e 30 46 4e 31 45 44 4c 77 |gZgCWdx.0FN1EDLw| 00000030 59 54 4d 32 51 7a 57 7d 0a |YTM2QzW}.|
XXD
十六进制dump工具,可以将二进制文件转换为十六进制表示,并以可读的形式显示
base32/64
将文件内容以base32/64编码形式输出。
split
可以将一个大文件分割成很多个小文件。【可以作用于root限制文件,然后使用cat读取分割后的小 文件获取原文件数据】
level 17 ~ 23
不同的存档格式:
vim可以直接查看压缩文档里面的内容,vim flag.zip 进入压缩目录,光标移至想要查看的文件前面键入enter 即可查看内容。
gzip:
gzip + file 压缩文件,不保留原文件。
gzip -d ,[–decompress] flag.gz 解压缩.gz压缩文件。
【gzip -cd flag.gz 查看压缩文件的内容】
bzip2: 命令与gzip相似,压缩后缀为.bz2。
zip: zip -m test.zip a.txt 压缩a.txt到test.zip归档文件,压缩不保留
unzip -l test.zip 仅仅查看压缩文件信息,不解压缩
tar: tar -cf flag.tar flag 压缩flag到flag.tar归档文件,压缩并保留
ar:
用于建立或修改备存文件,或是从备存文件中抽取文件。
ar cv flag.bak flag 压缩flag到flag.bak归档文件,压缩并保留
cpio:
用来建立,还原备份档的工具程序,它可以加入,解开 cpio 或 tar 备份档内的文件。
find . -iname flag -print | cpio -ov >/tmp/flag.cpio 将flag归档为备份文件flag.cpio,(归档需要一点 时间)位于/tmp文件夹 【/路径无root权限】
$ mkdir output $ cd output $ cpio -idv < /tmp/object.cpio
genisoimage :(level23)
命令用于创建 ISO 9660 格式的映像文件,通常用于准备数据以进行光盘刻录。用于创建 ISO 9660 格式的映像文件,通常用于准备数据以进行光盘刻。
genisoimage -o /tmp/testfile.iso /flag 创建为一个名为 testfile.iso 的 ISO 映像,tmp文件夹
参考wp与视频:
EXTREMELY HARD genisoimage -sort /flag -o - /flag
genisoimage --help 2>&1 | grep FILE
https://www.youtube.com/watch?v=14mIjpOXnrM&t=733
level 24~32
单个命令实现绕过root读取flag文件内容
env
利用 env 命令的特殊功能: env 命令可以用来设置环境变量并执行命令。你可以尝试使用 env 命令结合重定向符号来获取 flag 文件的内容。以下是一个示例命令: ** env -i /bin/cat flag**
env -i ./elf 以零环境变量启动elf可执行程序。
find
** **如果只能使用
find
命令来查看文件内容,你可以尝试使用find
命令结合exec
参数来执行其他命令来查> 看文件内容。以下是一个可能的方法:
find / -name 1.txt -exec cat {} \; # 就算cat命令被roo控制也可以读取
这个命令将在整个文件系统中查找名为1.txt
的文件,并使用cat
命令来查看文件内容。{}
表示find
命令找到的文件路径,\;
表示exec
命令的结束。
make
- 想要查看的文件所在文件夹可以创建文件:
1.1 创建Makefile文件:首先,你需要创建一个名为
Makefile
的文件,其中包含了执行cat
命令查看文件内容的规则。你可以使用文本编辑器创建一个Makefile
文件,内容如下:
all: @cat 1.txt
1.2 执行make命令:将
Makefile
文件保存在与1.txt
相同的目录中,然后在终端中执行以下命令:
make -f Makefile
这将执行
Makefile
文件中的规则,即执行cat 1.txt
命令来查看1.txt
文件的内容。通过这种方法,你可以使用
make
命令来查看文件内容。
- 没有创建文件权限
如果无法在根目录下创建文件,你可以尝试以下方法来使用
make
命令查看根目录下的文件内容:** 2.1直接在命令中指定文件路径**:你可以直接在
make
命令中指定文件路径来查看文件内容,而不需要创建Makefile文件。例如,你可以执行以下命令来查看根目录下的1.txt
文件内容:
make -f /dev/stdin <<<'all: ; @cat /1.txt'
这个命令会执行cat /1.txt
命令来查看根目录下的1.txt
文件内容。
2.2 使用echo命令:另一种方法是使用
echo
命令结合make
命令来查看文件内容。你可以执行以下命令:
echo 'all: ; @cat /1.txt' | make -f -
这个命令会将echo
输出的内容通过管道传递给make
命令来执行,从而查看根目录下的1.txt
文件内容。
nice
nice命令是用于调整进程的优先级的Unix/Linux命令。通过nice命令,你可以指定一个命令运行时的优先级,即CPU调度器在决定哪个进程运行时会考虑到这个优先级。较低的优先级值表示更高的优先级,而较高的优先级值表示更低的优先级。 在Unix/Linux系统中,如果使用nice命令而不指定具体的优先级值,则默认情况下,进程的优先级会继承其父进程的优先级。
- 直接在命令中指定文件路径:你可以直接在
nice
命令中指定文件路径来查看文件内容。例如,你可以执行以下命令来使用nice
命令查看根目录下的1.txt
文件内容:
nice cat /1.txt
这个命令会使用nice
命令来运行cat /1.txt
命令,从而查看根目录下的1.txt
文件内容。
- 使用echo命令:类似地,你也可以使用
echo
命令结合nice
命令来查看文件内容。你可以执行以下命令:
echo 'nice cat /1.txt' | sh
这个命令会将echo
输出的内容通过管道传递给sh
命令来执行,从而使用nice
命令查看根目录下的1.txt
文件内容。
timeout
timeout
命令用于设置命令的运行时间限制。你可以使用以下命令来设置运行时间限制并查看文件内容:
timeout 5s cat /1.txt # 可以绕过root权限
这个命令会将cat /1.txt
命令的运行时间限制设置为5秒,即5秒后如果命令还未执行完毕,则会被强制终止。
stdbuf
stdbuf
命令用于修改标准I/O流的缓冲设置。通过stdbuf
命令,你可以控制命令的输入、输出和错误流的缓冲方式,以便更好地控制命令的行为。要使用
stdbuf
命令来获取文件内容,你可以按照以下步骤进行操作:
- 使用stdbuf命令:你可以结合
stdbuf
命令和cat
命令来获取文件内容并修改缓冲设置。例如,你可以执行以下命令来获取根目录下的1.txt
文件内容:
stdbuf -o0 cat /1.txt
在这个命令中,-o0
选项表示将标准输出流的缓冲设置为无缓冲,这样可以立即输出文件内容而不等待缓冲区填满。
指定不同的缓冲模式:除了
-o0
选项外,stdbuf
命令还提供了其他选项来控制标准I/O流的缓冲方式,如-i
用于设置标准输入流的缓冲模式,-e
用于设置标准错误流的缓冲模式等。
通过以上命令,你可以使用stdbuf
命令来获取文件内容并修改标准输出流的缓冲设置,以便更好地控制输出行为。
setarch
setarch
命令用于设置进程的架构(architecture),可以用于在不同的架构下执行命令。通过setarch
命令,你可以模拟不同的CPU架构来执行命令。要使用
setarch
命令来获取文件内容,你可以按照以下步骤进行操作:
- 使用setarch命令:你可以结合
setarch
命令和cat
命令来获取文件内容并设置不同的CPU架构。例如,你可以执行以下命令来获取根目录下的1.txt
文件内容:
setarch x86_64 cat /1.txt
在这个命令中,
x86_64
表示要模拟执行命令的CPU架构为x86_64架构。
- 指定不同的架构:除了
x86_64
架构外,setarch
命令还支持其他架构,如i386
、arm
等,你可以根据需要选择合适的架构来执行命令。
通过以上命令,你可以使用
setarch
命令来获取文件内容并模拟不同的CPU架构来执行命令。
watch 【level 31】
要使用
watch
命令来查看文件内容,你可以按照以下步骤进行操作:
- 使用watch命令:你可以结合
watch
命令和cat
命令来定期查看文件内容。例如,你可以执行以下命令来每隔2秒查看一次根目录下的1.txt
文件内容:
watch -n 2 cat /1.txt
在这个命令中,
-n 2
选项表示每隔2秒执行一次cat /1.txt
命令,从而定期查看文件内容。
- 指定刷新时间间隔:通过调整
-n
选项后面的时间间隔值,你可以控制watch
命令定期执行命令的时间间隔,以便查看文件内容。
通过以上命令,你可以使用
watch
命令来定期查看文件内容,而不需要手动多次执行cat
命令。
使用:watch -x cat /flag # 在一些Linux发行版中,watch命令可能不支持-x选项,因为-x选项通常用于指定要执行的命令的参数。如果watch命令不支持-x选项,你可以尝试使用其他方法来实现相同的效果,例如使用管道符|将cat /flag的输出传递给watch命令。参见上面代码块(这里只能用这个命令...)
socat 【level 32】
socat - /flag
level 33~ 36
whiptail
whiptail是一个在命令行界面下创建对话框的工具,通常用于在Shell脚本中创建交互式用户界面。它可以显示各种类型的对话框,如消息框、输入框、菜单框、Yes/No框等,使用户能够通过键盘输入或选择选项来与脚本进行交互。
以下是一些常用的whiptail对话框类型和用法:
- 消息框(msgbox): 显示一条消息,并等待用户按下“OK”按钮。
whiptail --msgbox "Hello, World!" 10 30
- 输入框(inputbox): 提示用户输入文本,并将输入的文本保存到变量中。
result=$(whiptail --inputbox "Enter your name:" 10 30 3>&1 1>&2 2>&3)
- 菜单框(menu): 显示一个菜单供用户选择,并将选择的结果保存到变量中。
choice=$(whiptail --menu "Choose an option:" 15 30 4 \ "1" "Option 1" \ "2" "Option 2" \ "3" "Option 3" 3>&1 1>&2 2>&3)
- Yes/No框(yesno): 显示一个Yes/No选项供用户选择,并根据选择返回不同的退出状态。
whiptail --yesno "Do you want to continue?" 10 30 if [ $? -eq 0 ]; then echo "User chose Yes" else echo "User chose No" fi
通过使用whiptail,你可以在Shell脚本中创建交互式的用户界面,使用户能够更方便地与脚本进行交互和操作。
利用whiptail来读取文件内容,你可以结合使用--textbox
对话框类型。--textbox
对话框可以显示文件的内容,并允许用户浏览和查看文件内容。
- 使用
**--textbox**
对话框显示文件内容:
whiptail --textbox /path/to/file.txt 20 60
这将在对话框中显示指定文件(/path/to/file.txt)的内容,对话框的大小为20行60列。用户可以使用方向键和Page Up/Page Down键来浏览文件内容。
- 结合保存用户选择的文件内容:
如果需要将用户在--textbox
对话框中选择的文件内容保存到变量中,可以使用重定向来实现:
file_content=$(whiptail --textbox /path/to/file.txt 20 60 3>&1 1>&2 2>&3)
这样,用户在对话框中查看文件内容后,按下Enter键,文件内容将被保存到
file_content
变量中。通过上述步骤,你可以利用whiptail的
--textbox
对话框来显示文件内容,并且可以选择是否将文件内容保存到变量中供后续处理。希望这个详细回答能帮助你成功读取文件内容并与用户交互。如果有任何疑问,请随时提出。
awk
awk是一种强大的文本处理工具,通常用于从文本文件中提取和处理数据。它可以逐行扫描文件,根据指定的模式匹配和执行相应的操作。以下是awk命令的一些主要功能和用途:
- 文本处理
- 数据提取和报告
- 数据转换和格式化
- 文本搜索和替换
- 报表生成
- 自定义脚本
要使用awk命令读取/flag文件,你可以使用awk的
- 使用awk读取文件内容:
awk '{print}' /flag
这条命令将使用awk读取/flag文件的内容,并将其输出到标准输出。
- 将文件内容保存到变量中:
如果需要将文件内容保存到变量中,可以使用重定向来实现:
file_content=$(awk '{print}' /flag)
这样,文件的内容将被保存到
file_content
变量中供后续处理。
- 按行读取文件内容:
如果需要按行读取文件内容并进行处理,可以使用awk的逐行处理能力:
awk '{print "Line " NR ": " $0}' /flag #这条命令将逐行输出/flag文件的内容,并在每行前加上行号。
通过以上步骤,你可以使用awk命令读取/flag文件的内容,并根据需要输出到标准输出或保存到变量。
sed
sed(Stream Editor)是一个流式文本编辑器,用于对文本数据进行处理、转换和编辑。它通常用于Shell脚本和命令行中,可以实现以下功能:
- 文本替换
- 文本删除
- 文本插入
- 文本选取
- 文本转换
- 文本合并
- 脚本编程
要使用sed命令读取文件内容,你可以结合使用sed的打印命令来输出文件的内容。以下是详细的步骤:
- 使用sed读取文件内容:
sed 'p' /path/to/file.txt
这条命令将使用sed读取/path/to/file.txt文件的内容,并将每一行重复打印一次,实现读取文件内容的效果。
- 将文件内容保存到变量中:
如果需要将文件内容保存到变量中,可以使用重定向来实现:
file_content=$(sed 'p' /path/to/file.txt)
这样,文件的内容将被保存到
file_content
变量中供后续处理。
- 按行读取文件内容:
如果需要按行读取文件内容并进行处理,可以使用sed的行范围功能:
sed -n '1,10p' /path/to/file.txt
这条命令将打印/path/to/file.txt文件的前10行内容。
通过以上步骤,你可以使用sed命令读取文件内容,并根据需要输出到标准输出或保存到变量中。
ed
使用ed命令来读取文件内容相对比较复杂,因为ed是一个行编辑器,它主要用于在命令行中逐行编辑文本文件。以下是使用ed命令来读取文件内容的详细步骤:
- 打开文件:
- 首先,使用ed命令打开要读取的文件:
ed /path/to/file.txt
- 显示文件内容:
- 输入以下命令来显示文件内容:
,p
这将打印整个文件的内容到屏幕上。
- 逐行读取文件内容:
- 如果要逐行读取文件内容,可以使用以下命令:
1,$p
这将逐行打印文件的内容到屏幕上,从第一行到最后一行。
- 保存文件内容到变量中:
- 如果需要将文件内容保存到变量中,可以使用重定向和ed的输出命令:
file_content=$(ed -s /path/to/file.txt <<< ",p")
这样,文件的内容将被保存到
file_content
变量中。
- 退出ed编辑器:
- 在完成文件内容的查看后,可以输入以下命令退出ed编辑器:
q
通过以上步骤,你可以使用ed命令来读取文件内容。请注意,ed是一个相对较老的文本编辑器,使用起来可能相对复杂,但仍然可以用于逐行查看和编辑文件内容。