Linux&bash闯关CTF

CTF相关 2017-12-03

关卡说明

每一关的目标是获取下一关的入口密码,有了这个密码才能进行下一关。

第一关

描述

下一关的密码保存在当前目录下的readme中。

命令

bandit0@melinda:~$ ls
readme
bandit0@melinda:~$ cat readme
boJ9jbbUNNfktd78OOpsqOltutMc3MY1

第二关

描述

下一关密码保存在系统中文件名中包含'-'的文件。

命令

bandit1@melinda:~$ cat `find . -name '-' -print`
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
bandit1@melinda:~$ find . -name '-' -exec cat {} +
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
bandit1@melinda:~$ find . -name '-' | xargs cat
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
bandit1@melinda:~$ cat $(find . -name '-')
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

第三关

描述

下一关密码保存在当前目录下的隐藏文件中

命令

bandit3@melinda:~$ ls -al inhere
total 12
drwxr-xr-x 2 root root 4096 Nov 14 2014 .
drwxr-xr-x 3 root root 4096 Nov 14 2014 ..
-rw-r—– 1 bandit4 bandit3 33 Nov 14 2014 .hidden
bandit3@melinda:~$ cat inhere/.hidden
pIwrPrtPN36QITSp3EQaw936yaFoFgAB

第四关

描述

下一关密码保存在当前目录的一个text文件中

命令

