Overthewire bandit wp
- 看着网上的攻略和视频把这个通关了,学到了linux和git的命令,挺有意思的,一些简单的关卡就不写了,只写写学到的姿势
- url : http://overthewire.org/wargames/bandit/
level 1
每一关都需要找到ssh密码或者密钥文件进入下一关,给出了第一关的ssh密码,直接登陆
1 | ssh bandit0@bandit.labs.overthewire.org -p2220 |
之后每一关如此,只是用户名改为bandit
+level
level 5
The password for the next level is stored in a file somewhere under the inhere directory and has all of the following properties:
human-readable
1033 bytes in size
not executable
使用
du
查看使用空间1
du -a | grep '1033'
使用
find
1
2
3find . -size 1033c
-size<文件大小>:查找符合指定的文件大小的文件;
level 6
The password for the next level is stored somewhere on the server and has all of the following properties:
owned by user bandit7
owned by group bandit6
33 bytes in size
1 | -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录; |
1 | find / -user 'bandit7' -group 'bandit6' -size 33c | grep -v 'denied' |
level 8
找只出现一次的数据,可以用uniq找,但需要先用sort排序
1 | uniq |
1 | cat data.txt | sort | uniq -u |
level 9
在乱码文件中找到可打印字符
用strings
命令
1 | cat data.txt | strings | grep '=' |
level 10
base64解码
1 | cat data.txt | base64 -d |
level 11
rot13解码
tr命令可以对来自标准输入的字符进行替换、压缩和删除
1 | cat data.txt | tr [a-z] [n-za-m] | tr [A-Z][N-ZA-M] |
level 12
把16进制文件转回二进制文件
1 | xxd -r data.txt data |
接着用file
文件类型,解包
1 | gzip -d data.gz |
level 13
用给出的ssh私钥ssh_private
登陆
需要改私钥的权限,否则私钥不安全禁止登陆
1 | ssh -i ./ssh_private bandit24@bandit.labs.overthewire.org |
level 15
The password for the next level can be retrieved by submitting the password of the current level to port 30001 on localhost using SSL encryption.
1 | openssl s_client -connect localhost:30001 -ign_eof |
-quiet
用以关闭session和证书的信息,同时打开-ign_eof
这个选项。前者可简化显示的界面,后者则保证在输入完成后不是立即断开连接,否则无法看到回显的下一个等级的密码
level 18
登陆之后会马上登出
通过ssh命令,在打开shell之前直接执行命令并获得输出
1
ssh bandit18@bandit.labs.overthewire.org 'cat ./readme'
scp命令
1
scp bandit18@bandit.labs.overthewire.org:.~/readme ./readme
level 22
同21关也是定时任务
1 | $ cat /usr/bin//cronjob_bandit23.sh |
密码在/tmp中保存,文件名可以通过md5sum计算
1 | cat /tmp/`echo I am user bandit23 | md5sum` |
level 24
爆破4位数字
在脚本中执行命令会巨慢,网络不好还会停。。
看了别人的操作,先把爆破好的密码+四位数字存到一个文件里,然后cat a.txt|nc 127.0.0.1 30002
非常快
level 25
Logging in to bandit26 from bandit25 should be fairly easy… The shell for user bandit26 is not /bin/bash, but something else. Find out what it is, how it works and how to break out of it.
cat /etc/passwd
查看使用的shell
cat一下发现用了more命令
more命令一次显示一屏文本
1 | V 调用vi编辑器 |
试了试用!
执行命令,但没有效果
按v进入vi编辑器,:r /etc/bandit_pass/bandit26
读文件
1 | vi执行命令 |
level 26
v进入编辑模式
1 | :set shell sh=/bin/sh |
得到shell
level 28
git回退版本
1 | git log |
level 29
切换分支
1 | git branch -a |
level 30
git clone
之后还有一个.git
目录,这个目录下包含了所有git正常工作所需要的信息 。包括对象存储,配置文件,分支和标签,HEAD 文件等 ,git reflog
可以查看所有分支的所有操作记录(包括提交、回退、已删除的提交操作记录等),git show-ref
它的作用是显示本地存储库中可用的引用以及关联的提交 ID
level 31
读readme.md 要把内容为May I come in?
的key.txt
push到仓库.gitignore
里是提交时忽略的文件git add -f key.txt
强制提交
1 | git add -f key.txt |
level 32
有一个uppershell
把所有的命令都转为了大写并且执行
写一个文件名为大写的脚本,执行
A.SH:1
2# /bin/bash
bash$0
骚操作,指的是当前Shell本身的文件名
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如”$*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$@
所有参数列表。如”$@”用「”」括起来的情况、以”$1” “$2” … “$n” 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。