分析请求、响应内容,判断是否攻击成功
首先看告警事件名称判断是网络攻击事件还是web攻击事件,
网络攻击事件:定位五元组信息(源IP、目的IP、源端口、目的端口、协议),
对整个僵、木、蠕传播链进行分析,以攻击IP作为受害IP进行检索查找攻击源。
WEB攻击事件:通过数据包的请求体、响应体、状态码等
配置:三个告警三个分析两个处置两个溯源
代理流量特征是指通过代理服务器传输的网络流量的特点和属性。代理流量特征可以包括代理服务器IP地址、代理类型(如HTTP代理、SOCKS代理等)、代理服务器端口号、代理服务器协议等信息。
我使用过的设备包括各种防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)、安全信息和事件管理(SIEM)系统等
内存马,顾名思义是运行在内存中的恶意代码,不像传统的webshell是有实体文件的,内存马更多是利用中间件的进程来执行恶意代码;
Java的内存马分两种:1.利用中间件的组件,修改已有组件或者动态注册新的组件,在请求经过的时候做修改来达到目的,经典的Javaweb三大件:servlet、filter、listener,还有一些中间件特有的组件,比如tomcat的valve、spring的controller等;2.通过java的instrumentation动态修改已有代码,实现ClassFileTransformer接口,进而实现命令执行等功能;
使用一个空的 SimplePrincipalCollection 作为 payload,序列化后使用待检测的秘钥进行加密并发送,秘钥正确和错误的响应表现是不一样的,可以使用这个方法来可靠的枚举 Shiro 当前使用的秘钥。
未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
二十八种未授权访问漏洞合集(暂时最全)_metrics未授权访问-CSDN博客
有指纹的钓鱼邮件的溯源处理
从邮件中获取相关的信息
1.发件人地址:是否是代发邮件,一般来讲代发邮件的域名与主域名一致,如不一致,谨防钓鱼
2.发件内容的研判
根据内容的诱导性判断是否为可以的邮件,以及内容中设计到的一些信息,二维码等,留存提取出ip,域名邮件等地址,留作后续的溯源处理
3.发件附件的处置
内容会指引诱导你点击某些网址,或者下载某些程序文件,将相关样本可以在沙箱运行后尝试得到一些攻击者的服务器等基础设施的信息,留作溯源用
4.邮件的详情查看,获取域名,对方基础设施信息,ip等信息
5.沙箱运行样本文件,从中提取相关域名ip信息
无指纹的邮件处置
1.在线邮箱子域名爆破,进行下一步的信息收集
2.邮箱社工,获取到的邮箱ID昵称等,在网络上大范围的溯源
溯源方式:第一种,可以通过相关联的域名/IP进行追踪;第二种,对钓鱼网站进行反向渗透获取权限,进一步收集攻击者信息;第三种,通过对邮件恶意附件进行分析,利用威胁情报数据平台寻找同源样本获取信息,也能进一步对攻击者的画像进行勾勒。
安全设备报警,如扫描IP、威胁阻断、病毒木马、入侵事件等
日志与流量分析,异常的通讯流量、攻击源与攻击目标等
服务器资源异常,异常的文件、账号、进程、端口,启动项、计划任务和服务等
邮件钓鱼,获取恶意文件样本、钓鱼网站URL等
蜜罐系统,获取攻击者行为、意图的相关信息
首先通过一些高危的函数判断是否为 webshell,会有频繁的 HTTP 请求,异常的请求方法base64 编码的数据
菜刀:使用 HTTP 协议通信,请求的 payload为base64编码,UA 中存在百度或者火狐,大多为POST请求,请求的地址为webshell地址,请求体中有固定字符QGluaV9zZxQo
蚁剑:很多代码源于菜刀,流量也会比较相似,使用 AES 算法进行加密,使用的UA 是固定的,请求中比较明显的特征为@ini_set("display_errors","0"),加密后的参数多数是 0x=这种形式
冰蝎:老版本的话会有个密钥协商过程,这个过程是明文传输的,响应包就会有16位的密钥,新版本各种语言的webshel中都会存在16位数的连接密码,默认变量为K,像Content-type、Accept为固定的
1.使用xp_cmdshell进行提权
2.使用sp_oacreate进行提权
3,使用SQL Server 沙盒提权
利用passwd提权:
需要对passwd文件有写入权限,写入一个uid=0的用户,用这个用户登录就可以登录到root账户。
预编译:本身是为了节省运行效率的一种机制,避免多次查询时需要多次编译,而是提前编译,固定语法树的结构。但固定后无论传入的参数是什么,都只能当做参数来处理,而不会被当做指令的一部分来运行,因此规避了SQL注入;
只要是可以固定的就都不能绕过预编译,只有动态的参数才可以,比如需要外部输入表名、库名,或者需要输入不带引号的参数,比如字段名,使用预编译会使程序无法做到功能。总结来说就是是字符串但不能加引号的位置都不能预编译;
部分模糊查询的功能无法预编译,但也可以修改进行适配;
使用benchmark()函数做代替,这个函数是让某个表达式进行多次的函数,可以同时达到延时和检测服务器性能的目的。
只有mysql使用sleep(),PostgreSQL的pg_sleep()函数,Microsoft SQL Server的WAITFOR DELAY语句,Oracle的DBMS_LOCK.SLEEP()函数;可以尝试其他函数,万一后台使用的不是mysql就可以注入;
1. 下载告警pcap数据包,根据告警提示攻击类型,过滤payload信息,定位流量
2. 判断是否攻击成功,需具体分析攻击请求响应内容或使其payload进行攻击测
试等
3. 最终可根据流量分析给出判定类型:扫描、攻击尝试、攻击成功、攻击失
及时隔离主机
使用find命令查找定位webshell,对webshell进行取样
结合web日志分析
清除webshell及残留文件
原理:将原本的sql语句在用户可控的参数经过了替换、拼接字符串等操作,得到了一个新的sql语句并在数据库的解析下,达到了非预期的注入效果
危害:由于注入达到了非预期的效果,有可能导致数据库大量泄漏数据,甚至被删库,如果数据库开启文件读写权限,还可能导致服务器被写入木马
防御:SQL 注入的防御:SQL 注入的防御一般从三个方向开展:1. 集成安全防御工具,如 WAF 等。通常可以拦截大部分的攻击流量,但并不绝对,存在一定的绕过风险;2. 黑白名单限制。黑名单主要体现在参数格式、参数长度、特殊字符、转义或编码后的特殊字符等,但是由于绕过方式层出不穷,黑名单很容易出现纰漏,白名单主要应用在对动态表列名、排序等场景下,仅允许指定的参数通过,安全性较高;3. 预编译SQL。也是目前最流行最有效的方案,几乎所有的持久层框架都是使用这种技术。预编译其实就是 SQL 引擎预先对 SQL 语句进行分析编译,然后再去填充参数,目前来说这种技术是可以完全防御 SQL 注入的。
类型:联合注入、报错注入、布尔注入、时间注入、堆叠注入、宽字节注入、二次注入、dnslog注入、中转注入
SQLMap 发送 Post 请求通常有三种方式:
1.使用 --data 参数,参数格式与 URL 参数相同,如: sqlmap -u http://xxx.xxx.xxx/login.html --data "id=1&name=xxx";
2.保存 Post 请求包(通常使用 bp, 假设保存为 post.txt),然后使用 -r指定请求包文件,如: sqlmap -r "C:\Users\Administrator\Desktop\post.txt";
3.扫描 form 表单,如: sqlmap -u http://xxx.xxx.xxx/login.html --forms
1.参数长度异常。大多数的 SQL 注入参数由于需要截断、拼接、构造等操作,会导致参数的长度比较长;
2.特殊字符。大多数的 SQL 注入会包含如 '、 "、)、;、#、--、