bandit4@melinda:~/inhere$ file ./* | grep text
./-file07: ASCII text
bandit4@melinda:~/inhere$ cat ./-file07
koReBOKuIDDepwhWk7jZC0RTdopnAYKh

第五关

描述

下一关的密码保存在符合几个条件的文件中,条件包含:文件大小为1033字节、不可执行、可读文件。

命令

bandit5@melinda:~$ cd inhere/
bandit5@melinda:~/inhere$ find . -type f -size 1033c ! -executable | xargs 
file | grep text | cut -d ":" -f 1 | xargs -I % sh -c "echo % ; cat %"

./maybehere07/.file2
DXjZPULLxYr17uwoI01bNLQbtFemEgo7

第六关

描述

下一关的密码保存在属于bandit7的用户权限以及bandit6用户组权限且大小为33字节的文件中。

命令

bandit6@melinda:~$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null | xargs 
-I % sh -c "echo % ; cat %"

/var/lib/dpkg/info/bandit7.password
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

第七关

描述

下一关的密码保存在data.txt文件中且与millionth在一行

命令

bandit7@melinda:~$ cat data.txt | grep millionth
millionth cvX2JJa4CFALtqS87jk27qwqGhBM9plV

第八关

描述

下一关的密码所在行是文件中唯一的不重复的行

命令

bandit8@melinda:~$ sort data.txt | uniq –count | grep "1 "
1 UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

第九关

描述

下一关密码所在的行前面又若干个=号

命令

bandit9@melinda:~$ strings data.txt | grep "^=\+"
========== password
========== ism
========== truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

第十关

描述

下一关的密码经过base64加密后保存在了data.txt中

命令

bandit10@melinda:~$ cat data.txt | base64 -d
The password is IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

第十一关

描述

下一关的密码经过rot13编码后保存在了data.txt中

命令

bandit11@melinda:~$ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
bandit11@melinda:~$
bandit11@melinda:~$ cat data.txt | python -c 'import sys; print sys.stdin.read().decode("rot13")'
The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

第十二关

描述

下一关的密码保存在data.txt中,这是个经过重复压缩后的hexdump文件。

命令

第一步:创建一个临时目录,方便操作

bandit12@melinda:~$ ls
data.txt
bandit12@melinda:~$ mkdir /tmp/123
bandit12@melinda:~$ cp data.txt /tmp/123
bandit12@melinda:~$ cd /tmp/123
bandit12@melinda:/tmp/123$ ls
data.txt

第二步:使用xxd将hex文件转为正常文件

bandit12@melinda:/tmp/123$ xxd -r data.txt > file

第三步:查看文件类型

bandit12@melinda:/tmp/123$ file file
file: gzip compressed data, was "data2.bin", from Unix, last modified: Fri Nov 14 10:32:20 2014, max compression

第四步:从第三步看的出是一个gzip文件,然后使用gzip进行解压操作

bandit12@melinda:/tmp/123$ mv file file.gz
bandit12@melinda:/tmp/123$ gzip -d file.gz
bandit12@melinda:/tmp/123$ ls
data.txt file

第五步:重复第三第四步。直到文件正确解压完成

bandit12@melinda:/tmp/123$ file file
file: bzip2 compressed data, block size = 900k
bandit12@melinda:/tmp/123$ mv file file.bz2
bandit12@melinda:/tmp/123$ bzip2 -d file.bz2
bandit12@melinda:/tmp/123$ ls
data.txt file

bandit12@melinda:/tmp/123$ file file
file: gzip compressed data, was "data4.bin", from Unix, 
        last modified: Fri Nov 14 10:32:20 2014, max compression
bandit12@melinda:/tmp/123$ mv file file.gz
bandit12@melinda:/tmp/123$ ls
data.txt file.gz

bandit12@melinda:/tmp/123$ gzip -d file.gz
bandit12@melinda:/tmp/123$ file file
file: POSIX tar archive (GNU)
bandit12@melinda:/tmp/123$ tar -xvf file
data5.bin

bandit12@melinda:/tmp/123$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@melinda:/tmp/123$ tar -xvf data5.bin
data6.bin

bandit12@melinda:/tmp/123$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
bandit12@melinda:/tmp/123$ mv data6.bin data6.bz2
bandit12@melinda:/tmp/123$ ls
data.txt data5.bin data6.bz2 file
bandit12@melinda:/tmp/123$ bzip2 -d data6.bz2
bandit12@melinda:/tmp/123$ ls
data.txt data5.bin data6 file
bandit12@melinda:/tmp/123$ ls -l
total 48
-rw-r—– 1 bandit12 bandit12 2546 Sep 21 09:40 data.txt
-rw-r–r– 1 bandit12 bandit12 10240 Nov 14 2014 data5.bin
-rw-r–r– 1 bandit12 bandit12 10240 Nov 14 2014 data6
-rw-rw-r– 1 bandit12 bandit12 20480 Sep 21 09:43 file

bandit12@melinda:/tmp/123$ file file
file: POSIX tar archive (GNU)
bandit12@melinda:/tmp/123$ tar -xvf file
data5.bin

bandit12@melinda:/tmp/123$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@melinda:/tmp/123$ tar -xvf data5.bin
data6.bin

bandit12@melinda:/tmp/123$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
bandit12@melinda:/tmp/123$ bzip -d data6.bin
-bash: bzip: command not found
bandit12@melinda:/tmp/123$ bzip2 -d data6.bin
bzip2: Can't guess original name for data6.bin — using data6.bin.out

bandit12@melinda:/tmp/123$ file data6.bin.out
data6.bin.out: POSIX tar archive (GNU)
bandit12@melinda:/tmp/123$ tar -xvf data6.bin.out
data8.bin

bandit12@melinda:/tmp/123$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", from Unix, 
        last modified: Fri Nov 14 10:32:20 2014, max compression
bandit12@melinda:/tmp/123$ mv data8.bin data8.gz
bandit12@melinda:/tmp/123$ gzip -d data8.bin
gzip: data8.bin.gz: No such file or directory
bandit12@melinda:/tmp/123$ ls
data.txt data5.bin data6 data6.bin.out data8.gz file
bandit12@melinda:/tmp/123$ gzip -d data8.gz
bandit12@melinda:/tmp/123$ ls
data.txt data5.bin data6 data6.bin.out data8 file
bandit12@melinda:/tmp/123$ ls -l
total 64
-rw-r—– 1 bandit12 bandit12 2546 Sep 21 09:40 data.txt
-rw-r–r– 1 bandit12 bandit12 10240 Nov 14 2014 data5.bin
-rw-r–r– 1 bandit12 bandit12 10240 Nov 14 2014 data6
-rw-r–r– 1 bandit12 bandit12 10240 Nov 14 2014 data6.bin.out
-rw-r–r– 1 bandit12 bandit12 49 Nov 14 2014 data8
-rw-rw-r– 1 bandit12 bandit12 20480 Sep 21 09:43 file
bandit12@melinda:/tmp/123$ file data8
data8: ASCII text

最后一步:查看文件内容

bandit12@melinda:/tmp/123$ cat data8
The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

第十三关

描述

下一关的密码保存在/etc/bandit_pass/bandit14中,但是这个文件只能由用户bandit14读取。当前目录下有一个bandit14的ssh私钥。

命令

第一步:查看目录文件以及密码文件的权限

bandit13@melinda:~$ ls
sshkey.private
bandit13@melinda:~$ ls -l /etc/bandit_pass/bandit14
-r——– 1 bandit14 bandit14 33 Nov 14 2014 /etc/bandit_pass/bandit14

第二步:利用bandit14的私钥登入系统

bandit13@melinda:~$ ssh -i ./sshkey.private bandit14@localhost
bandit14@melinda:~$ cat /etc/bandit_pass/bandit14
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

第十四关

描述

下一关的密码存在于本地的30000端口,通过连接本地的30000端口并提交上一关得到的密码来获取密码。

命令

bandit14@melinda:~$ echo 4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e | nc localhost 30000
Correct!
BfMYroe26WYalil77FoDi9qh59eK5xNr

第十五关

描述

下一关的密码需要将上一关的密码经过ssl加密发送到本地的30001端口来获得。

命令

使用openssl的s_client参数连接服务器端口

bandit15@melinda:~$ openssl s_client -quiet -connect 127.0.0.1:30001
depth=0 CN = li190-250.members.linode.com
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = li190-250.members.linode.com
verify return:1
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!
cluFn7wTiGryunymYOu4RcffSxQluehd

第十六关

描述

这一关的密码获取方式类似于上一关,不同地方是本地开放的端口没有指定是哪一个,只说了一个端口范围从31000到32000,需要一个一个的尝试而且获取的不是密码二十一个私钥。

命令

第一步:写一个bash脚本,循环连接

for ((i=31000; i<=32000; ++i))
do
    openssl s_client -quiet -connect localhost:$i
done

第二步:查看成功后的结果

bandit16@melinda:~$ openssl s_client -quiet -connect localhost:31790
depth=0 CN = li190-250.members.linode.com
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = li190-250.members.linode.com
verify return:1
cluFn7wTiGryunymYOu4RcffSxQluehd
Correct!
—–BEGIN RSA PRIVATE KEY—–
MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
+TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
—–END RSA PRIVATE KEY—–

将上面的私钥保存为cert.cer供下一关使用。

第十七关

描述

当前目录下又两个文件passwords.old和passwords.new。下一关的密码是passwords.new中与passwords.old唯一不同的行

命令

第一步:使用上一关的私钥连接服务器

steve@steve-nuc:~$ chmod 400 cert.cer
steve@steve-nuc:~$ ssh -i cert.cer bandit17@bandit.labs.overthewire.org

第二步:对比目录下的两个密码文件获取密码

bandit17@melinda:~$ diff passwords.old passwords.new
42c42
< BS8bqB1kqkinKJjuxL6k072Qq9NRwQpR
—
> kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd

第十八关

描述

下一关的密码保存在了服务器下的readme文件中,但是目标服务器不能使用ssh来操作。

命令

第一步:使用scp连接服务器,复制readme文件

steve@steve-nuc:~$ scp bandit18@bandit.labs.overthewire.org:readme ~
bandit18@bandit.labs.overthewire.org's password:
readme 100% 33 0.0KB/s 00:00

第二步:查看文件内容

steve@steve-nuc:~$ cat readme
IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

第十九关

描述

当前目录下有一个setuid文件,密码保存在了/etc/bandit_pass中,这个文件不可以直接读取,可以试着使用这个二进制文件来读取密码文件。

命令

第一步:查看本地文件

bandit19@melinda:~$ ls -l
total 8
-rwsr-x— 1 bandit20 bandit19 7370 Nov 14 2014 bandit20-do

第二步:执行程序并读取文件

bandit19@melinda:~$ ./bandit20-do cat /etc/bandit_pass/bandit20
GbKksEFF4yrVs6il55v6gwY5aVje5f0j

第二十关

描述

当前目录下有一个setuid的二进制文件。这个文件的功能是,可以连接本地指定的端口,然后读取一行数据,判断这个数据是否与上一关的密码相同,如果相同就会发送下一关的密码。

命令

第一步:监听端口,如果有连接直接返回数据

bandit20@melinda:~$ nc -lvp 65535 < /etc/bandit_pass/bandit20
Listening on [0.0.0.0] (family 0, port 65535)

第二步:使用目录下的二进制文件连接监听的端口

bandit20@melinda:~$ ./suconnect 65535

第三步:从第一步的监听窗口获取密码

bandit20@melinda:~$ nc -lvp 65535 < /etc/bandit_pass/bandit20
Listening on [0.0.0.0] (family 0, port 65535)
Connection from [127.0.0.1] port 65535 [tcp/*] accepted (family 2, sport 42398)
gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

第二十一关

描述

本关的重点是有一个定期执行的程序,我们可以通过查看/etc/cron.d/目录下的内容可以得到所有的计划任务。

命令

第一步:查看/etc/cron.d/下的列表

bandit21@melinda:~$ ls /etc/cron.d
behemoth4_cleanup leviathan5_cleanup natas25_cleanup~ semtex0-ppc
cron-apt manpage3_resetpw_job natas26_cleanup semtex5
cronjob_bandit22 melinda-stats natas27_cleanup sysstat
cronjob_bandit23 natas-session-toucher php5 vortex0
cronjob_bandit24 natas-stats semtex0-32 vortex20
cronjob_bandit24_root natas25_cleanup semtex0-64

第二步:查看/etc/cron.d/cronjob_bandit22的内容

bandit21@melinda:~$ cat /etc/cron.d/cronjob_bandit22
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null

第三步:从上面的结果可以看出脚本的真实地址/usr/bin/cronjob_bandit22.sh,查看其内容

bandit21@melinda:~$ cat /usr/bin/cronjob_bandit22.sh
#!/bin/bash
chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

第四步:从上面的脚本看出密码的地址/tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

bandit21@melinda:~$ cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI

第二十二关

描述

这一关跟上一关有相似的地方也是关于定期执行的脚本,在渗透测试的过程中查看别人的自动运行的脚本也是很不错的习惯。对于我们继续渗透有很大的帮助。

命令

第一步:查看/etc/cron.d/cronjob_bandit23的内容,这个文件是在第二十一关列出的。

andit22@melinda:~$ cat /etc/cron.d/cronjob_bandit23
* * * * * bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null

第二步:上一步可以看出,脚本的真实地址是/usr/bin/cronjob_bandit23.sh,查看其内容

bandit22@melinda:~$ 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

第三步:我们可以执行上面的脚本看看结果

bandit22@melinda:~$ sh /usr/bin/cronjob_bandit23.sh
Copying passwordfile /etc/bandit_pass/bandit22 to /tmp/8169b67bd894ddbb4412f91573b38db3

第四步:从上面的结果以及脚本的内容可以看出,脚本执行完之后获取到的是当前用户的密码,所以下一关的密码文件就是执行下面的命令就可以获得。

bandit22@melinda:~$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1
8ca319486bfbbc3663ea0fbe81326349
bandit22@melinda:~$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349
jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n

第二十三关

描述

这一关的关键点也是关于定期执行的脚本,查看脚本的内容并根据功能获取密码。

命令

第一步:查看cronjob_bandit24.sh脚本的内容,这个脚本的是通过第二十一关列出的。

bandit23@melinda:~$ cat /usr/bin/cronjob_bandit24.sh
#!/bin/bash

myname=$(whoami)

cd /var/spool/$myname
echo "Executing and deleting all scripts in /var/spool/$myname:"
for i in * .*;
do
if [ "$i" != "." -a "$i" != ".." ];
then
echo "Handling $i"
timeout -s 9 60 "./$i"
rm -f "./$i"
fi
done

以上脚本的作用是执行/var/spool/下的脚本并删除这些脚本,所以我们要想办法让脚本执行并且将结果输出出来。

第二步:使用以下命令查找一个可以写的目录

find / -type d \( -perm -g+w -or -perm -o+w \) -exec ls -adl {} \;

发现一个可写目录 /run/lock

第三步:在/run/lock下创建一个bash脚本bandit24pwd.sh

bandit23@melinda:~$ cat /run/lock/bandit24pwd.sh
#!/bin/sh
cat /etc/bandit_pass/bandit24 >> /run/lock/password

第四步:添加执行权限等待执行

bandit23@melinda:~$ chmod +x /run/lock/bandit24pwd.sh
bandit23@melinda:~$ cp /run/lock/bandit24pwd.sh /var/spool/bandit24
bandit23@melinda:~$ ls /var/spool/bandit24
bandit24pwd.sh script.sh
bandit23@melinda:~$ ls /run/lock
bandit24pwd.sh hello password
bandit23@melinda:~$ cat /run/lock/password
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ

第二十四关

描述

有一个守护进程监听30002端口,需要将上一关的密码和一个随机的4位数字密码发送到这个端口,验证通过会获得密码。

命令

第一步:使用nc连接本地的30002端口

andit24@melinda:~$ nc localhost 30002
I am the pincode checker for user bandit25. Please enter the password for user 
bandit24 and the secret pincode on a single line, separated by a space.

UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 1111
Wrong! Please enter the correct pincode. Try again.

第二步:由于pin码是错误的,所以使用如下脚本连续提交破解真实的pin码

pin.py

#!/usr/bin/env python
import socket
password = "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ "
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Sending: password and pin...\n"
sock.connect(('localhost', 30002))
data = sock.recv(1024)
for x in range(0,10000):
    sock.send(password + str(x).zfill(4) + "\n")
    data = sock.recv(1024)
    if not "Wrong!" in data:
    print data

第三步:获取结果

bandit24@melinda:/var/lock$ python pin.py
Sending: password and pin…

Correct!
The password of user bandit25 is uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG
Exiting.

第二十五关

描述

这一关的任务是利用目录下的key文件登入服务器,但是在登入的时候由于返回的不是/bin/bash无法进行操作,所以要想办法突破他。

命令

第一步:尝试登入

bandit25@melinda:~$ ssh -i bandit26.sshkey bandit26@localhost

I'm immediately logged out. Let's checkout the shell for bandit26.

第二步:查看/etc/passwd,看看是什么原因

bandit25@melinda:~$ cat /etc/passwd | grep bandit26
bandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext

第三步:由上可以看出在账号登入后会自动执行一个脚本/usr/bin/showtext,查看他的内容:

The shell for bandit26 is
bandit25@melinda:~$ cat /usr/bin/showtext
#!/bin/sh
more ~/text.txt
exit 0

第四步:我们如何突破这个脚本不退出呢?

首先设置Windows的控制台的大小为5行,然后在进行ssh连接,这时我们就处在了more的命令进程中。在这时候我们可以输入v进入vi的编辑shell,然后使用 ":r </path/to/file>"来读取其他文件。

bandit25@melinda:~$ ssh -i bandit26.sshkey bandit26@localhost
_ _ _ _ ___ __
| | | (_) | |__ \ / /
| |__ __ _ _ __ __| |_| |_ ) / /_
| '_ \ / _` | '_ \ / _` | | __| / / '_ \
:r /etc/bandit_pass/bandit26

I pressed the spacebar eleven times to page with more and see the password:
_ _ _ _ ___ __
5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z
| | | (_) | |__ \ / /
| |__ __ _ _ __ __| |_| |_ ) / /_

总结

这篇文章主要内容就是讲解了老外写的一片关于linux以及bash的命令使用的CTF,提供不同的场景使用不同的命令,这里肯定是不全的,不可能包含linux的所有命令以及所有情况,只能作为一个参看,能学多少学多少,这篇文件搞了好久,光图片就五十多张,累死我了,我感觉还是挺有用,不知道大家感觉如何,希望有用吧。


本文由 myh0st 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论