昨天,边肖分享了《超火强盗记》(1-10),今天我们继续我们未完成的故事......
OverTheWire是一个战争游戏网站。其中,Bandit是一款适合学习Linux指令的游戏,主要考察一些基本的Linux命令行操作。规则是每一级使用提供的host plus端口和从上一级获得的密码通过ssh进入指定的环境,并按要求获取指定的密钥,获得的密钥作为下一级的密码。
网站:
http://overthewire.org/wargames/bandit/
上次我们到了10级,得到的密码是trukldjsbj 5 g7yyj2x 2 r0o 3 a5 hqjfulk。继续吧。这部分难度适中。
10级→11级
描述:下一个密码存储在data.txt文件中,包含base64编码数据
bandit10@bandit:~$ cat ./data.txtVGhlIHBhc3N3b3JkIGlzIElGdWt3S0dzRlc4TU9xM0lSRnFyeEUxaHhUTkViVVBSCg==为了得到一串base64加密数据,我们需要在这里解密它,并使用系统自带的base64命令
bandit10@bandit:~$ cat ./data.txt | base64 -dThe password is IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR11级→12级
说明:密码保存在data.txt文件中,但是里面的英文字母字符(A-Z/a-z)都是旋转13位的
本文涉及一种非常古老的置换密码算法ROT13。简单来说,原字母在13位数字后被其对应的字母替换,超过该数字时就绕回26个英文字母的开头。a被n取代,b被o取代,以此类推,直到m被z取代,然后顺序反过来:n被a取代,o被b取代,最后z被m取代。
在linux中,可以使用tr命令来完成
bandit11@bandit:~$ cat ./data.txtGur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHhbandit11@bandit:~$ cat ./data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu12级→13级
说明:密码存储在data.txt文件中,是经过hexdump转换并经过多次压缩的二进制文件数据,即十六进制文件。本主题主要研究linux下各种压缩文件命令的用法
可以使用的命令有:“grep、sort、uniq、strings、base64、tr、tar、g、b2、xxd、mkdir、CP、mv”
它还建议我们可以在/tmp下创建一个新目录,复制文件进行操作。可能有几个步骤可以操作~
第一步是看文件的样子
bandit12@bandit:~$ cat data.txt00000000: 1f8b 0808 ecf2 445a 0203 6461 7461 322e ......DZ..data2.00000010: 6269 6e00 0149 02b6 fd42 5a68 3931 4159 bin..I...BZh91AY第二步,复制一份到//tmp/level13/(自己取名字)
bandit12@bandit:~$ mkdir /tmp/level13bandit12@bandit:~$ cp data.txt /tmp/level13/bandit12@bandit:~$ cd /tmp/level13/第三步是将十六进制文件转换回二进制文件,并使用xd命令
bandit12@bandit:/tmp/level13$ xxd -r data.txt data第三步是使用file命令确定文件的类型,然后使用相应的命令解压文件
bandit12@bandit:/tmp/level13$ file datadata: g compressed data, was "data2.bin", last modified: Thu Dec 28 13:34:36 2017, max compression, from Unixbandit12@bandit:/tmp/level13$ mv data data.gzandit12@bandit:/tmp/level13$ g -d data.gzg: data.gz: decompression OK, trailing garbage ignored第四步,重复前一步
bandit12@bandit:/tmp/level13$ file datadata: b2 compressed data, block size = 900kbandit12@bandit:/tmp/level13$ b2 -d datab2: Can't guess original name for data -- using data.outbandit12@bandit:/tmp/level13$ file data.outdata.out: g compressed data, was "data4.bin", last modified: Thu Dec 28 13:34:36 2017, max compression, from Unixbandit12@bandit:/tmp/level13$ zcat data.out > data2bandit12@bandit:/tmp/level13$ file data2data2: POSIX tar archive (GNU)bandit12@bandit:/tmp/level13$ tar -xvf data2data5.binbandit12@bandit:/tmp/level13$ file data5.bindata5.bin: POSIX tar archive (GNU)bandit12@bandit:/tmp/level13$ tar -xvf data5.bindata6.binbandit12@bandit:/tmp/level13$ file data6.bindata6.bin: b2 compressed data, block size = 900kbandit12@bandit:/tmp/level13$ b2 -d data6.binb2: Can't guess original name for data6.bin -- using data6.bin.outbandit12@bandit:/tmp/level13$ file data6.bin.outdata6.bin.out: POSIX tar archive (GNU)bandit12@bandit:/tmp/level13$ tar -xvf data6.bin.outdata8.binbandit12@bandit:/tmp/level13$ file data8.bindata8.bin: g compressed data, was "data9.bin", last modified: Thu Dec 28 13:34:36 2017, max compression, from Unixbandit12@bandit:/tmp/level13$ zcat data8.bin > data9.binbandit12@bandit:/tmp/level13$ file data9.bindata9.bin: ASCII textbandit12@bandit:/tmp/level13$ cat data9.binThe password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL真是折腾~终于拿到密码了
13 →14级
描述:进入下一级的密码存储在/etc/bandit_pass/bandit14中,但该文件只能由用户bandit14读取。这一级没有密码,但是可以通过ssh私钥登录bandit14,获取进入下一级的密码。
可以使用的命令:ssh、telnet、NC、OpenSSL、s _ client、nmap
从这个角度出发,研究了linux网络管理的命令,如ssh远程登录
让我们看看是否有私钥,然后登录bandit14
bandit13@bandit:~$ ls -ltotal 4-rw-r----- 1 bandit14 bandit13 1679 Dec 28 2017 sshkey.privatebandit13@bandit:~$ ssh -i sshkey.private bandit14@localhost登录成功,检查密码进入下一级
bandit14@bandit:~$ cat /etc/bandit_pass/bandit144wcYUJFw0k0XLShlDzztnTBHiqxU3b3e14→15级
描述:将当前密码提交到localhot的30000端口,就可以得到下一个密码了
这很简单,只需使用telnet登录到本地主机的端口30000并提交当前密码
bandit14@bandit:~$ telnet localhost 30000Trying ::1...Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.4wcYUJFw0k0XLShlDzztnTBHiqxU3b3eCorrect!BfMYroe26WYalil77FoDi9qh59eK5xNrConnection closed by foreign host.15→16级
描述:通过ssl加密传输当前密码,然后提交到localhost的30001端口获取下一个密码
和前一个差不多,除了多了一个ssl加密传输,不能用telnet,因为telnet是明文传输~
这里,我们使用openssl的SCLENT命令。SCLENT是一个ssl/TLS客户端程序,对应的是server。它不仅可以与服务器通信,还可以使用SSL协议与任何其他服务程序通信。
bandit15@bandit:~$ openssl s_client -connect localhost:30001 -ign_eof-ign_eof:当输入文件到达文件末尾时,连接不会断开。
然后提交当前密码并获得密码进入下一级
Verify return code: 18 (self signed certificate)---BfMYroe26WYalil77FoDi9qh59eK5xNrCorrect!cluFn7wTiGryunymYOu4RcffSxQluehdclosedbandit15@bandit:~$16→17级
描述:将当前密码提交到localhost的31000到32000端口之一,获取证书进入下一级。但是,只有一个端口启用了侦听服务,它需要通过ssl加密进行传输。
这个水平好像有点麻烦。要不要一个一个来试试?这不是我们的风格。
是时候牺牲nmap这个神器了。
让我们先确定端口服务
bandit16@bandit:~$ nmap -A localhost -p31000-32000......31790/tcp open ssl/unknown| ssl-cert: Subject: commonName=bandit.......我们发现31790开启了监听,是一个ssl服务
给它密码
bandit16@bandit:~$ openssl s_client -connect localhost:31790......cluFn7wTiGryunymYOu4RcffSxQluehdCorrect!-----BEGIN RSA PRIVATE KEY-----MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon......返回一个RSA私钥。这是进入下一级的证书。我们复制它并将其保存为sshkey.private文件
bandit16@bandit:/tmp$ mkdir /tmp/bandit16bandit16@bandit:/tmp$ cd /tmp/bandit16bandit16@bandit:/tmp/bandit16$ vim sshkey.private然后使用私钥登录bandit17
bandit16@bandit:/tmp/bandit16$ chmod 600 sshkey.privatebandit16@bandit:/tmp/bandit16$ ssh -i sshkey.private bandit17@localhost提示:您必须在这里更改私钥的权限,否则您将不能登录
17→18级
说明:有两个文件,分别是password . old和passwords.new,进入下一级的密码在passwords.new中,而且是password . old中唯一被修改过的一行。如果你已经解决了这个水平,并看到“拜拜!”当您尝试登录bandit18时,这与下一个级别有关。
可以使用的命令:cat、grep、ls、diff
调查现场是否回档操作?
非常简单,只需使用diff命令
Diff是Unix系统中非常重要的工具。它用于比较两个文本文件之间的差异
bandit17@bandit:~$ diff passwords.new passwords.old42c42< kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd---> 6vcSC74ROI95NqkKaeEC2ABVMDX9TyUrkfbf 3 eyk 5bpbrzwjqutbbfe 887 SVC 5YD为改装线
bandit17@bandit:~$ ssh bandit18@localhost......Byebye !Connection to localhost closed.......不骗我真的很真诚,提示拜拜!然后看下一关说什么
18→19级
描述:密码存储在主目录的自述文件中。但是,当使用SSH登录时,有人修改了”。这导致你退出。是最后一个提示的出现。拜拜!。谁这么坑~ ~
~/.这个文件包含特定于您的bash shell的bash信息,在登录和每次打开新的shell时都会读取这些信息。
估计bash没有打开,登录后无法分配伪终端远程登录,导致退出。
怎么登录?我们找到了ssh命令的帮助,找到了参数-T,意思是“没有伪终端分配”,也就是说远程主机不需要分配伪终端。让我们试试
bandit17@bandit:~$ ssh -T bandit18@localhostiduid=11018(bandit18) gid=11018(bandit18) groups=11018(bandit18)成功登录
lscat readmeIueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x19→20级
描述:要访问下一级,您必须在您的主目录中使用setuid可执行程序。使用setuid文件后,您可以在/etc/bandit_pass/中找到密码。
这一关考查的是linux文件权限的知识。如果二进制可执行程序具有SUID权限,则其他用户在执行该程序时将拥有与文件所有者相同的权限。
bandit19@bandit:~$ ls -ltotal 8-rwsr-x--- 1 bandit20 bandit19 7408 Dec 28 2017 bandit20-do这个“bandit20-do”的权限是“rwsr-x-”,也就是说它是SUID许可的程序。
我们来看看文件“/etc/bandit_pass/bandit20”的权限
bandit19@bandit:~$ cat /etc/bandit_pass/bandit20cat: /etc/bandit_pass/bandit20: Permission deniedbandit19@bandit:~$ ls -l /etc/bandit_pass/bandit20-r-------- 1 bandit20 bandit20 33 Dec 28 2017 /etc/bandit_pass/bandit20发现只有“bandit20”用户可以阅读,所以我们需要使用“bandit20-do”调用“cat”命令来查看文件内容
bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20GbKksEFF4yrVs6il55v6gwY5aVje5f0j-------------------login bandit20bandit19@bandit:~$ ssh bandit20@localhost待续......
别忘了投稿
大家都有不错的技术原创文章
欢迎提交至邮箱:edu@heetian.com或qq:3200599554
根据文章的时效性、新颖性、文笔和实用性,和田将给予100元-500元不等的稿费
详情投稿,点击奖励|和田原创投稿等你!
1.《thewire OverTheWire Bandit Writeup (11-20)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《thewire OverTheWire Bandit Writeup (11-20)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1017697.html