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 8cat 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