Homework 2020/01/15(关键词:Linux,bandit)

Homework

Wang yuan can 

January 15, 2020

@雨人网安

作业

作业开始

1.作业提要

  • Linux命令,Bandit wargame.
  • Linux命令
  • 在vm装linux镜像文件

2.作业分析

2.1 通关Bandit wargame,做到26-27关. link:https://overthewire.org/wargames/bandit/


要求:写出清晰明确的解题过程,阐明解题思路;在第二天的汇报中能够动手实操并讲解

ps:每通过一关,输入exit命令退出后重新进入

游戏开始:

level 0 ==> level 1

使用linux远程命令运行ssh

ssh -p 2220 bandit0@bandit.labs.overthewire.org

ssh命令解析

    ssh命令格式:
    ssh + -p ssh开放端口 + 客户端用户名@服务器ip地址或者域名

连接成功后,需要查看readme文件内容,使用cat命令

cat readme

The key :boJ9jbbUNNfktd78OOpsqOltutMc3MY1

 End

level 1 ==> level 2

这一关的意思是,存密码的文件名为-,我们要查看这个文件的内容。注意到‘-’在linux中是一个特殊的字符,如要查看该文件的内容需要指定是当前路径下的。

cat ./-
cat /home/bandit1/-  //直接定位到目录

注:关于特殊字符'-'的一些说明

1.作为选项,前缀[option, prefix]使用。用于命令或者过滤器的选项标志;操作符的前缀。
2.用于stdin或者stdout的重定向的源或目的[dash].在tar没有bunzip2的程序补丁时,我们可以这样: bunzip2 linux-2.6.13.tar.bz2 | tar xvf - 。将前面解压的数据作为tar的标准输入(这里使用一个-表示)
3.表示先前的工作目录(previous working directory)

./说明是当前路径下的文件

The key: CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

End

level 2 ==> level 3

这一关的意思是说,保存密码的文件名为“spaces in the filename”,它在home目录下,我们仍然需要查看这个文件中的内容,但是这个文件名中包含了空格,直接使用cat命令无法查看,我们需要使用双引号将文件名包裹起来,绕过空格。

cat  “space in this filename”

The key: UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

End

level 3 ==> level 4

这一关的密码放在一个隐藏文件中,我们需要用ls -a来查看这个隐藏文件.hidden,题目中已经告诉我们这个隐藏文件放在inhere目录下,ls -a之后发现了这个目录,进入这个目录,然后ls -a查看到这个文件,最后用cat查看文件内容。

ls -a
cd inhere/
ls -a
cat .hidden

The key: pIwrPrtPN36QITSp3EQaw936yaFoFgAB

End

level 4 ==> level 5

