应该是今年为初学者新加的项目,不是很难,但是还是有很多不知道的,浅 浅 写了一遍收获还不错。题目旁边还多了个hacker,我记得以前只有solve来着,不知道什么意思,可能是更hacker的解决办法,心情爆炸来pwn看看还是不错的。
-Hello Hackers
Intro to Commands
学会执行命令就行,直接
-
-
-Intro to Arguments
在会执行命令的基础上学会给命令传参,这里我们可以看到/challenge/bin
下面有两个文件,一个是hello
,一个是hacker
,题目说的很明白了要把hacker
的参数传给hello
,照做就行了。
-
-注意要在/challenge/bin
目录下
-Pondering Paths
The Root
一开始以为是
-
-后面发现不对,然后看了一下/
目录的,发现这个目录下也有一个pwn
,所以直接
-
-即可
-Program and aboslute paths
-
-Position thy self
-然后进入他提醒你要进入的目录再执行一次就行了。
-Position elsewhere
和Position thy self
-Position yet elsewhere
和Position thy self
-implicit relative paths, from /
-按照题目提示就行。
-explicit relative paths, from /
-根据题名写题……
-implicit relative paths
-
-home sweet home
cd ~ touch a /challenge/run ~/a
|
-这里题目说了参数要少于3个字符,然后/
目录又没有权限创建文件,所以在~
目录下创建一个文件,然后作为参数传进去,这里题目要求了是要absolute path
,又限制了参数字符数目,所以只能用~
来代表/home/hacker
。值得注意的点有~
代表的是一个absolute path。
-Comprehending Commands
cat: not the pet, but the command!
/challenge/run cd / cat flag
|
-这里比较离谱的点是题目说flag file in your home directory
,其实应该在~
目录下,但是我是在/
目录下找到的。
-catting absolute paths
/challenge/run cd / cat flag
|
-
-more catting practice
根据题目给的目录cat
就好了,注意这个目录在最开始就给出了,要是clear
掉了就重新刷新一下题目吧。
-grepping for a needle in a haystack
grep pwn.college /challenge/data.txt
|
-
-listing files
ls
看一下/challenge
下有什么再执行就行。
-touching files
touch /tmp/pwn touch /tmp/college /challenge/run
|
-
-removing files
rm delete_me /challenge/check
|
-
-hidden files
ls -a / cat /.flag-224672682014244
|
-
-An Epic Filesystem Quest
照着线索走就行,唯一要注意的就是有的目录会有很多文件,线索的文件名是全部大写的,看文件名全为大写的就行。
-making directories
mkdir /tmp/pwn touch /tmp/pwn/college /challenge/run
|
-
-finding files
find / -name flag cat /flag
|
-
-Digesting Documentation
Learning From Documentation
/challenge/challenge --giveflag
|
-
-Learning Complex Usage
/challenge/challenge --printfile /flag
|
-
-Reading Manuals
-然后跟着里面做就行,比如
-/challenge/challenge --soqkid 821
|
-
-Searching Manuals
在man page
里面搜flag
就行,有一个参数是This argument will give you the flag!
,用这个参数就可以拿到flag
。
-Searching For Manuals
就是用man man
去查man命令的查找参数,找到是-K
之后就可以man -K /challenge/challlenge
查看man page找argument
获取flag
了。注意这里是大写的K,且man -K
会需要一点时间,不要以为是卡死了,是在正常检索。
-Helpful Programs
/challenge/challenge -h /challenge/challenge -p
|
-这里会获得一个数字,然后把这个数字用来
-/challenge/challenge -g NUMBER
|
-这样就能获得flag
了。
-Help for Builtins
help challenge challenge --secret NUMBER
|
-
-File Globbing
Matching with *
-
-Matching with ?
-
-Matching with []
cd /challenge/files /challenge/run file_[bash]
|
-
-Matching paths with []
/challenge/run /challenge/files/file_[bash]
|
-
-Mixing globs
cd /challenge/files /challenge/run [cep]*
|
-这里要求要用括号,还要少于6个字符,感觉只能这样取巧了。
-Exclusionary globbing
cd /challenge/files /challenge/run [!pwn]*
|
-
-Practicing Piping
Redirecting output
-
-Redirecting more output
/challenge/run > myflag cat myflag
|
-
-Appending output
/challenge/run >> /home/hacker/the-flag
|
-
-Redirecting errors
/challenge/run > myflag 2> instructions cat instructions cat myflag
|
-知道FD 2
是standard error
就行。
-echo COLLEGE > PWN /challenge/run < PWN
|
-
-Grepping stored results
/challenge/run > /tmp/data.txt cat /tmp/data.txt | grep pwn
|
-
-Grepping live output
/challenge/run | grep pwn
|
-
-Grepping errors
这里要表达的就是grep
命令是捕获standard output
而不是standard error
,但是你可以将standard error
重定向为standard output
然后grep
,你可以通过>&
符号,它可以将一个文件描述符重定向为另一个文件描述符。所以你可以这样2>&1
然后在通过|
去grep
。如下:
-/challenge/run 2>&1 | grep pwn
|
-
-Duplicating piped data with tee
这里从man page
中和教程中知道了tee
命令是从读一个输入并输出到屏幕、文件和命令中。所以我们要先/challenge/pwn | tee pwn | /challenge/college
,然后输出会在屏幕和pwn文件中,从pwn文件中,可以看到/challenge/pwn
需要参数,所以加上参数传给/challenge/college
就好了。
-/challenge/pwn --secret sGFA5iZl | /challenge/college
|
-
-Writing to multiple programs
使用tee
往多个程序里写输入就好了。
-/challenge/hack | tee >(/challenge/the) >(/challenge/planet)
|
-
-Shell Variables
Printing Variables
-
-Setting Variables
-
-Multi-word Variables
-
-Exporting Variables
export PWN=COLLEGE COLLEGE=PWN /challenge/run
|
-
-Printing Exported Variables
-
-Storing Command Output
PWN=$(/challenge/run) echo $PWN
|
-
-read -p "INPUT: " PWN COLLEGE
|
-使用read -p
去指定一个环境变量的值,中间的引号内容可以改变,但是不能去掉,即不能直接read -p PWN
。
-Reading Files
read PWN < /challenge/read_me
|
-
-Processes and Jobs
Listing Processes
ps -aux /challenge/17200-run-5626
|
-
-Killing Processes
ps -aux | grep challenge kill 44 kill 64 /challenge/run
|
-
-Interrupting Processes
/challenge/run Ctrl + c(send "interrupt" )
|
-
-Suspending Processes
/challenge/run Ctrl + z (suspend processes to the background) /challenge/run
|
-
-Resuming Processes
/challenge/run Ctrl + z fg (将后台命令提到前台)
|
-
-Backgrounding Processes
/challenge/run Ctrl + z bg /challenge/run
|
-
-Foregrounding Processes
-
-Starting Backgrounded Processes
-
-Perceiving Permissions
Changing File Ownership
chown hacker /flag cat /flag
|
-
-Groups and Files
chgrp hacker /flag cat /flag
|
-
-Fun With Groups Names
id chgrp grp26348 /flag cat /flag
|
-
-Changing Permissions
chmod 0666 /flag cat /flag
|
-
-Executable Files
chmod 777 /challenge/run /challenge/run
|
-
-Permission Tweaking Practice
学会用chmod
改权限就行,这里我全程用的421,其他的真不会。。。。。。
-Permissions Setting Practice
chmod u=rx,g=w,o=x /challenge/pwn
|
-按照这个模板根据要求改权限就好了。
-The SUID Bit
s
指的是被设置了SUID
之后可以被执行的程序。
-chmod u+s /challenge/getroot /challenge/getroot cat /flag
|
-SUID
-Untangling Users
Becoming root with su
su hack-the-planet cat /flag
|
-
-Other users with su
-
-Cracking passwords
john /challenge/shadow-leak (wait a few minutes) su zardus aardvark /challenge/run
|
-
-Using sudo
-
-Chaining Commands
Chaining with Semicolons
/challenge/pwn; /challenge/college
|
-
-Your First Shell Script
vim x.sh /challenge/pwn; /challenge/college
bash x.sh
|
-
-Redirecting Script Output
bash x.sh | /challenge/solve
|
-
-Executable Shell Scripts
vim script.sh /challenge/solve chmod +x script.sh ./script.sh
|
-
-Pondering PATH
The PATH Variable
-原来ls
命令是从变量里面读取当前路径的。
-Setting PATH
PATH=/challenge/more_commands /challenge/run
|
-
-Adding Commands
mkdir myscript vim ~/myscript/win /run/current-system/sw/bin/cat /flag
PATH="~/myscript" /challenge/run
|
-
-Hijacking Commands
vim ~/myscript/rm /run/current-system/sw/bin/cat /flag
PATH="~/myscript" /challenge/run
|
-说的很明显了。
-]]>
-