Wargames学习笔记--Leviathan

靶场链接:https://overthewire.org/wargames/leviathan/

Level 0

Username: leviathan0
Password: leviathan0

Level 0 --> Level 1


登录leviathan0
在家目录 ls -a发现有一个隐藏目录 .backup,目录中有一个html文件
把文件复制到本地用浏览器打开,搜索password发现了密码

Not Found
The requested URL /passwordus.html | This will be fixed later, the password for leviathan1 is rioGegei8m was not found on this server.

Apache/2.4.10 (Debian) Server at leviathan.labs.overthewire.org Port 80

Level 1 --> Level 2


登录leviathan1
家目录中有一个可执行文件 check,运行提示需要密码
直接scp到本地拖进ida来看
在这里插入图片描述
关键部分是将输入的字符串和 sex做比较,比较成功会执行shell
在password输入密码后进入/bin/sh这个shell,发现已经拥有leviathan2的权限,直接cat密码就可以

leviathan1@leviathan:~$ ./check 
password: sex
$ id  
uid=12002(leviathan2) gid=12001(leviathan1) groups=12001(leviathan1)
$ cat /etc/leviathan_pass/leviathan2    
ougahZi8Ta
$ 

Level 2 --> Level 3


登录leviathan2
家目录有一个可执行文件 printfile,按照提示应该可以直接读取密码

leviathan2@leviathan:~$ ./printfile 
*** File Printer ***
Usage: ./printfile filename
leviathan2@leviathan:~$ ls -l
total 8
-r-sr-x--- 1 leviathan3 leviathan2 7436 Aug 26  2019 printfile

直接打印密码文件提示文件没有这个文件,看看源码
在这里插入图片描述

在这里插入图片描述
这里的关键是使用了access()这个函数检查了文件的文件名和类型,所以要绕过这个检查,直接打印所输入的内容,可以创建一个密码文件的软链接,创建一个软链接名称开头的带空格的文件,然后执行命令,access()检查是一个文件,cat的执行会分成两个文件执行就可以cat到密码

mkdir /tmp/leviathan2
cd /tmp/leviathan2
ln -s /etc/leviathan_pass/leviathan3 getpass
touch "getpass 1.txt"
 ~/printfile getpass\ 1.txt 

Level 3 --> Level 4


登录leviathan4
和上一题很相似
在这里插入图片描述
主函数里什么,内容在do_stuff()这个函数里
在这里插入图片描述
很明显,比较的字符串是snlprintf,相同就可以get shell

./level3 
Enter the password> snlprintf  
[You've got shell]!
$ id
uid=12004(leviathan4) gid=12003(leviathan3) groups=12003(leviathan3)
$ cat /etc/leviathan_pass/leviathan4

Level 4 --> Level 5


登录leviathan5
一个隐藏目录 .trash,里面有一个 bin可执行文件

leviathan4@leviathan:~$ ls -la
total 24
drwxr-xr-x  3 root root       4096 Aug 26  2019 .
drwxr-xr-x 10 root root       4096 Aug 26  2019 ..
-rw-r--r--  1 root root        220 May 15  2017 .bash_logout
-rw-r--r--  1 root root       3526 May 15  2017 .bashrc
-rw-r--r--  1 root root        675 May 15  2017 .profile
dr-xr-x---  2 root leviathan4 4096 Aug 26  2019 .trash
leviathan4@leviathan:~/.trash$ ltrace ./bin
__libc_start_main(0x80484bb, 1, 0xffffd774, 0x80485b0 <unfinished ...>
fopen("/etc/leviathan_pass/leviathan5", "r")                                             = 0
+++ exited (status 255) +++
leviathan4@leviathan:~/.trash$ ./bin 
01010100 01101001 01110100 01101000 00110100 01100011 01101111 01101011 01100101 01101001 00001010 

直接执行的输出就是密码的二进制,只要2进制转ascii就可以

b_password = '01010100 01101001 01110100 01101000 00110100 01100011 01101111 01101011 01100101 01101001 00001010'

list_pasword = b_password.split(' ')

password = []

for i in range(0, len(list_pasword)):
    password += chr(int(list_pasword[i], 2))
    # print(int(list_pasword[i], 2))
print(password)

Level 5 --> Level 6


登录leviathan6
有一个可执行程序,直接ida看一下
在这里插入图片描述
就是读取/tmp/file.log文件的内容,这个文件是不存在的。所以依然可以用软链接的方法处理

ln -s /etc/leviathan_pass/leviathan6 /tmp/file.log

直接执行./leviathan5后就显示密码

Level 6 --> Level 7


登录leviathan6

leviathan6@leviathan:~$ ./leviathan6 
usage: ./leviathan6 <4 digit code>

提示要加四位数字,明显是想让我们爆破。因为在靶机上文件一会就被删了操作不方便,所以把文件拷贝到本地,用shell脚本爆破

#!/bin/bash
for i in {1000..9999}
do
	/root/Desktop/leviathan6 $i
	echo $i
done
Wrong
7122
# ^C
# id
uid=0(root) gid=0(root) groups=0(root)
# ^C
# 

可以看到执行到7123进了shell,所以在靶机上直接输入7123然后cat密码就可以

leviathan6@leviathan:~$ ./leviathan6 7123
$ cat /etc/leviathan_pass/leviathan7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值