写有通关密码的文件放在inhere目录下,这个文件类型是可辨识的,我们要用file ./*查看当前目录下所有文件的类型。(同样要注意-特殊字符的影响)

ls -al
cd inhere/
file ./*
cat ./-file07

The Key: koReBOKuIDDepwhWk7jZC0RTdopnAYKh

End

level 5 ==> level 6

密码文件在inhere目录下的某个文件夹中,这个文件夹的类型是可识别的,文件大小为1033字节

ls -r
cd inhere
ls -r
find ./ -type f -size 1033c
cat  ./maybehere07/.file2

The Key :DXjZPULLxYr17uwoI01bNLQbtFemEgo7

End

level 6 ==> level 7

存密码的文件放在服务器的某个位置,为bandit7用户所有,属于bandit6组,文件大小为33个字节

find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
cat /var/lib/dpkg/info/bandit7.password
这里-user指定user组,-group指定group组,-size指定大小,后面的2>/dev/null因为find命令在根目录下查找会经常有很多权限的报错信息,所有在linux中通常用这种方式将错误信息重定向到“黑洞中”

The Key: HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

End

level 7 ==> level 8
密码存放在文件的millionth这个单词的后面,我们需要定位到这个单词的位置。
cat data.txt|grep millionth

The Key: cvX2JJa4CFALtqS87jk27qwqGhBM9plV

End

level 8 ==> level 9

本题是说,存密码的文件名为data.txt,而它只在文件中出现了一次

sort data.txt|uniq -u

The Key :UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

End

level 9 ==> level 10

本题的密码存在data.txt文件中,是一小段可辨识的字符串,它是以一些=符号开始的,因此我们需要获取可打印的文件内容。

strings data.txt

The Key: truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

End

level 10 ==> level 11

存密码的文件被加密了,加密方式为base64,因此需要用base64进行解密:

base64 -d data.txt

The Key : IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

End

level 11 ==> level 12

密码文件中字母的的顺序旋转了13个位置,就相当去26个字母的前13个位置与后13个位置调换了。那么我们就是用tr命令进行调换回来。

cat data.txt | tr 'a-zA-Z' 'n-za-mN-ZA-M'

The Key : 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

End

level 12 ==> level 13

密码存放的文件被多重压缩了,需要根据文件类型不断进行解压,直到解压出来的文件可以用cat直接查看为止。

mkdir /tmp/pino
cp data.txt /tmp/pino
cd /tmp/pino
cat data.txt
xxd -r data.txt data2
file data2
data2: gzip compressed data, was "data2.bin", from Unix, last modified: Thu Jun 6 13:59:44 2013, max compression
mv data2 data.gz
gzip -d data.gz
file data
data: bzip2 compressed data, block size = 900k
bzip2 -d data
bzip2: Can't guess original name for data -- using data.out
file data.out
data.out: gzip compressed data, was "data4.bin", from Unix, last modified: Thu Jun 6 13:59:43 2013, max compression
zcat data.out > data3
file data3
data3: POSIX tar archive (GNU)
tar -xvf data3
data5.bin
file data5.bin
data5.bin: POSIX tar archive (GNU)
tar -xvf data5.bin
data6.bin
file data6.bin
bzip2 -d data6.bin
bzip2: Can't guess original name for data6.bin -- using data6.bin.out
file data6.bin.out
data6.bin.out: POSIX tar archive (GNU)
tar -xvf data6.bin.out
data8.bin
file data8.bin
data8.bin: gzip compressed data, was "data9.bin", from Unix, last modified: Thu Jun  6 13:59:43 2013, max compression
zcat data8.bin > data9.bin
file data9.bin
data9.bin: ASCII text
cat data9.bin
8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

The Key: 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

End

 level 13 ==> level 14

这道题我们使用bandit13用户登陆的,但是题目说需要我们用bandit14用户登陆才能查看密码,并且给了我们ssh的私钥,那么我们就可以利用ssh -i参数指定私钥进行登陆

ssh -i sshkey.private bandit14@localhost
cat  /etc/bandit_pass/bandit14

The Key :4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

End

level 14 ==> level 15

我们要把这关的密码提交到localhost的30000端口上,用telnet连接到本地的30000端口上,然后把这关的密码发送过去.

telnet localhost 30000 

The key: BfMYroe26WYalil77FoDi9qh59eK5xNr

End

level 15 ==> level 16

这道题用openssl命令,这个命令不太常用,直接openssl help查看帮助,发现命令openssl s_client help,根据帮助找到登陆命令

openssl s_client -connect localhost:30001

The Key:cluFn7wTiGryunymYOu4RcffSxQluehd

End

level 16 ==> level 17

将当前密码提交到 localhost 的 31000端口到 32000端口其中的一个端口,得到进入下一关的凭证。但只有其中一个端口开启了监听服务,并且需要通过ssl加密传输。

nmap localhost -p 31000-32000
openssl s_client -connect localhost:31790
cluFn7wTiGryunymYOu4RcffSxQluehd  //需要输入本关的密码
cd /tmp/bandit16
chmod 600 sshkey.private
ssh -i sshkey.private bandit17@localhost
cat /etc/bandit_pass/bandit17
The key is: xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn

level 17 ==> level 18

这题需要用到diff来比较文件的一致性,此题有两个文件,passwords.new和passwords.old,也就是新文件和旧文件,cat查看两个文件时,发现文件内容极尽相似,这时候我们要一个一个的对比文件的差异性那是不现实的,为此,我们需要用到diff来快速比较此两个文件的差异。

diff passwords.new passwords.old

The Key:kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd

End

level 18 ==> level 19

ssh -p 2220 bandit18@bandit.labs.overthewire.org cat readme

The Key:IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

End

level 19 ==> level 20

./bandit20-do cat /etc/bandit_pass/bandit20

The Key:GbKksEFF4yrVs6il55v6gwY5aVje5f0j

End

level 20 ==> level 21

//nc命令 nc可以做反向代理 ***
nc -l 2333 < /etc/bandit_pass/bandit20 &  //放在后台执行
./suconnect 13579
nc -l -p 13579 < /etc/bandit_pass/bandit20 &

The Key:gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

End

level 21 ==> level 22

The Key:Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI

End

level 22 ==> level 23

The Key:jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n

End

level 23 ==> level 24

 

 

mkdir /tmp/bandit23
chmod 777 /tmp/bandit23
cd /tmp/bandit23
vim shell.sh

#!/bin/bash
cat /etc/bandit_pass/bandit24 >> /tmp/bandit/pass

The Key:UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ

End

level 24 ==> level 25

from pwn import *

r = remote('localhost', 30002)
for i in range(0, 10):
    for j in range(0, 10):
        for k in range(0, 10):
            for p in range(0, 10):
                flag = str(i) + str(j) + str(k) + str(p)
                s = "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ "+ flag
                r.sendline(s)
                response = r.recvline()
                if 'Wrong!' not in response:
                    print 'Correct! ' + response

The Key:uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG

End

level 25 ==> level 26

ssh -i ssh.private bandit26@localhost
:e /etc/bandit_pass/bandit26

The Key:5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z

End

level 26 ==> level 27

vim模式下
:set shell=/bin/sh
:sh

The Key:3ba3118a22e93127a4ed485be72ef5ea

End

level 27 ==> level 28

密码在git上托管的一个项目里,题目中给出了这个项目的地址,我们需要用ssh远程访问这个项目,将这个项目复制到本地来,密码文件在README这个文件中。

ssh -p 2220 bandit27@bandit.labs.overthewire.org //bandit27
mkdir /tmp/pin027    //建一个临时文件
cd /tmp/pin027
git clone  ssh://bandit27-git@localhost/home/bandit27-git/repo    //将项目克隆到新建的目录中
ls
cd repo/
ls
cat README
The password to the next level is: 0ef186ac70e04ea33b4c1853d2526fa2

level 28 ==> level 29

ssh -p 2220 bandit28@bandit.labs.overthewire.org //bandit28
mkdir /tmp/pin028    //建一个临时文件
cd /tmp/pin028
git clone  ssh://bandit28-git@localhost/home/bandit28-git/repo    //将项目克隆到新建的目录中
ls
cd repo/
ls
cat README
git log
git show
The Key is :bbc96594b4e001778eee9975372716b2

level 29 ==> level 30

ssh -p 2220 bandit29@bandit.labs.overthewire.org
git clone ssh://bandit29-git@localhost/home/bandit29-git/repo
cd /tmp/pin029
cd repo/
git branch -a
git checkout remotes/origin/master
git checkout remotes/origin/dev
git log
git show
The key is :5b90576bedb2cc04c86a9e924ce42faf

level 30 ==> level 31

ssh -p 2220 bandit30@bandit.labs.overthewire.org //bandit30
mkdir /tmp/pin030    //建一个临时文件
cd /tmp/pin030
git clone  ssh://bandit30-git@localhost/home/bandit30-git/repo    
ls
cd repo/
ls
git show-ref
git show f17132340e8ee6c159e0a4a6bc6f80e1da3b1aea 
The key is :47e603bb428404d265f59c42920d81e5

level 31 ==> level 32

本题要求我们把key.txt文件push到远程服务器上,首先按照要求创建key.txt。

echo 'May I come in ?' > key.txt
git add -f key.txt
git commit
git push
The key is: 56a9bf19c63d650ce78e6ec0354ee45e

level 32==> level 33

执行uppershell发现他会把输入的命令变成大写之后再执行,导致命令并不能正常执行。因此我们可以写一个名字为大写的shell文件。

#!/bin/bash
bash
The key is :c9c3199ddf4121b10cf581a98d51caee

 The End

2.2 写一份命令速记表,分类整理Linux各种常用命令,给出常用使用方法

操作文件及目录

 

 

 系统常用命令

 

 压缩解压缩

 

 文件权限操作

 

 Linux常用快捷键

2.3 装一台属于自己的Linux,发行版任选

3.思考总结

4.参考资料

bandit通关日志:https://www.jianshu.com/p/bf8cc6b0efd1

linux练习平台WarGame之bandit通关日志:https://blog.csdn.net/chest_/article/details/101123204

Linux最常用命令!简单易学,能解决95%以上的问题!https://blog.csdn.net/weixin_38405253/article/details/93815774

Navicat Premium

posted @ 2020-01-16 01:38  MkU  阅读(496)  评论(0编辑  收藏  举报