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