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

  1. 使用du 查看使用空间

    1
    du -a | grep '1033'
  2. 使用find

    1
    2
    3
    find . -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
2
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
1
find / -user 'bandit7' -group 'bandit6' -size 33c | grep -v 'denied'

level 8

找只出现一次的数据,可以用uniq找,但需要先用sort排序

1
2
uniq
-u或——unique:仅显示出一次的行列;
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
2
3
4
gzip -d data.gz
bzip2 -d data.bz2
tar -xvf data.tar
...

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
2
openssl s_client -connect localhost:30001 -ign_eof
openssl s_client -connect localhost:30001 -quiet

-quiet用以关闭session和证书的信息,同时打开-ign_eof这个选项。前者可简化显示的界面,后者则保证在输入完成后不是立即断开连接,否则无法看到回显的下一个等级的密码

level 18

登陆之后会马上登出

  1. 通过ssh命令,在打开shell之前直接执行命令并获得输出

    1
    ssh bandit18@bandit.labs.overthewire.org 'cat ./readme'
  2. scp命令

    1
    scp bandit18@bandit.labs.overthewire.org:.~/readme ./readme

level 22

同21关也是定时任务

1
2
3
4
5
6
$ cat /usr/bin//cronjob_bandit23.sh 
#!/bin/bash
myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"
cat /etc/bandit_pass/$myname > /tmp/$mytarget

密码在/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
2
V 调用vi编辑器
!命令 调用Shell,并执行命令

试了试用!执行命令,但没有效果
按v进入vi编辑器,:r /etc/bandit_pass/bandit26读文件

1
2
3
4
vi执行命令
:r !command
:r file
:!command

level 26

v进入编辑模式

1
2
:set shell sh=/bin/sh
:sh

得到shell

level 28

git回退版本

1
2
git log
git checkout xxx

level 29

切换分支

1
2
git branch -a
git checkout xxx

level 30

git clone之后还有一个.git目录,这个目录下包含了所有git正常工作所需要的信息 。包括对象存储,配置文件,分支和标签,HEAD 文件等 ,git reflog 可以查看所有分支的所有操作记录(包括提交、回退、已删除的提交操作记录等),git show-ref它的作用是显示本地存储库中可用的引用以及关联的提交 ID

level 31

读readme.md 要把内容为May I come in?key.txtpush到仓库
.gitignore里是提交时忽略的文件
git add -f key.txt强制提交

1
2
3
git add -f key.txt
git commit
git push

level 32

有一个uppershell把所有的命令都转为了大写并且执行

  1. 写一个文件名为大写的脚本,执行
    A.SH:

    1
    2
    # /bin/bash
    bash
  2. $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参数…。