打点一般会用什么漏洞
优先以 java 反序列化这些漏洞像 shiro,fastjson,weblogic,用友 oa 等等进行打点,随后再找其他脆弱性易打进去的点。因为 javaweb 程序运行都是以高权限有限运行,部分可能会降权。
描述外网打点的流程
靶标确认、信息收集、漏洞探测、漏洞利用、权限获取。最终的目的是获取靶标的系统权限 / 关键数据。在这个过程中,信息收集最为重要。掌握靶标情报越多,后续就会有更多的攻击方式去打点。比如:钓鱼邮件、web 漏洞、边界网络设备漏洞、弱口令等。
redis未授权了解过没
有一个 redis 的未授权访问漏洞,redis 在默认的情况下会绑定在 0.0.0.0:6379,如果防火墙没有做策略限制,则外网可以访问到 redis 上,如果没有设置 redis密码(默认为空),会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis的数据(这对于用于验证码码来说威胁很大),而且攻击者在未授权访问 Redis 的情况下,可以利用 Redis 自身的提供的 config命令像目标主机写 WebShell、写 SSH 公钥、创建计划任务反弹 Shell 等。
常见的中间件漏洞
iis: PUT漏洞、短文件名猜解、远程代码执行、解析漏洞apache: 解析漏洞、目录遍历nginx: 文件解析、目录遍历、CRLF注入、目录穿越tomcat: 远程代码执行、war后门文件部署jBoss: 反序列化漏洞、war后门文件部署weblogic: 反序列化漏洞SSRF任意文件上传war后门文件部署Apache Shiro 反序列化漏洞: Shiro rememberMe(Shiro-550) Shiro Padding Oracle Attack(Shiro-721)
平常如何发现shiro漏洞?
Apache Shiro 是一个 Java 安全框架,执行身份验证、授权、密码和会话管理。apacheShiro 框架提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。shiro 反序列化漏洞:shiro 在 CookieRememberMeManaer 类中将 cookie 中 rememberMe字段内容分别进行序列化、AES 加密、Base64 编码操作。攻击者构造一个恶意的对象,并且对其序列化,AES 加密,base64 编码后,作为 cookie 的 rememberMe 字段发送。Shiro 将 rememberMe 进行解密并且反序列化,最终造成反序列化漏洞。登陆失败时候会返回 rememberMe=deleteMe 字段或者使用 shiroScan 被动扫描去发现完整:未登陆的情况下,请求包的 cookie 中没有 rememberMe 字段,返回包 set-Cookie 里也没有 deleteMe 字段登陆失败的话,不管勾选 RememberMe 字段没有,返回包都会有 rememberMe=deleteMe 字段不勾选 RememberMe 字段,登陆成功的话,返回包 set-Cookie 会有 rememberMe=deleteMe 字段。但是之后的所有请求中 Cookie 都不会有 rememberMe 字段勾选 RememberMe 字段,登陆成功的话,返回包 set-Cookie 会有 rememberMe=deleteMe 字段,还会有 rememberMe 字段,之后的所有请求中 Cookie 都会有 rememberMe 字段shiro 有几种漏洞类型shiro 550shiro 721Apache Shiro 框架提供了记住我的功能(RemeberMe),用户登录成功后会生成经过加密并编码的 cookie。cookie 的 key 为RemeberMe,cookie 的值是经过对相关信息进行序列化,然后使用 aes 加密,最后在使用 base64 编码处理形成的在服务端接收 cookie 值时,按以下步骤解析:> 检索 RemeberMe cookie 的值>> Base 64 解码>> 使用 ACE 解密(加密密钥硬编码)>> 进行反序列化操作(未作过滤处理)在调用反序列化的时候未进行任何过滤,导致可以触发远程代码执行漏洞用户登陆成功后会生成经过加密并编码的cookie,在服务端接收 cookie 值后,Base64 解码 -->AES 解密 --> 反序列化。攻击者只要找到 AES加密的密钥,就可以构造一个恶意对象,对其进行序列化 -->AES 加密 -->Base64 编码,然后将其作为 cookie 的rememberMe 字段发送,Shiro 将 rememberMe 进行解密并且反序列化,最终造成反序列化漏洞。
WebLogic 权限绕过的姿势?
`CVE-2020-14883` 是一个 `Console` 的未授权访问,而 `CVE-2020-14883` 是在利用未授权访问的前提下,在 `Console` 进行代码执行,于是远程攻击者可以构造特殊的 `HTTP` 请求,在未经身份验证的情况下接管 `WebLogic Server Console` ,并在 `WebLogic Server Console` 执行任意代码。1、 通过静态资源来绕过权限验证,防止被重定向到登陆界面。2、 通过请求 `.portal` ,控制处理的 `Servlet` 是渲染 `UI` 的 `MBeanUtilsInitSingleFileServlet` 。3、 通过编码后的 `../` ,让最终渲染的模版是 `console.portal` 。综合起来,才造成了最终的未授权访问。
Fastjson 漏洞利用原理?
在请求包里面中发送恶意的 json 格式 payload,漏洞在处理 json 对象的时候,没有对 @type 字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl 类,而这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes 生成 java实例,这就达到 fastjson 通过字段传入一个类,再通过这个类被生成时执行构造函数。FastJson 是一个由阿里巴巴研发的 java 库,可以把 java 对象转换为 JSON 格式,也可以把 JSON 字符串转换为对象。通俗理解就是:漏洞利用 fastjson autotype 在处理 json 对象的时候,未对 @type 字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程 rmi 主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步对服务器数据进行修改,增加,删除等操作,对服务器造成巨大影响。Fastjson RCE 的本质就是在反序列化时会调用目标类的 setter 方法。以 com.sun.rowset.JdbcRowSetImpl Gadget 为例,类中的 setAutoCommit 方法中通过 connect 方法调用了 lookup 方法,且 lookup 方法的参数又能通过setDataSourceName 方法设置,即其参数可控。那么就会导致 JNDI 注入,最终实现任意命令执行。Java 处理 Json 格式数据有三个比较流行的类库:- Gson (google 维护) - Jackson- Fastjson
讲一下MongoDB 未授权访问漏洞
[MongoDB] 服务安装后,默认未开启权限验证。如果服务监听在 0.0.0.0,则可远程无需授权访问[数据库]3.0 之前版本的 MongoDB, 默认监听在 0.0.0.0,3.0 及之后版本默认监听在 127.0.0.1。3.0 之前版本,如未添加用户管理员账号及数据库账号,使用 --auth 参数启动时,在本地通过 127.0.0.1 仍可无需账号密码登陆访问数据库,远程访问则提示需认证;3.0 及之后版本,使用 --auth 参数启动后,无账号则本地和远程均无任何数据库访问权限。
jndi 注入是什么
JNDI RCE 漏洞产生的原因就在于当我们在注册 RMI 服务时,可以指定 Codebase url,也就是远程要加载类的位置,设 置该属性可以让 JDNI 应用程序在加载时去寻找我们指定的类 ( 例如:http://ip:port/EvilObject.class) 。 这里还有一个比较重要的点,也是触发恶意代码的点。就是当 JNDI 应用程序通过 lookup (RMI 服务的地址) 方法调用指 定 Codebase url上的类后,会调用被远程调用类的构造方法,所以如果我们将恶意代码放在被远程调用类的构造方法中时, 漏洞就会触发。
、
简述下log4j2漏洞
Apache Log4j2 是一个基于 Java 的日志记录工具。Apache Log4j 2.x <= 2.14.1 版本存在远程代码执行漏洞。漏洞的主要原因是 log4j2的接收器对于不可靠来源的输入没有过滤,攻击者则可以利用此特性通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。由于 Log4j2组件在处理程序日志记录时存在 JNDI 注入缺陷,未经授权的攻击者利用该漏洞,可向服务器发送恶意的数据,触发 log4j2组件的缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。为了输出日志时能够方便地输出任意位置的 java 对象,Log4j2 引入了一个叫 Lookup的统一接口。这个接口允许在写日志的时候,按照具体的实现逻辑去查找对象的位置,并输出对象的内容。这里的对象通常在内存中,但由于 java支持对象的序列化 / 反序列化,它也可以存储在硬盘文件里,甚至是远程服务器上。我们提到的 JNDI 就是对 Lookup接口的一种实现。其本身也是一个接口,提供了命名关键字到对象的映射目录,允许开发者提供一个名称,即可获取到对象的内容。LDAP,即轻量级目录访问协议,是 JNDI 的一种底层实现,它可以让我们方便的查询分布式数据库。既然是分布式的,LDAP允许从远程服务器加载对象。而这里加载对象时使用的不是一般的反序列化方法,而是通过「命名引用」功能,支持直接从远程下载 class文件并加载对象。于是,Log4j2 中就暗含了注入漏洞:允许传入参数解析为 LDAP 协议,从远程服务器下载 class 文件并执行。这个功能本来是为了方便开发,使 java 对象位置对上层应用透明,却不料酿成大祸
简述下struts2漏洞
Struts2 是 apache 项目下的一个 web 框架,使用 OGNL 作为默认的表达式语言,由于 OGNL能够创建或更改可执行代码,因此能够为使用它的任何框架引入严重的安全漏洞,多个 Apache Struts 2 版本容易受到 OGNL安全漏洞的攻击。
webshell 的利用
Webshell 是黑客经常使用的一种恶意脚本,其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户数据、删除 web页面、修改主页等。黑客通常利用常见的漏洞,如 SQL 注入、远程文件包含 (RFI)、FTP,甚至使用跨站点脚本攻击 (XSS)等方式作为社会工程攻击的一部分,最终达到控制网站服务器的目的。黑客可以用 web 的方式,通过 asp 或 php 木马后门控制网站服务器,包括上传下载文件、查看数据库、执行任意程序命令等。Webshell 可以嵌套在正常网页中运行,且不容易被查杀。它还可以穿越服务器防火墙,由于与被控制服务器或远程主机交互的数据都是通过 80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,Webshell 使用 post 包发送,也不会被记录在系统日志中,只会在 Web日志中记录一些数据提交的记录。- WebShell 的分类 ①根据文件大小分类:大马和小马 (通常指的是一句话木马,能够使用菜刀这类工具去直接连接它) ②根据脚本名称分类:jsp、asp、aspx、php- WebShell 的利用寻找页面上传点写好一句话木马(上传木马),比如如下的 PHP 一句话木马的代码:`_POST['shell']); ?>`然后寻找上传后的文件位置(绝对路径),可以用蚁剑、中国菜刀等工具连接到主机进行接下来的操作,比如提权。- WebShell 有哪些特征?- 持久化远程访问Webshell 脚本通常会包含后门,黑客上传 Webshell 之后,就可以充分利用 Webshell的后门实现远程访问并控制服务器,从而达到长期控制网站服务器的目的。此外,在上传完 Webshell之后,黑客会选择自己修复漏洞,以确保没有其他人会利用该漏洞。通过这种方式,黑客就可以一种低调的姿态,避免与管理员进行任何交互,同时仍然获得相同的结果。- 提权在服务器没有配置错误的情况下,Webshell 将在 web 服务器的用户权限下运行,而用户权限是有限的。通过 Webshell,黑客可以利用系统上的本地漏洞来实现权限提升,从而获得Root 权限,这样黑客基本上可以在系统上做任何事情,包括安装软件、更改权限、添加和删除用户、窃取密码、阅读电子邮件等等。- 隐藏性极强Webshell 可以嵌套在正常网页中运行,且不容易被查杀。它还可以穿越服务器防火墙,由于与被控制服务器或远程主机交互的数据都是通过 80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,Webshell 使用 post 包发送,也不会被记录在系统日志中,只会在 Web日志中记录一些数据提交的记录。- WebShell 常用的 PHP 函数Webshell 几乎适用于所有 Web 编程语言。之所以关注 PHP,是因为它是 web 上使用最广泛的编程语言。下面是 PHP 中一些执行 shell 命令最常用的函数。- system()system () 函数将命令作为参数,并输出结果。下面的示例是在 Windows 操作系统上运行 dir 命令,然后返回 PHP 文件所在目录的目录列表。```php<?phpecho system('ls -al');```exec()exec () 功能是将命令作为参数,但不输出结果。如果指定了第二个可选参数,则返回结果为数组。否则,如果回显,只显示结果的最后一行。```php<?phpecho exce('ls -al');echo exce('ls -al',$array);var_dump($array);```shell_exec()shell_exec () 函数类似于 exec (),但是,其整个输出结果为字符串。```php<?phpecho shell_exce('ls -al');```passthru()passthru () 执行一个命令并返回原始格式的输出。```php<?phpecho passthru('ls -al');```- proc_open()proc_open () 可以创建一个处理程序(流程),实现脚本和要运行的程序之间的通信。- 倒引号PHP 会首先执行 shell 命令中倒引号(`)内的内容
命令执行漏洞常见函数
- System 函数的语法是: system (string $command [, int &end-inline-katex-->return_var ] )- 同 C 版本的 system () 函数一样- 本函数执行 command 参数所指定的命令,并且输出执行结果- 命令执行后的返回值为输出值的最后一行- 函数本身也会打印全部的输出值- Exec 函数的语法为:exec (string $command [, array &$output [, int &c194a9egreturn_var ] )- 同 exec () 函数类似- passthru () 函数也是用来执行外部命令 command 的- 当所执行的系统命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec () 或 system () 函数。- Shell_exec 函数的语法为: shell_exec (string $cmd)- cmd 是要执行的命令 - String 是参数的数据类型,也就是字符串。- 函数会在命令执行完成后将全部的输出值作为字符串输入返回值,本身并不打印任何信息。 - Shell_exec 函数的用法同反引号形同,注意是反引号(``)而不是普通单引号(’’)。
如何判断网站是否有 CDN?
- 传统访问:用户访问域名 --> 解析服务器 IP--> 访问目标主机- 普通 CDN:用户访问域名 -->CDN 节点 --> 真实服务器 IP--> 访问目标主机- 带 WAF 的 CDN:用户访问域名 -->CDN 节点(云 WAF)--> 真实服务器 IP--> 访问目标主机很简单,使用不同地方的 ping 服务,查看对应 IP 地址是否唯一,如果不唯一则极有可能是使用了 CDN1、通过 ping 命令,查看回显情况 2、windows 系统环境下,使用 nslookup 进行查询,看返回的域名解析的情况 3、超级 ping 工具,比如”all-tool.cn/tools /ping“「看 ip 结果」
如何判断靶标站点是 windows/linux?
1、大小写检测:windows 大小写不敏感,而 linux 大小写敏感。 2、PING 指令:根据 TTL 值,winodws 一般情况下 > 100,linux<100 TTL (生存时间值):该字段指定 IP 包被路由器丢弃之前允许通过的最大网段数量。
如何建立隐藏用户?
1、net user test$ 123456 /add [建立隐藏用户]2、net localgroup administrators test$ /add