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字符
HTML编码
&开头;结尾。
中间英文或者#后接十进制数或#x后接十六进制数。
JS编码
解析顺序
浏览器解析:HTML文档被解析,生成DOM树和css样式表,遇到<script>标签的时候将控制权交给JS引擎
由于需要先生成DOM树再解析html编码内容,所以不可以将标签进行html编码
解码顺序
HTML解码。JS解码。URL解码。
APP
过ROOT :
FradiAntiRootDetection:hook底层禁止检测su(那么其实也可以直接hook对应检测函数),Apatch框架,还有狐狸面具+shamiko、KSU框架都可以过root检测
抓包代理:根证书手动设置,SSLUnpinning和算法助手
脱壳:为了可以用jadx反编译,先用MT管理器或者找一些文件资源的功能点查壳,然后用Fundex等软件脱壳
HOOK函数:Frida(hluda)
免杀
免杀方法
- 修改特征码,猜测杀软对哪几个字节进行查杀,再对应修改(几乎没用了)
- shellcode 加载器,改变加载到内存的方式和加密方式(主流)(分离免杀)
- 反射 dll 加载,把 dll 加密,远程下载到内存中再解密执行(高级)
无文件执行木马的方式有哪些?
powershell(脚本解析器) 》》》powershell.exe(应用程序)
VB.script(脚本解析器) 》》》cscript.exe(应用程序)
bat 处理 (脚本解析器) 》》》cmd.exe(应用程序)
javaSrtipt(脚本解析器) 》》》mshta.exe(应用程序)
怎么做 shellcode 免杀?
- 编码
- 加壳
- 混淆
- 分离免杀
- 特征码修改
- 添加无用逻辑语句
- 重写 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 对象
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 对象转换库)
要求: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链
TemplatesTmpl包的getTransletInstance方法对于成员属性_class下标为_transletIndexdex类进行实例化
一直往上分析,可以发现就是_outputProperties属性的getter方法
来到赋值类,_class类可控但是要求\bytecodes部位null,父类为ABSTRACT_TRANSLET
JdbcRowSetImpl链
好理解很多,setAutoCommit方法会调this.connect(当this.conn空),然后调用了lookup(this.getDataSourceName)
发现还存在一个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)
默认禁止了codebase的加载
绕过分析:ldap lookup的javaFactory(必须是ObjectFactory的子类)可以来自codebase或者本地的类地址,然后获得实例后构建JavaClassName指定的对象,最后log4j调用toString转换为字符串
那么 无法调用远程codebase的高版本jdk(>8u191)只需要找到一个ObjectFactory子类且可利用的java本地类即可
例如BeanFactory类 他的默认构造函数可以实例化一个类的同时调用任意只有string参数的方法
再去利用ELProcessor类
log4j2 (2.15-rc1)
对jndi的host port 加载的java类型等进行了限制
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 不允许导入 | 导出,此时无法提权
- 当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入 | 导出只能发生在 /tmp/ 目录下,此时也无法提权
- 当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入 | 导出做限制,此时可提权 在 MySQL 的配置文件 my.ini 中进行配置
利用
1 |
|
日志写入
1.查看配置
1 |
|
2.开启 general_log 模式
1 |
|
3.修改日志目录为 shell 地址
1 |
|
4.写入 shell 并连接利用
1 |
|
5.抹除痕迹
1 |
|
绕过disable_funcion
bypass disable_function的方法及蚁剑插件bypass-php-function使用 - zw1sh - 博客园 (cnblogs.com)
apache mod_cgi
前提
LD_preload
写一个动态链接文件
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 |
|
域前置
同一个cdn下有两个域名,curl访问的时候取决于host头写的是哪个域名
1 |
|
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
用户名爆破
密码喷洒和密码爆破
Kerberoasting
ASRepRoasting
黄金票据和白银票据
MS14-068
非约束委派、约束委派、基于资源的约束委派
票据传递(ptt/ptk/ptc)
mimikatz加密降级攻击(万能钥匙)
使用恶意的kerberos证书做权限维持
psexec原理
连接SMB共享后上传恶意服务文件到共享目录,打开SCM创建恶意服务连接管道
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 |
|
提权为何选择可读写目录?不用带空格的目录?
因为 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 解压目录穿越
在 python 或者 Unix 下,使用 tar 压缩的文件名如果存在目录穿越,那么解压后的文件也会造成穿越
ar cPvf shell.tar ../../../../../../../../var/www/html/testupload/payload.php
pickle 反序列化
yaml 反序列化
Phpsession 特性
PHP session 反序列化漏洞原理解析 - 掘金 (juejin.cn)
- 利用 session 上传文件(配合文件上传)
- 由于 php 序列化处理器的不同导致的反序列化
CRLF 注入
利用换行符和回车符导致注入 http 数据
Nodejs Ssrf 拆分攻击
利用的是 nodejs 对于特殊字符的转换导致不能正常过滤掉控制字符/r/n 导致的 CRLF 注入
Soap ssrf
结合 CRLF 注入:通过第二个参数控制 UA 间接可控制 content-type
1 |
|
Phar 反序列化
同时存在文件上传和和一些触发 phar 协议的函数的时候可以强制触发反序列化
自动注册类函数 spl_autoload_register
假如可以上传.inc 文件,同时存在反序列化,则将 webshell 修改为 inc 文件上传,记录上传的文件名,将他作序列化之后输入到反序列化的地方即 getshell
Docker PHP 裸文件本地包含
只有文件包含但是无法上传文件,则需要利用本地文件
- 日志包含:由于 Docker 将日志文件重定向,包含权限不足
- Phpinfo 与条件竞争
我们需要获取文件名,同时需要条件竞争
- window 通配符
- session.upload_progress
- pearcmd.php
DNS 域传送漏洞
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
利用了公开密钥提供了身份验证和数字签名功能防止伪造篡改。
查看方式
绕过
说实话看的不是很明白